(57)【要約】  コンテンツアイテムをインクリメンタルに受信およびレンダリングするための、コンピュータ記憶媒体上に符号化された方法、システム、およびコンピュータプログラムである。一つの例示的なシステムは、サーバ、ユーザデバイス、およびユーザデバイス上で実行されているクライアントを含む。クライアントは、サーバにコンテンツ要求を送信する。クライアントは、複数の断片においてコンテンツ要求のレスポンスをインクリメンタルに受信する。複数の断片がレスポンス全体を構成する。断片が、コンテンツアイテムとコンテンツアイテムを記述するメタデータとを含み、コンテンツアイテムがレンダリング可能であるとともに、1つまたは複数のデータオブジェクトによって定義される。クライアントは、断片が受信されるとき、断片のコンテンツアイテムをディスプレイバッファにインクリメンタルにレンダリングする。コンテンツアイテムは、メタデータによって決定された順序でレンダリングされる。クライアントは、ユーザデバイスのディスプレイ上にディスプレイバッファの全部または一部を表示する。
2022500785.tif 000002
【特許請求の範囲】
【請求項１】
1つまたは複数のコンピュータおよび1つまたは複数の記憶デバイスを備えるサーバであって、ソーシャル・メッセージング・プラットフォームを実装するように構成されたサーバと、
ユーザデバイスと、
前記ユーザデバイス上で実行されている前記ソーシャル・メッセージング・プラットフォームのクライアントソフトウェアとを含む、システムであって、
前記クライアントソフトウェアは、動作を実行するように構成され、前記動作が、
前記サーバにコンテンツ要求を送信するステップと、
前記ユーザデバイス上のネットワークスタックのトランスポート層から複数の断片において、前記サーバから前記コンテンツ要求のレスポンスをインクリメンタルに受信するステップであって、前記複数の断片がレスポンス全体を構成し、前記レスポンスが、コンテンツアイテムと前記コンテンツアイテムを記述するメタデータとを含み、各コンテンツアイテムがレンダリング可能であるとともに、1つまたは複数のデータオブジェクトによって定義される、ステップと、
前記断片が受信されるとき、前記断片の前記コンテンツアイテムをディスプレイバッファにインクリメンタルにレンダリングするステップであって、前記メタデータによって決定された順序で前記コンテンツアイテムを前記ディスプレイバッファに配置することを含み、前記ディスプレイバッファが前記ユーザデバイスのメモリのデータ構造である、ステップと、
前記ユーザデバイスのディスプレイ上に前記ディスプレイバッファの全部または一部を表示するステップと
を含む、システム。
【請求項２】
前記クライアントソフトウェアは、スタンドアロンアプリであるか、前記ユーザデバイス上にインストールされたウェブブラウザで実行されるJavaスクリプトプログラムである、請求項1に記載のシステム。
【請求項３】
前記コンテンツアイテムを記述する前記メタデータは、各コンテンツアイテムに対して、前記レスポンスの他のコンテンツアイテムに対する、および前記ディスプレイバッファに以前にレンダリングされたレスポンスのコンテンツアイテムに対する、前記コンテンツアイテムの前記ディスプレイバッファの場所を指定するシーケンス識別子を含む、請求項1に記載のシステム。
【請求項４】
それぞれのコンテンツアイテムのシーケンス識別子が、他のコンテンツアイテムに対する、前記コンテンツアイテムの作成された時間に対応する、請求項3に記載のシステム。
【請求項５】
前記メタデータは、前記レスポンスの最初の断片において受信され、前記レスポンスのコンテンツアイテムの総数を含み、前記動作はさらに、
前記最初の断片の前記コンテンツアイテムを前記ディスプレイバッファにレンダリングし、前記レスポンスの後続の断片の各コンテンツアイテムのためのそれぞれのプレースホルダを前記ディスプレイバッファに含めるステップと、
前記後続の断片の前記コンテンツアイテムをレンダリングするときに、前記それぞれのプレースホルダを再配置するステップとを含む、請求項1に記載のシステム。
【請求項６】
前記メタデータはさらに、各コンテンツアイテムについて、シーケンス識別子を含み、それぞれのプレースホルダは、対応するコンテンツアイテムの前記シーケンス識別子によって指定された前記ディスプレイバッファの場所に作成される、請求項5に記載のシステム。
【請求項７】
前記断片が受信されるときに前記断片の前記コンテンツアイテムをインクリメンタルにレンダリングするステップは、
第1の断片が特定のコンテンツアイテムの最初の部分のみを含むと決定するステップと、
前記特定のコンテンツアイテムの残りを含む第2の断片を受信するステップと、
前記最初の部分と前記特定のコンテンツアイテムの前記残りを組み合わせるステップと、
前記ディスプレイバッファに前記組み合わせたコンテンツアイテムをレンダリングするステップと
を含む、請求項1に記載のシステム。
【請求項８】
前記1つまたは複数のデータオブジェクトは、JSONオブジェクトであり、前記断片が受信されるときに前記断片の前記コンテンツアイテムをインクリメンタルにレンダリングするステップは、各コンテンツアイテムに対して、
前記コンテンツアイテムを定義するJSONオブジェクトの開始を識別するステップと、
前記コンテンツアイテムを定義する前記JSONオブジェクトの終わりを識別するステップと
を含む、請求項7に記載のシステム。
【請求項９】
前記レスポンスの前記断片の各々は、前記クライアントソフトウェアに、トランスポート層プロトコルによって提供される1つまたは複数のトランスポート層セグメントを含む、請求項1に記載のシステム。
【請求項１０】
各レスポンスでは、前記レスポンスの各コンテンツアイテムをレンダリングする必要のあるデータが、前記コンテンツアイテムを定義する前記1つまたは複数のデータオブジェクトに含まれるか、あるいは、前記レスポンスにおいて以前に受信されたコンテンツアイテムを定義する1つまたは複数のデータオブジェクトに含まれる、請求項1に記載のシステム。
【請求項１１】
前記サーバは遠隔のサーバである、請求項1に記載のシステム。
【請求項１２】
ユーザデバイス上で実行されているソーシャル・メッセージング・プラットフォームのクライアントソフトウェアによって実行される方法であって、
1つまたは複数のコンピュータと1つまたは複数の記憶デバイスとを備えるサーバに、コンテンツ要求を送信するステップであって、前記サーバが前記ソーシャル・メッセージング・プラットフォームを実装するように構成される、ステップと、
前記ユーザデバイス上のネットワークスタックのトランスポート層から複数の断片において、前記サーバから前記コンテンツ要求のレスポンスをインクリメンタルに受信するステップであって、前記複数の断片がレスポンス全体を構成し、前記レスポンスが、コンテンツアイテムと前記コンテンツアイテムを記述するメタデータとを含み、各コンテンツアイテムがレンダリング可能であるとともに、1つまたは複数のデータオブジェクトによって定義される、ステップと、
前記断片が受信されるとき、前記断片の前記コンテンツアイテムをディスプレイバッファにインクリメンタルにレンダリングするステップであって、前記メタデータによって決定された順序で前記コンテンツアイテムを前記ディスプレイバッファに配置することを含み、前記ディスプレイバッファが前記ユーザデバイスのメモリのデータ構造である、ステップと、
前記ユーザデバイスのディスプレイ上に前記ディスプレイバッファの全部または一部を表示するステップと
を含む、方法。
【請求項１３】
前記クライアントソフトウェアは、スタンドアロンアプリであるか、前記ユーザデバイス上にインストールされたウェブブラウザで実行されるJavaスクリプトプログラムである、請求項12に記載の方法。
【請求項１４】
前記コンテンツアイテムを記述する前記メタデータは、各コンテンツアイテムに対して、前記レスポンスの他のコンテンツアイテムに対する、および前記ディスプレイバッファに以前にレンダリングされたレスポンスのコンテンツアイテムに対する、前記コンテンツアイテムの前記ディスプレイバッファの場所を指定するシーケンス識別子を含む、請求項12に記載の方法。
【請求項１５】
それぞれのコンテンツアイテムのシーケンス識別子が、他のコンテンツアイテムに対する、前記コンテンツアイテムの作成された時間に対応する、請求項14に記載の方法。
【請求項１６】
前記メタデータは、前記レスポンスの最初の断片において受信され、前記レスポンスのコンテンツアイテムの総数を含み、前記方法はさらに、
前記最初の断片の前記コンテンツアイテムを前記ディスプレイバッファにレンダリングし、前記レスポンスの後続の断片の各コンテンツアイテムのためのそれぞれのプレースホルダを前記ディスプレイバッファに含めるステップと、
前記後続の断片の前記コンテンツアイテムをレンダリングするときに、前記それぞれのプレースホルダを再配置するステップとを含む、請求項12に記載の方法。
【請求項１７】
前記メタデータはさらに、各コンテンツアイテムについて、シーケンス識別子を含み、それぞれのプレースホルダは、対応するコンテンツアイテムの前記シーケンス識別子によって指定された前記ディスプレイバッファの場所に作成される、請求項16に記載の方法。
【請求項１８】
前記断片が受信されるときに前記断片の前記コンテンツアイテムをインクリメンタルにレンダリングするステップは、
第1の断片が特定のコンテンツアイテムの最初の部分のみを含むと決定するステップと、
前記特定のコンテンツアイテムの残りを含む第2の断片を受信するステップと、
前記最初の部分と前記特定のコンテンツアイテムの前記残りを組み合わせるステップと、
前記ディスプレイバッファに前記組み合わせたコンテンツアイテムをレンダリングするステップと
を含む、請求項12に記載の方法。
【請求項１９】
前記1つまたは複数のデータオブジェクトは、JSONオブジェクトであり、前記断片が受信されるときに前記断片の前記コンテンツアイテムをインクリメンタルにレンダリングするステップは、各コンテンツアイテムに対して、
前記コンテンツアイテムを定義するJSONオブジェクトの開始を識別するステップと、
前記コンテンツアイテムを定義する前記JSONオブジェクトの終わりを識別するステップと
を含む、請求項18に記載の方法。
【請求項２０】
前記レスポンスの前記断片の各々は、前記クライアントソフトウェアに、トランスポート層プロトコルによって提供される1つまたは複数のトランスポート層セグメントを含む、請求項12に記載の方法。
【請求項２１】
各レスポンスでは、前記レスポンスの各コンテンツアイテムをレンダリングする必要のあるデータが、前記コンテンツアイテムを定義する前記1つまたは複数のデータオブジェクトに含まれるか、あるいは、前記レスポンスにおいて以前に受信されたコンテンツアイテムを定義する1つまたは複数のデータオブジェクトに含まれる、請求項12に記載の方法。
【請求項２２】
前記サーバは遠隔のサーバである、請求項12に記載の方法。
【請求項２３】
命令を格納する1つまたは複数の非一時的コンピュータ可読記憶媒体であって、前記命令が、1つまたは複数のコンピュータによって実行されると、前記1つまたは複数のコンピュータに動作を実行させるように動作可能であり、前記動作が、
1つまたは複数のコンピュータと1つまたは複数の記憶デバイスとを備えるサーバに、コンテンツ要求を送信するステップであって、前記サーバがソーシャル・メッセージング・プラットフォームを実装するように構成される、ステップと、
前記1つまたは複数のコンピュータ上のネットワークスタックのトランスポート層から複数の断片において、前記サーバから前記コンテンツ要求のレスポンスをインクリメンタルに受信するステップであって、前記複数の断片がレスポンス全体を構成し、前記レスポンスが、コンテンツアイテムと前記コンテンツアイテムを記述するメタデータとを含み、各コンテンツアイテムがレンダリング可能であるとともに、1つまたは複数のデータオブジェクトによって定義される、ステップと、
前記断片が受信されるとき、前記断片の前記コンテンツアイテムをディスプレイバッファにインクリメンタルにレンダリングするステップであって、前記メタデータによって決定された順序で前記コンテンツアイテムを前記ディスプレイバッファに配置することを含み、前記ディスプレイバッファが前記1つまたは複数のコンピュータのメモリのデータ構造である、ステップと、
前記1つまたは複数のコンピュータのディスプレイ上に前記ディスプレイバッファの全部または一部を表示するステップと
を含む、1つまたは複数の非一時的コンピュータ可読記憶媒体。
【請求項２４】
1つまたは複数のコンピュータと、ソーシャル・メッセージング・プラットフォームを実装するように構成された1つまたは複数の記憶デバイスとを備えるシステムであって、前記1つまたは複数の記憶デバイスが、1つまたは複数のコンピュータによって実行されるとき、前記1つまたは複数のコンピュータに動作を実行させる命令を格納し、前記動作が、
前記ソーシャル・メッセージング・プラットフォームのクライアントソフトウェアからコンテンツ要求を受信するステップであって、前記クライアントソフトウェアがユーザデバイス上で実行されている、ステップと、
(i)前記コンテンツ要求に対応するコンテンツアイテム、(ii)前記コンテンツアイテムを記述するメタデータ、および(iii)前記コンテンツアイテムをレンダリングする必要のあるデータを取得するステップであって、前記コンテンツアイテムを記述する前記メタデータが、各コンテンツアイテムに対して、他のコンテンツアイテムに対する、前記コンテンツアイテムがレンダリングされるべき前記ユーザデバイスのディスプレイバッファの場所を指定するシーケンス識別子を含む、ステップと、
前記コンテンツ要求に対するレスポンスを生成するステップであって、
前記レスポンスの最初の断片に前記メタデータを配置するステップと、
前記コンテンツアイテムを定義する1つまたは複数のデータオブジェクトに、または前記レスポンスの前記コンテンツアイテムに先行するコンテンツアイテムを定義する1つまたは複数のデータオブジェクトに、各コンテンツアイテムをレンダリングする必要のある前記データを配置するステップとを含む、ステップと、
前記クライアントソフトウェアに前記レスポンスを送信するステップと
を含む、システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書は、ソーシャル・メッセージング・プラットフォームに関し、特に、ソーシャル・メッセージング・プラットフォームからのコンテンツ要求に対するレスポンスの断片をインクリメンタルに受信およびレンダリングするための技術に関する。
【背景技術】
【０００２】
ソーシャル・メッセージング・プラットフォームおよびネットワーク接続のパーソナルコンピューティングデバイスにより、ユーザは、コンテンツを作成して、リアルタイムに複数のデバイスで共有できる。
【０００３】
ポピュラーなソーシャル・メッセージング・プラットフォームは一般に、メッセージを草案し、同期的におよび非同期的に、他のユーザにメッセージを投稿するユーザのための機能を提供する。ポピュラーなソーシャル・メッセージング・プラットフォームの例は、フェイスブック、ピンタレスト、およびツイッターを含む(「フェイスブック」は、フェイスブック社の商標である。「ピンタレスト」は、ピンタレスト社の商標である。「ツイッター」は、ツイッター社の商標である。)。
【０００４】
一般に、コンピューティングデバイス上のクライアントソフトウェアが、コンテンツ要求をソーシャル・メッセージング・プラットフォームに送信するとき、クライアントソフトウェアは、デバイスのユーザにレスポンスの一部を提示する前に、要求に対する全てのレスポンスの受信を待たなければならない。
【発明の概要】
【課題を解決するための手段】
【０００５】
本明細書は、クライアントソフトウェアが、ソーシャル・メッセージング・プラットフォームからのコンテンツ要求に対するレスポンスの断片を受信およびレンダリングできるようにする技術を説明する。
【０００６】
例示的なシステムは、ソーシャル・メッセージング・プラットフォーム、ユーザデバイス、ユーザデバイス上で実行されているソーシャル・メッセージング・プラットフォームのクライアントソフトウェアを実装するように構成されたサーバを含む。クライアントソフトウェアは、サーバにコンテンツ要求を送信するように構成される。クライアントソフトウェアは、ユーザデバイス上のネットワークスタックのトランスポート層から複数の断片において、インクリメンタルにサーバからコンテンツ要求に対するレスポンスを受信する。複数の断片は、レスポンス全体を構成する。レスポンスは、コンテンツアイテムおよびコンテンツアイテムを記述するメタデータを含む。各コンテンツアイテムは、レンダリング可能であり、1つまたは複数のデータオブジェクトによって定義される。クライアントソフトウェアは、断片を受信すると断片のコンテンツアイテムをディスプレイバッファにインクリメンタルにレンダリングする。このことは、メタデータによって決定された順序でディスプレイバッファにコンテンツアイテムを配置することを含む。ディスプレイバッファは、ユーザデバイスのメモリのデータ構造である。次いで、クライアントソフトウェアは、ユーザデバイスのディスプレイ上にディスプレイバッファの全部または一部を表示する。
【０００７】
本明細書は、システム、装置、およびコンピュータプログラム構成要素に関して、「構成される」という用語を使用する。特定の動作またはアクションを実行するように構成された1つまたは複数のコンピュータのシステムとは、システムが、ソフトウェア、ファームウェア、ハードウェア、または動作中にシステムに動作またはアクションを実行させるそれらの組み合わせにインストールされていることを意味する。特定の動作またはアクションを実行するように構成された1つまたは複数のコンピュータプログラムとは、1つまたは複数のプログラムが、データ処理装置によって実行されると、装置に動作またはアクションを実行させる命令を含むことを意味する。特定の動作またはアクションを実行するように構成された専用の論理回路とは、回路が動作またはアクションを実行する電子ロジックを有することを意味する。
【０００８】
本明細書に記載の主題は、以下の利点の1つまたは複数を実現するために、特定の実施形態で実装され得る。低帯域接続のユーザデバイスは、レスポンス全体を受信する前に、レスポンス中のコンテンツアイテムをプログレッシブにレンダリングできる。このことは、低帯域接続では、レスポンス全体の受信に、いくつかのラウンドトリップ、すなわち、TCP接続がレスポンスペイロード全体を配信するのに必要なラウンドトリップ数が必要になり得るため、有利である。
【０００９】
一方、高帯域接続のユーザデバイスは、単一のラウンドトリップで小さいレスポンスおよび大きいレスポンスの両方を受信およびレンダリングできる。換言すれば、本明細書に記載の主題は、ユーザの帯域幅に関わらず、レスポンス時間を最適化することである。
【００１０】
本明細書の主題の1つまたは複数の実施形態の詳細は、添付の図面および以降の説明に記載される。主題の他の特徴、態様、および利点は、発明の詳細な説明、図面、および特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【００１１】
【図１】例示的なソーシャル・メッセージング・プラットフォームの図である。
【図２】コンテンツ要求に対するレスポンスを構成するための例示的なプロセスのフローチャートである。
【図３】コンテンツ要求に対するレスポンスの断片をインクリメンタルに受信およびレンダリングするための例示的なプロセスのフローチャートである。
【図４】レスポンスの2つ以上の断片にわたるコンテンツアイテムを受信およびレンダリングするための例示的なプロセスのフローチャートである。様々な図面における同様の参照番号および名称は、同様の要素を示す。
【発明を実施するための形態】
【００１２】
図1は、例示的なオンラインのソーシャル・メッセージング・プラットフォーム100と、1つまたは複数のワイヤードまたはワイヤレスのデータ通信ネットワーク120を介してプラットフォームとインタラクトするように構成された例示的なユーザデバイス104a〜104nとを示す。クライアントソフトウェア106a〜106nにおいて実装されるプログレッシブ・レンダリング・モジュール108a〜108nは、後述されるように、プラットフォームからのコンテンツアイテム、例えばメッセージをインクリメンタルに受信およびレンダリングするように構成される。
【００１３】
プラットフォームのユーザ102a〜102nは、プラットフォームを使用するために、クライアントソフトウェアがインストールされているユーザデバイス104a〜104nを使用する。ユーザは、それぞれのユーザデバイス上のそれぞれのクライアントソフトウェアを使用してソーシャル・メッセージング・プラットフォームとインタラクトできる。
【００１４】
ユーザば、プラットフォーム上の、アカウントのアカウント所持者またはアカウントの認証済みユーザであってよい。プラットフォームは、個人、事業者、または他のエンティティの数百万のアカウントを有し得る。
【００１５】
いくつかの実施形態では、プラットフォームは、アカウント所持者ではないユーザ、あるいは、プラットフォームのアカウントにログインしていないユーザによるプラットフォームの使用を許可する。プラットフォームがそのようなユーザによる使用を許可する場合、プラットフォームは、そのようなユーザがメッセージを投稿すること、あるいは一時的なアカウントまたは識別子とユーザを関連付けることによってプラットフォームの他の機能を使用することを許可する。
【００１６】
ユーザデバイスは、任意のインターネット接続デバイス、例えば、ラップトップまたはデスクトップコンピュータ、スマートフォン、または電子タブレットであってよい。ユーザデバイスは、モバイルネットワークを介して、インターネットサービスプロバイダ(ISP)を介して、またはそれ以外でインターネットに接続できる。
【００１７】
各ユーザデバイスは、クライアントまたはクライアントソフトウェア106a〜106nと呼ばれる、ソフトウェアを用いて構成され、ソフトウェアは動作中、ユーザがメッセージを投稿および受信すること、ユーザのストリームを視聴およびキュレートすること、ならびにコンテンツアイテムのリストを視聴してインタラクトすることができるように、プラットフォームにアクセスできる。任意の特定のユーザデバイス上で、クライアントは、ウェブブラウザ、あるいはウェブブラウザによってレンダリングされたHTML(ハイパーテキストマークアップ言語)ドキュメントであってよい。あるいは、クライアントは、JavaScriptコードまたはJavaコードであるか、JavaScriptコードまたはJavaコードを含んでもよい。または、クライアントは、専用ソフトウェア、例えば、プラットフォームと特別に機能するように設計された、インストールされたアプリまたはインストールされたアプリケーションなどであってよい。または、クライアントは、例えば、ショートメッセージングサービス(SMS)インターフェース、インスタント・メッセージング・インターフェース、電子メールベースのインターフェース、あるいはAPI機能ベースのインターフェースであるか、それらを含んでもよい。
【００１８】
クライアントは、ユーザデバイスのディスプレイ上のグラフィカルユーザインターフェースのウィンドウ内で、プラットフォームからのメッセージおよびストリームを含む、ディスプレイバッファの全部または一部を表示する。ディスプレイバッファは、ユーザデバイスのディスプレイを駆動するために使用されるデータ、例えばビットマップなどを含む、メモリの一部である。ディスプレイバッファのメッセージおよびストリームは、レンダリングされたビットマップ形態であってよく、あるいは、ディスプレイのビューポートに移動するときにオンザフライでレンダリングされ得る、部分レンダリングまたはプレレンダリングされた形態であってよい。
【００１９】
クライアントのグラフィカルユーザインターフェースは、スクロール要素またはスクロール機能を含むことができる。スクロール要素は、クライアントのユーザから入力を受信するコントロールである。例えば、ユーザデバイスがマウスを用いたデスクトップコンピュータである場合、ユーザは、スクロール要素をクリックおよびドラッグできる。ユーザデバイスがスマートフォンである場合、ユーザは、指でユーザデバイスのスクリーンを単にスワイプできる。クリックおよびドラッグ、またはスワイプに応じて、クライアントは、ディスプレイバッファのどの部分がクライアントによって表示されるかを変える。
【００２０】
クライアントは、プログレッシブ・レンダリング・モジュール108a〜108nを含む。プログレッシブ・レンダリング・モジュールは、コンテンツアイテムの断片を受信する際、その断片をインクリメンタルに受信し、プログレッシブにレンダリングするように構成される。
【００２１】
オンラインのソーシャル・メッセージング・プラットフォームは、多数の異なる種類のユーザデバイスから、ワイヤードまたはワイヤレスネットワーク120を介した接続をサポートする1つまたは複数のサーバとして動作する、1つまたは複数の場所の1つまたは複数のコンピュータ上で実装される。プラットフォームには数百万のアカウントがあり、クライアントとプラットフォームの間でいつでも数十万から数百万の接続が確立または使用されている。
【００２２】
プラットフォームおよびクライアントは、ユーザが、プラットフォームを使用してメッセージ122をプラットフォームに投稿する、およびプラットフォームを使用して他のユーザによって投稿されたメッセージ124を受信することができるように構成される。
【００２３】
いくつかの実施形態では、プラットフォームは、送信者および受信者がメッセージの個人的な交換を維持できるような、プラットフォームの1人または複数人の他のユーザに直接メッセージを送信するための、ユーザのための機能を提供する。
【００２４】
プラットフォームは、ホームフィードメッセージストリームでユーザにコンテンツ、通常はメッセージを提供するように構成される。メッセージは通常、ユーザがフォローしているアカウントからのメッセージであり、受信者は、フォローしているアカウントによって投稿されたメッセージを受信するように登録しており、オプションで、そのようなアカウントが関与しているコンテンツ、承認済みコンテンツなどであることを意味する。オプションでは、プラットフォームは、例えば、プラットフォームユーザによるトピックについて投稿されたメッセージの数によって表される、特定の現在関心のあるトピックについてのメッセージ、あるいは、受信者が投稿または関与したメッセージ、ならびに選択された広告、公共サービスのアナウンス、または宣伝されたコンテンツなどによって表される、受信者にとって明らかに関心のあるトピックについて投稿されたメッセージなど、受信者に関心がある可能性が高いとプラットフォームが判断したメッセージを、受信者のユーザのホームフィードストリームに含めるように構成される。
【００２５】
プラットフォームは、リアルタイムに、すなわち最小の遅延で、ユーザがメッセージを交換できるように構成される。プラットフォームはまた、ユーザが以前に投稿されたメッセージに、数時間または数日、あるいはそれ以上のオーダーで応答できるように構成されている。プラットフォームは、本質的にユーザ間のライブ会話になり得るものを容易にするために、短い時間フレーム以内で1人または複数人の他のユーザに投稿されたメッセージを表示するように構成される。
【００２６】
プラットフォームはまた、ユーザがプラットフォーム上のコンテンツを検索できるように構成される。検索は、1つまたは複数の検索基準、例えば、1つまたは複数の検索用語またはキーフレーズを満たす複数のフォローアカウントまたはパブリックアカウントからのメッセージを返すことができる。プラットフォームはまた、ユーザが他のユーザのアカウントを検索できるように構成される。
【００２７】
このように、プラットフォームの基本的なメッセージング機能は、少なくとも、新規のメッセージを投稿すること、クライアント要求についてのメッセージストリームを提供すること、アカウントを管理すること、アカウント、メッセージ、およびストリームの間の関係性を管理すること、ならびに、クライアントのユーザがどのようにメッセージに関与しており、他のコンテンツに関与しそうであるかを示すクライアントからの関与データを受信することを含む。プラットフォームはまた、コンテンツへのユーザのアクセスを特徴づけするとともに、インデックス付けしたデータをアカウント保持者に提供できる、コンテンツアイテムおよびアクセスデータをインデックス付けを行う。
【００２８】
一般に、プラットフォームに投稿されたメッセージは、メッセージ作成者によって提供されたコンテンツを表すデータを含む。メッセージは、コンテンツデータを格納するコンテナデータタイプのインスタンスであってよい。メッセージに格納され得るデータのタイプは、テキスト、グラフィックス、画像、動作、および例えば、ユニフォームリソースロケータ(URL)などのコンピュータコード、を含む。メッセージはまた、メッセージのカテゴライズやトピックへのメッセージの関連付けに役立つキーフレーズ、例えば、ハッシュタグを含むことができる。メッセージはまた、プラットフォームで許可されている内容に応じて、メッセージ作成者のアカウント所持者によって編集可能なまたは編集可能ではないメタデータを含ことができる。メッセージメタデータの例には、作成者の日時、メッセージを提出したときのユーザデバイスの地理的位置が含まれる。いくつかの実施形態では、どのようなメタデータがクライアントによってプラットフォームに提供されるかは、ユーザまたはアカウント所持者によって制御されたプライバシー設定によって決定される。
【００２９】
1人のアカウント所持者によって作成されたメッセージは、他のアカウント、他のメッセージ、またはその両方を参照することがある。例えば、メッセージは、別のアカウントによって作成された別のメッセージへの返信として作成されることがある。メッセージはまた、ユーザによって最初に投稿されたメッセージへの返信としてユーザによって作成されることがある。メッセージはまた、別のアカウントによって作成された、および別のアカウントから受信したメッセージの再発行であることがある。通常、メッセージに参照されるアカウントは、アカウントの名前など、メッセージに可視コンテンツとして表示され、メッセージにメタデータとしても表示されることがある。結果として、参照されるアカウントは、プラットフォームにおいてインタラクティブである。例えば、ユーザは、メッセージストリームに表示されるアカウント名とインタラクトして、そのアカウントのメッセージストリームにナビゲートできる。プラットフォームはまた、ユーザが特定のメッセージをプライベートとして指定できるようにし、プライベートメッセージは、作成および受信アカウントのメッセージストリームでのみ表示される。
【００３０】
通常、メッセージはマイクロブログ記事であり、例えば、マイクロブログ記事の作成者が、メッセージの受信者が誰であるかを必ずしも指定する必要なく、または知る必要さえないなど、いくつかの点で電子メールメッセージとは異なる。
【００３１】
ストリームは、1つまたは複数のストリーム基準を満たすプラットフォーム上のメッセージのストリームである。ストリームは、1つまたは複数のアカウントによって投稿されたメッセージを含むように、ストリーム基準によって定義され得る。例えば、要求元のアカウント保持者のためのストリームのコンテンツは、(i)アカウント保持者によって作成されたメッセージ、(ii)要求先のアカウント保持者がフォローする他のアカウントによって作成されたメッセージ、(iii)要求先のアカウント保持者を参照する他のアカウントによって作成されたメッセージ、あるいは(iv)アカウント保持者のメッセージストリームに含まれる第三者によって提供されたメッセージのうちの1つまたは複数を含み得る。ストリームのメッセージは、作成者の日時によって時系列で並べ替えても、時系列の逆順に並べ替えてもよい。ストリームは、他の方法で、例えば、アカウント所持者との計算で予測された関連性に従って、または時間と関連性スコアの何らかの組み合わせに従って順序付けしてもよい。
【００３２】
ストリームは、潜在的に多数のメッセージを含み得る。処理効率と要求元のアカウント所持者のビューの利便性との両方のために、プラットフォームは通常、ストリーム基準を満たすメッセージのサブセットを識別して、ストリームが生成されると要求元のクライアントに送信する。ストリーム内の残りのメッセージはストリームリポジトリに維持され、クライアント要求によってアクセスされ得る。
【００３３】
プラットフォームサーバ110a〜110m上の配信モジュール112a〜112mは、メッセージストリームを構築して、それらを、例えば、フロントエンドサーバを介して要求元のクライアントに提供する。ストリームの要求に応答して、それぞれの配信モジュールは、リアルタイムにストリームを構築するか、生成済みのストリームの一部または全部にストリームリポジトリからアクセスする。配信モジュールは、ストリームリポジトリに生成したストリームを格納する。アカウント保持者は、自身のストリームの一部、またはセキュリティ設定に基づいてアクセスが許可された一部の他のアカウントのストリームを要求してよい。ストリームが多数のメッセージを含む場合、配信モジュールは通常、要求元のクライアントに送信するためのメッセージのサブセットを識別し、その場合、メッセージの残りがストリームリポジトリに維持され、クライアントが要求したときに送信される。
【００３４】
配信モジュールは、レスポンスの断片が、クライアントによってインクリメンタルに受信、レンダリング、表示され得るように、コンテンツ要求に対するレスポンスを構築できる。このプロセスは、図2を参照してより詳細に説明される。
【００３５】
図2は、コンテンツ要求に対するレスポンスを構築するための例示的なプロセス200のフローチャートである。プロセスは、図1のオンラインのソーシャル・メッセージング・プラットフォームのプラットフォームサーバによって実行され得る。より詳細には、プロセスは、プラットフォームサーバ上の配信モジュールによって実行され得る。
【００３６】
配信モジュールは、クライアントからのコンテンツ要求に応答するコンテンツアイテムと、そのコンテンツアイテムを記述するメタデータとを取得する(210)。
【００３７】
配信モジュールは、レスポンスの最初の断片に、コンテンツアイテムを記述するメタデータを配置する(220)。メタデータは、各コンテンツアイテムのためのシーケンス識別子を含むことができる。シーケンス識別子は、他のコンテンツアイテムに対する、コンテンツアイテムがレンダリングされるべきユーザデバイスのディスプレイバッファの場所を指定する。メタデータがレスポンスの最初の断片にあるので、クライアントは、クライアントがレスポンス内の全てのコンテンツアイテムを受信する前に、ディスプレイバッファの指定された場所にコンテンツアイテムをレンダリングできる。
【００３８】
配信モジュールは、メタデータの後にコンテンツアイテムを配置する(230)。より詳細には、コンテンツアイテムを定義する1つまたは複数のデータオブジェクト、あるいはレスポンス中のコンテンツアイテムに先行するコンテンツアイテムを定義するデータオブジェクトに、各コンテンツアイテムをレンダリングする必要のあるデータを配置する。このようにデータを構築することによって、配信モジュールは、クライアントがそのコンテンツアイテムを受信した時点で、クライアントが任意の所与のコンテンツアイテムをレンダリングするために必要なすべてのデータを確実に受信するようにする。結果的に、クライアントは、全てのコンテンツアイテムが受信される前に、1つまたは複数のコンテンツアイテムをレンダリングおよび表示できる。
【００３９】
図3は、コンテンツアイテムをインクリメンタルにレンダリングするための例示的なプロセス300のフローチャートである。プロセスは、ユーザデバイス上のクライアントによって実行され得る。
【００４０】
クライアントはホストサーバにコンテンツの要求を送信する(310)。
【００４１】
ホストサーバは、クライアントに構造化されたレスポンスを送信する。関心のあるシナリオでは、クライアントは、レスポンス全体を一緒に構成する複数の断片においてレスポンスを受信する(320)。クライアントは、ネットワークスタックが、レスポンス全体をクライアントに提供する前に、例えば、トランスポート層からユーザデバイス上のネットワークスタックから断片を取得する。
【００４２】
ネットワークスタックのトランスポート層は、ユーザデバイス上で実行されているアプリケーションにデータ通信サービスを一緒に提供するソフトウェアのいくつかの層のうちの一つである。特に、トランスポート層は、アプリケーションのためのホストトゥホストの通信サービスを提供するプロトコルのセットを実装する。トランスポート層プロトコルの一例は、転送制御プロトコル(TCP)である。別の例は、ユーザデータグラムプロトコル(UDP)です。クライアントによって取得された断片は、使用される具体的なプロトコルに応じて、1つまたは複数のセグメントあるいは1つまたは複数のデータグラムからなる。
【００４３】
レスポンスの断片は、コンテンツアイテム、およびコンテンツアイテムを記述するメタデータを含む。各コンテンツアイテムが表示のためにレンダリング可能であり、1つまたは複数のデータオブジェクトによって定義される。例えば、特定のコンテンツアイテムは、ジェイソン(JSON: JavaScript Object Notation)オブジェクトによって定義され得る。JSONは、構造化データをシリアル化するためのテキスト形式である。人が読めるテキストを使用して、属性-値のペアと配列データ型で構成されるデータオブジェクトを送信する。
【００４４】
コンテンツアイテムを記述するメタデータは、各コンテンツアイテムについて、シーケンス識別子を含み得る。特定のコンテンツアイテムのためのシーケンス識別子は、レスポンス中の他のコンテンツアイテムに対する、およびディスプレイバッファに以前にレンダリングされたレスポンス中のコンテンツアイテムに対する、コンテンツアイテムのディスプレイバッファの場所を指定する。例えば、シーケンス識別子は、コンテンツアイテムが、ディスプレイバッファにおいて、第1のコンテンツアイテムの「下に」かつ第2のコンテンツアイテムの「上に」レンダリングされるべきであると指定することがある。いくつかの実施形態では、シーケンス識別子は、コンテンツアイテムに関連するタイムスタンプに基づく、あるいは、該タイムスタンプである。タイムスタンプは、コンテンツアイテムが、他のコンテンツアイテムに対して作成された時間を示すことができる。この場合、コンテンツアイテムは、時系列順または時系列の逆順でディスプレイバッファに配置され得る。
【００４５】
あるいは、コンテンツアイテムのためのシーケンス識別子は、ユーザがどの程度コンテンツアイテムを気に入るか、またはどの程度コンテンツアイテムとインタラクトする可能性があるかについての推定に基づくことができる。例えば、ソーシャル・メッセージング・プラットフォームのプラットフォームサーバは、特定のユーザが、第2のコンテンツアイテムよりも第1のコンテンツアイテムを気に入る、もしくは第1のコンテンツアイテムとインタラクトする可能性が高いと決定できる。そのようなケースでは、第1のコンテンツアイテムに対するシーケンス識別子が、ユーザが第1のコンテンツアイテムを見る可能性が高い、あるいは最初に見る可能性が高いように、第2のコンテンツアイテムの「上に」第1のコンテンツアイテムが配置されるべきであることを指定してもよい。ホストサーバは、同様のコンテンツアイテムとのユーザの以前のインタラクションを分析することによって、ユーザが特定のコンテンツアイテムを気に入り、特定のコンテンツアイテムとインタラクトする可能性を決定できる。
【００４６】
断片がメタデータによって決定されたディスプレイバッファに順に取得されるように、クライアントはインクリメンタルに、断片のコンテンツアイテムをディスプレイバッファにレンダリングする。
【００４７】
コンテンツアイテムの各々は、個別にレンダリング可能である。換言すれば、レスポンス中の各コンテンツアイテムをレンダリングする必要のあるデータは、コンテンツアイテムを定義する1つまたは複数のデータオブジェクトに、あるいは、レスポンスに先行して見つかるデータ、例えば、現在の断片またはレスポンスの以前に受信された断片に含まれる。結果的に、クライアントは、クライアントがレスポンス全体を受信する前に個別のコンテンツアイテムをレンダリングできる。
【００４８】
いくつかの実施形態では、クライアントは、レスポンスの最初の断片のメタデータを受信し、メタデータはレスポンスの各コンテンツアイテムに対するそれぞれのシーケンス識別子に加えて、レスポンスのコンテンツアイテムの総数を含む。この情報に伴い、クライアントは、最初の断片のコンテンツアイテムをレンダリングし、レスポンスの後続の断片の各コンテンツアイテムのためのそれぞれのプレースホルダをディスプレイバッファに含めることができる。後に、クライアントは、後続の断片からコンテンツアイテムをレンダリングする際に、それぞれのプレースホルダを置き換えることができる。クライアントは、対応するコンテンツアイテムが、例えば、コンテンツアイテムのシーケンス識別子によって定義された場所に表示されるように、ディスプレイバッファにプレースホルダを作成できる。
【００４９】
コンテンツアイテムのレンダリングにおいて、クライアントは通常、コンテンツアイテムを定義するデータオブジェクトまたはオブジェクトの開始を識別し、次いでコンテンツアイテムを定義するデータオブジェクトまたはオブジェクトの終わりを識別する。いくつかの場合、特定のコンテンツアイテムを定義するデータオブジェクトまたはオブジェクトは、レスポンスの単一の断片に完全に含まれる。他の場合、それらは2つ以上の断片にわたる。
【００５０】
最後に、クライアントはユーザデバイスのディスプレイ上にディスプレイバッファの全部または一部を表示する(340)。ディスプレイバッファがプレースホルダを有する実施形態では、いくつかのコンテンツアイテムが依然としてレンダリングされる必要があることをユーザに示すために、クライアントはそのプレースホルダを表示できる。プレースホルダは、表示の際に垂直方向の高さが固定されていることが好ましいのに対し、入ってくるコンテンツアイテムは通常、垂直方向の高さが可変である。クライアントがコンテンツアイテムのプレースホルダを置き換えるとき、クライアントは、ビューポートのアイテムが、ビューポートから離れる方向に、ディスプレイバッファのサイズを拡張することによって垂直に移動しないようにできる。すなわち、プレースホルダがビューポートの上にある場合、クライアントは、ディスプレイバッファを拡大できる。プレースホルダがビューポートの下にある場合、クライアントは、ディスプレイバッファを縮小できる。クライアントは、ユーザ入力に基づいて、例えば、クライアントのユーザインターフェースへのスクロール入力に基づいて、ディスプレイバッファのどの部分を表示するか決定できる。
【００５１】
いくつかの実施形態では、クライアントは、多数の隣接するプレースホルダに代わり、単一のプレースホルダを挿入および表示する。
【００５２】
図4は、レスポンスの2つ以上の断片にわたるコンテンツアイテムをレンダリングするための例示的なプロセス400のフローチャートである。プロセス400は、ユーザデバイス上で実行されているクライアントによって実行され得る。
【００５３】
クライアントは、レスポンスの次の断片を取得する(410)。クライアントは、断片が新規のコンテンツアイテムの最初の部分を含むかどうかを判定する(420)。クライアントは、断片のデータオブジェクト識別子を探すことによってその決定を行うことができる。例えば、コンテンツアイテムがJSONオブジェクトによって定義される場合、クライアントは、JSONオブジェクトの開始を示す開き中括弧についての断片を探すことができる。断片が新規のコンテンツアイテムの最初の部分を含まない場合、クライアントはレスポンスの次の断片を取得する(410)。
【００５４】
断片が新規のコンテンツアイテムの最初の部分を含まない場合、クライアントは、取得した断片、すなわち現在の断片および以前に取得した断片が、新規のコンテンツアイテム全体を含むかどうかを判定する(430)。すなわち、クライアントは、新規のコンテンツアイテムの全ての部分を取得しているかどうかを判定する。クライアントは、この決定を行うために、データオブジェクト識別子について断片を探すことができる。
【００５５】
クライアントが新規のコンテンツアイテムの全ての部分を取得していないと決定する場合、レスポンスの次の断片を取得し(440)、該次の断片および以前に取得した断片が、新規のコンテンツアイテム全体を含むかどうかを再度判定する(430)。コンテンツアイテムがレスポンスの2つ以上の断片にわたることができるので、クライアントはこのプロセスを数回繰り返すことがある。
【００５６】
クライアントは、新規のコンテンツアイテムの全ての部分を取得していると決定する場合、これらの部分を組み立てる。クライアントは、受信時に部分を組み立てることができ、あるいは全ての部分を受信した後に全ての部分を一度に組み立てることができる。いくつかの場合、コンテンツアイテムは、レスポンスの単一の断片に完全に含まれることがある。そのような場合、組み立ては不要である。
【００５７】
クライアントは、ユーザデバイス上でディスプレイバッファの組み立てたコンテンツアイテムをレンダリングする(460)。その後、単一の断片が複数のコンテンツアイテムを含むことができるので、クライアントは、現在の断片が新規のコンテンツアイテムの任意の一部を含むかどうかを判定する(420)。含まない場合、クライアントは、レスポンスの次の断片を取得する(410)。
【００５８】
いくつかの場合、クライアントがインクリメンタルにデータを受信してレンダリングする間、レスポンスが部分的に失敗することがある。例えば、100個のコンテンツアイテムを有するレスポンスが、クライアントが20個のコンテンツアイテムだけを受信した後に失敗することがある。例えば、トランスポート層プロトコルがUDPである場合に、そのような失敗が起きることがある。UDPが通信チャネルを必要としないため、基盤となるネットワークの信頼性が低下する可能性がある。
【００５９】
これが起きると、いくつかの実施形態では、エラーはインラインで表示され、すなわち、残りの80個のコンテンツアイテムが表示されていたはずの場所にエラーが表示される。クライアントのユーザは、残りの80個のコンテンツアイテムのロードを再試行するために、グラフィカルユーザインターフェースのエラーメッセージとインタラクトできる。
【００６０】
クライアントが正常な形ではないコンテンツアイテムを受信する場合、すなわち、クライアントが欠損したデータでコンテンツアイテムを受信する場合、クライアントはサイレントにコンテンツをドロップできる。
【００６１】
主題の実施形態および、本明細書に記載のアクションおよび動作は、本明細書に記載の構造およびその構造的均等物を含む、デジタル電子回路、有形の具現化されたコンピュータソフトウェアまたはファームウェア、コンピュータハードウェア、またはそれらの1つまたは複数の組み合わせで実現され得る。本明細書に記載の主題の実施形態は、1つまたは複数のコンピュータプログラムとして、すなわちデータ処理装置によって実行される、あるいはデータ処理装置の動作を制御するための有形の非一時的な記憶媒体上に符号化されたコンピュータプログラム命令の1つまたは複数のモジュールとして実現され得る。代わりにまたは加えて、プログラム命令は、人工的に生成された伝搬信号、例えば、データ処理装置によって実行するためにレシーバ装置に適切に送るための情報を符号化するように生成されたマシン生成の電子的、光学的、または電磁気的信号上に符号化され得る。コンピュータ記憶媒体は、マシン可読の記憶デバイス、マシン可読の記憶基盤、ランダムまたはシリアルアクセスメモリデバイス、あるいはそれらの1つまたは複数の組み合わせであるか、その一部であってよい。コンピュータ記憶媒体は、伝搬信号ではない。
【００６２】
「データ処理装置」という用語は、例えば、プログラム可能なプロセッサ、コンピュータ、または複数のプロセッサまたはコンピュータを含む、データを処理するための、全ての種類の装置、デバイスおよび機械を包含する。データ処理装置は、例えば、FPGA(フィールドプログラマブルゲートアレイ)、ASIC（特定用途組み込み回路）、またはGPU(グラフィック処理ユニット)などの特定用途の論理回路を含むことができる。装置はまた、ハードウェアに加えて、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、あるいはそれらの1つまたは複数の組み合わせを構成するコードなど、コンピュータプログラムのための実行環境を作成するコードを含む。
【００６３】
プログラム、ソフトウェア、ソフトウェアアプリケーション、アプリ、モジュール、ソフトウェアモジュール、エンジン、スクリプト、またはコードとも呼ばれるまたは記載されるコンピュータプログラムは、コンパイル型またはインタブリタ型の言語、あるいは宣言型または手続型言語など、プログラミング言語の任意の形式で記述され、スタンドアロンプログラムまたはモジュール、コンポーネント、エンジン、サブルーチン、あるいは、1つまたは複数の場所でデータ通信ネットワークによって統合された1つまたは複数のコンピュータを含むコンピューティング環境での実行に適した他のユニットを含む、任意の形式で展開され得る。
【００６４】
コンピュータプログラムは、必ずではないが、ファイルシステムのファイルに対応してもよい。コンピュータプログラムは、他のプログラムまたはデータ、例えば、マークアップ言語文書に格納された1つまたは複数のスクリプトなどを、当該プログラム専用の単一ファイルに、あるいは、1つまたは複数のモジュール、サブプログラム、またはコードの一部を格納する複数のファイルなど、複数の協調したファイルに維持するファイルの一部に格納され得る。
【００６５】
本明細書に記載の処理および論理フローは、入力データに対して動作して出力を生成する動作を実行するために1つまたは複数のコンピュータプログラムを実行する1つまたは複数のコンピュータによって実行され得る。処理および論理フローはまた、専用論理回路、例えば、FPGA、ASIC、またはGPUによって、あるいは、専用論理回路および1つまたは複数のプログラムされたコンピュータの組み合わせによって実行され得る。
【００６６】
コンピュータプログラムの実行に適したコンピュータは、汎用または専用のマイクロプロセッサ、または汎用のマイクロプロセッサおよび専用のマイクロプロセッサ、あるいは、任意の他の種類の中央処理ユニットに基づくことができる。一般に、中央処理ユニットは、読み取り専用メモリまたはランダムアクセスメモリまたはその両方から命令およびデータを受信する。コンピュータの必須要素は、命令を実行するための中央処理ユニット、および命令およびデータを格納するための1つまたは複数のメモリデバイスであってよい。中央処理ユニットおよびメモリは、専用論理回路によって補足される、または専用論理回路に組み込まれ得る。
【００６７】
一般に、コンピュータはまた、1つまたは複数の大容量記憶デバイスからデータを受信するように、または1つまたは複数の大容量記憶デバイスにデータを伝送するように、1つまたは複数の大容量記憶デバイスを含むか、動作可能に接続され得る。大容量記憶デバイスは、例えば、磁気、磁気光学、または光学ディスク、あるいはソリッドステートドライブであってよい。しかしながら、コンピュータはそのようなデバイスを有する必要はない。さらに、コンピュータは、ほんの数例を挙げると、携帯電話、個人情報端末(PDA)、モバイルオーディオまたはビデオプレイヤ、ゲームコンソール、全地球測位システム(GPS)受信機、または例えばユニバーサルシリアルバス(USB)フラッシュドライブなどのポータブルストレージデバイスなどの他のデバイスに組み込まれることができる。
【００６８】
ユーザとのインタラクションを提供するために、本明細書の主題の実施形態は、ユーザに情報を表示するためのディスプレイデバイス、例えば、LCD(液晶ディスプレイ)モニタ、
および、ユーザが入力をコンピュータに提供できる入力デバイス、例えば、キーボードおよびマウス、トラックボール、またはタッチパッドなどのポインティングデバイスを実装するか、それらと通信できるように構成される。他の種類のデバイスを使用して、ユーザとのインタラクションを提供でき、例えば、ユーザに提供するフィードバックは、視覚フィードバック、音響フィードバック、または触覚フィードバックなどの任意の形式のセンサフィードバックであってよく、ユーザからの入力は、音響、会話、または触覚入力を含む任意の形式で受信され得る。加えて、コンピュータは、例えば、ウェブブラウザから受信した要求に応答して、ユーザデバイス上のウェブブラウザにウェブページを送信することによって、あるいは、例えば、スマートフォンまたは電子タブレットなどユーザデバイス上で実行されているアプリとインタラクトすることによって、ユーザによって使用されるデバイスに文書を送信、およびデバイスから文書を受信することによって、ユーザとインタラクトできる。また、コンピュータは、テキストメッセージまたは他の形式のメッセージを個人用デバイス、例えば、メッセージングアプリケーションを実行されているスマートフォンに送信することによって、および返信としてユーザから応答メッセージを受信することによってユーザとインタラクトできる。
【００６９】
本明細書に記載の主題の実施形態は、データサーバとしての、バックエンド構成要素、アプリケーションサーバなどのミドルウェア構成要素、グラフィカルユーザインターフェース、ウェブブラウザ、または本明細書に記載の主題の実施形態とそれを通してユーザがインタラクトできるアプリなどのフロントエンド構成要素、あるいは、そのような1つまたは複数のバックエンド構成要素、ミドルウェア構成要素、またはフロントエンド構成要素の組み合わせを含むコンピューティングシステムにおいて実装され得る。システムの構成要素は、通信ネットワークなどのデジタルデータ通信の形態または媒体によって相互接続され得る。通信ネットワークの例には、ローカルエリアネットワーク(LAN)、およびインターネットなどのワイドエリアネットワーク(WAN)を含まれる。
【００７０】
コンピューティングシステムは、クライアントおよびサーバを含み得る。クライアントおよびサーバは通常、互いに離れており、一般に通信ネットワークを介してやり取りする。クライアントおよびサーバの関係は、それぞれのコンピュータ上で実行している、かつ互いにクライアント-サーバ関係を有するコンピュータプログラムによって発生する。いくつかの実施形態では、サーバは、クライアントとして動作するデバイスにデータを表示する、および該デバイスとインタラクトするユーザからユーザ入力を受信する目的で、HTMLページなどのデータをユーザデバイスに送信する。ユーザインタラクションの結果など、ユーザデバイスにおいて生成されるデータは、デバイスからサーバにおいて受信され得る。
【００７１】
上述した実施形態に加えて、以下の実施形態がまた進歩的である。
【００７２】
実施形態1は、ユーザデバイス上で実行されているソーシャル・メッセージング・プラットフォームのクライアントソフトウェアによって実行される方法であって、
1つまたは複数のコンピュータと1つまたは複数の記憶デバイスとを備えるサーバに、コンテンツ要求を送信するステップであって、サーバがソーシャル・メッセージング・プラットフォームを実装するように構成される、ステップと、
ユーザデバイス上のネットワークスタックのトランスポート層から複数の断片において、サーバからコンテンツ要求のレスポンスをインクリメンタルに受信するステップであって、複数の断片がレスポンス全体を構成し、レスポンスが、コンテンツアイテムとコンテンツアイテムを記述するメタデータとを含み、各コンテンツアイテムがレンダリング可能であるとともに、1つまたは複数のデータオブジェクトによって定義される、ステップと、
断片が受信されるとき、断片のコンテンツアイテムをディスプレイバッファにインクリメンタルにレンダリングするステップであって、メタデータによって決定された順序でコンテンツアイテムをディスプレイバッファに配置することを含み、ディスプレイバッファがユーザデバイスのメモリのデータ構造である、ステップと、
ユーザデバイスのディスプレイ上にディスプレイバッファの全部または一部を表示するステップとを含む、方法である。
【００７３】
実施形態2は、クライアントソフトウェアは、スタンドアロンアプリであるか、ユーザデバイス上にインストールされたウェブブラウザで実行されるJavaスクリプトプログラムである、実施形態1に記載の方法である。
【００７４】
実施形態3は、コンテンツアイテムを記述するメタデータは、各コンテンツアイテムに対して、レスポンスの他のコンテンツアイテムに対する、およびディスプレイバッファに以前にレンダリングされたレスポンスのコンテンツアイテムに対する、コンテンツアイテムのディスプレイバッファの場所を指定するシーケンス識別子を含む、実施形態1または2に記載の方法である。
【００７５】
実施形態4は、それぞれのコンテンツアイテムのシーケンス識別子が、他のコンテンツアイテムに対する、コンテンツアイテムの作成された時間に対応する、実施形態3に記載の方法である。
【００７６】
実施形態5は、メタデータがレスポンスの最初の断片において受信され、レスポンスのコンテンツアイテムの総数を含み、方法はさらに、
最初の断片のコンテンツアイテムをディスプレイバッファにレンダリングし、レスポンスの後続の断片の各コンテンツアイテムのためのそれぞれのプレースホルダをディスプレイバッファに含めるステップと、
後続の断片のコンテンツアイテムをレンダリングするときに、それぞれのプレースホルダを再配置するステップとを含む、実施形態1〜4のいずれか一つに記載の方法である。
【００７７】
実施形態6は、メタデータはさらに、各コンテンツアイテムについて、シーケンス識別子を含み、それぞれのプレースホルダは、対応するコンテンツアイテムのシーケンス識別子によって指定されたディスプレイバッファの場所に作成される、実施形態5に記載の方法である。
【００７８】
実施形態7は、断片が受信されるときに断片のコンテンツアイテムをインクリメンタルにレンダリングするステップが、
第1の断片が特定のコンテンツアイテムの最初の部分のみを含むと決定するステップと、
特定のコンテンツアイテムの残りを含む第2の断片を受信するステップと、
最初の部分と特定のコンテンツアイテムの残りを組み合わせるステップと、
ディスプレイバッファに組み合わせたコンテンツアイテムをレンダリングするステップとを含む、実施形態1〜6のいずれか一つに記載の方法である。
【００７９】
実施形態8は、1つまたは複数のデータオブジェクトは、JSONオブジェクトであり、断片が受信されるときに断片のコンテンツアイテムをインクリメンタルにレンダリングするステップは、各コンテンツアイテムに対して、
コンテンツアイテムを定義するJSONオブジェクトの開始を識別するステップと、
コンテンツアイテムを定義するJSONオブジェクトの終わりを識別するステップとを含む、実施形態7に記載の方法である。
【００８０】
実施形態9は、レスポンスの断片の各々は、クライアントソフトウェアに、トランスポート層プロトコルによって提供される1つまたは複数のトランスポート層セグメントを含む、実施形態1〜8のいずれか一つに記載の方法である。
【００８１】
実施形態10は、各レスポンスでは、レスポンスの各コンテンツアイテムをレンダリングする必要のあるデータが、コンテンツアイテムを定義する1つまたは複数のデータオブジェクトに含まれるか、あるいは、レスポンスにおいて以前に受信されたコンテンツアイテムを定義する1つまたは複数のデータオブジェクトに含まれる、実施形態1〜9のいずれか一つに記載の方法である。
【００８２】
実施形態11は、サーバは遠隔のサーバである、実施形態1〜10のいずれか一つに記載の方法である。
【００８３】
実施形態12は、
1つまたは複数のコンピュータおよび1つまたは複数の記憶デバイスを備えるサーバであって、ソーシャル・メッセージング・プラットフォームを実装するように構成されたサーバと
ユーザデバイスと、
ユーザデバイス上で実行されているソーシャル・メッセージング・プラットフォームのクライアントソフトウェアとを含む、システムであって、
クライアントソフトウェアが、実施形態1〜11のいずれか一つに記載の方法を実行するように構成される、システムである。
【００８４】
実施形態13は、命令を格納する1つまたは複数の非一時的コンピュータ可読記憶媒体であって、命令が、1つまたは複数のコンピュータによって実行されると、1つまたは複数のコンピュータに実施形態1〜11のいずれか一つに記載の方法を実行させるように動作可能である、1つまたは複数の非一時的コンピュータ可読記憶媒体である。
【００８５】
実施形態14は、
1つまたは複数のコンピュータと、ソーシャル・メッセージング・プラットフォームを実装するように構成された1つまたは複数の記憶デバイスとを備えるシステムであって、1つまたは複数の記憶デバイスが、1つまたは複数のコンピュータによって実行されるとき、1つまたは複数のコンピュータに動作を実行させる命令を格納し、動作が、
ソーシャル・メッセージング・プラットフォームのクライアントソフトウェアからコンテンツ要求を受信するステップであって、クライアントソフトウェアがユーザデバイス上で実行されている、ステップと、
(i)コンテンツ要求に対応するコンテンツアイテム、(ii)コンテンツアイテムを記述するメタデータ、および(iii)コンテンツアイテムをレンダリングする必要のあるデータを取得するステップであって、コンテンツアイテムを記述するメタデータが、各コンテンツアイテムに対して、他のコンテンツアイテムに対する、コンテンツアイテムがレンダリングされるべきユーザデバイスのディスプレイバッファの場所を指定するシーケンス識別子を含む、ステップと、
コンテンツ要求に対するレスポンスを生成するステップであって、
レスポンスの最初の断片にメタデータを配置するステップと、
コンテンツアイテムを定義する1つまたは複数のデータオブジェクトに、またはレスポンスのコンテンツアイテムに先行するコンテンツアイテムを定義する1つまたは複数のデータオブジェクトに、各コンテンツアイテムをレンダリングする必要のあるデータを配置するステップとを含む、ステップと、
クライアントソフトウェアにレスポンスを送信するステップとを含む、システムである。
【００８６】
本明細書は多数の特定の実施形態の詳細を含むが、これらは、任意の発明の範囲についての、または請求されているまたは請求される可能性のある特許請求の範囲についての限定として解釈されるべきではなく、特定の発明の特定の実施形態を指すことのある特徴の説明である。個別の実施形態の文脈で本明細書に説明されたある特徴はまた、単位の実施形態に組み合わせて実装され得る。反対に、単位の実施形態の文脈で説明された種々の特徴が、複数の実施形態で個別に、あるいは任意の適切なサブコンビネーションにおいて実装され得る。その上、特徴が、ある組み合わせにおける振る舞いとして上述されていても、そのように特許請求の範囲に最初に記載されていてさえ、請求された組み合わせからの1つまたは複数の特徴が、ある場合では組み合わせから切り取ることができ、特許請求の範囲は、サブコンビネーションまたはサブコンビネーションの変形に向けられることがある。
【００８７】
同様に、動作が、特定の順序で図面に示され、特許請求の範囲に記載されているが、このことは、そのような動作が、所望の結果を得るために、示された特定の順序でまたはシーケンシャルな順序で、実行される必要がある、または全ての示された動作が実行される必要があると解釈されるべきではない。ある状況では、マルチタスクおよび並列処理が有利である。また、上述した実施形態における種々のシステムモジュールおよび構成要素の分離は、そのような分離が全ての実施形態において必要であると理解されるべきではなく、説明されたプログラム構成要素およびシステムは通常、単一のソフトウェア製品に統合される、または複数のソフトウェア製品にパッケージングされると理解されるべきである。
【００８８】
主題の特定の実施形態が説明されている。他の実施形態は、以降の特許請求の範囲にある。例えば、特許請求の範囲に記載のアクションは、異なる順序で実行され、依然として所望の結果を達成できる。一例として、添付の図面に示されたプロセスは、所望の結果を達成するために、示された特定の順序、またはシーケンシャルな順序を必ずしも必要としない。いくつかの場合、マルチタスクおよび並列処理が有利である。
【符号の説明】
【００８９】
100  ソーシャル・メッセージング・プラットフォーム
104a〜104n  ユーザデバイス
106a〜106n  クライアントソフトウェア
108a〜108n  プログレッシブ・レンダリング・モジュール
110a〜110m  プラットフォームサーバ
112a〜112m  配信モジュール
【図１】
2022500785.tif 000003
【図２】
2022500785.tif 000004
【図３】
2022500785.tif 000005
【図４】
2022500785.tif 000006
【手続補正書】
【提出日】令和3年4月5日(2021.4.5)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
1つまたは複数のコンピュータおよび1つまたは複数の記憶デバイスを備えるサーバであって、ソーシャル・メッセージング・プラットフォームを実装するように構成されたサーバと、
ユーザデバイスと、
前記ユーザデバイス上で実行されている前記ソーシャル・メッセージング・プラットフォームのクライアントソフトウェアとを含む、システムであって、
前記クライアントソフトウェアは、動作を実行するように構成され、前記動作が、
前記サーバにコンテンツ要求を送信するステップと、
前記ユーザデバイスが前記サーバから前記コンテンツ要求のレスポンスを受信している間に、かつ前記ユーザデバイス上のネットワークスタックが前記クライアントソフトウェアに対する前記レスポンスを提供する前に、前記ネットワークスタックのトランスポート層から複数の断片を取得するステップであって、前記複数の断片が前記レスポンスを構成し、前記レスポンスが、コンテンツアイテムと前記コンテンツアイテムを記述するメタデータとを含み、各コンテンツアイテムがレンダリング可能であるとともに、1つまたは複数のデータオブジェクトによって定義される、ステップと、
前記断片が前記トランスポート層から取得されるとき、前記断片の前記コンテンツアイテムをディスプレイバッファにインクリメンタルにレンダリングするステップであって、前記メタデータによって決定された順序で前記コンテンツアイテムを前記ディスプレイバッファに配置することを含み、前記ディスプレイバッファが前記ユーザデバイスのメモリのデータ構造である、ステップと、
前記ユーザデバイスのディスプレイ上に前記ディスプレイバッファの全部または一部を表示するステップと
を含む、システム。
【請求項２】
前記クライアントソフトウェアは、スタンドアロンアプリであるか、前記ユーザデバイス上にインストールされたウェブブラウザで実行されるJavaスクリプトプログラムである、請求項1に記載のシステム。
【請求項３】
前記コンテンツアイテムを記述する前記メタデータは、各コンテンツアイテムに対して、前記レスポンスの他のコンテンツアイテムに対する、および前記ディスプレイバッファに以前にレンダリングされたレスポンスのコンテンツアイテムに対する、前記コンテンツアイテムの前記ディスプレイバッファの場所を指定するシーケンス識別子を含む、請求項1に記載のシステム。
【請求項４】
それぞれのコンテンツアイテムのシーケンス識別子が、他のコンテンツアイテムに対する、前記コンテンツアイテムの作成された時間に対応する、請求項3に記載のシステム。
【請求項５】
前記メタデータは、前記レスポンスの最初の断片において受信され、前記レスポンスのコンテンツアイテムの総数を含み、前記動作はさらに、
前記最初の断片の前記コンテンツアイテムを前記ディスプレイバッファにレンダリングし、前記レスポンスの後続の断片の各コンテンツアイテムのためのそれぞれのプレースホルダを前記ディスプレイバッファに含めるステップと、
前記後続の断片の前記コンテンツアイテムをレンダリングするときに、前記それぞれのプレースホルダを再配置するステップとを含む、請求項1に記載のシステム。
【請求項６】
前記メタデータはさらに、各コンテンツアイテムについて、シーケンス識別子を含み、それぞれのプレースホルダは、対応するコンテンツアイテムの前記シーケンス識別子によって指定された前記ディスプレイバッファの場所に作成される、請求項5に記載のシステム。
【請求項７】
前記断片が受信されるときに前記断片の前記コンテンツアイテムをインクリメンタルにレンダリングするステップは、
第1の断片が特定のコンテンツアイテムの最初の部分のみを含むと決定するステップと、
前記特定のコンテンツアイテムの残りを含む第2の断片を受信するステップと、
前記最初の部分と前記特定のコンテンツアイテムの前記残りを組み合わせるステップと、
前記ディスプレイバッファに前記組み合わせたコンテンツアイテムをレンダリングするステップと
を含む、請求項1に記載のシステム。
【請求項８】
前記1つまたは複数のデータオブジェクトは、JSONオブジェクトであり、前記断片が受信されるときに前記断片の前記コンテンツアイテムをインクリメンタルにレンダリングするステップは、各コンテンツアイテムに対して、
前記コンテンツアイテムを定義するJSONオブジェクトの開始を識別するステップと、
前記コンテンツアイテムを定義する前記JSONオブジェクトの終わりを識別するステップと
を含む、請求項7に記載のシステム。
【請求項９】
前記レスポンスの前記断片の各々は、前記クライアントソフトウェアに、トランスポート層プロトコルによって提供される1つまたは複数のトランスポート層セグメントを含む、請求項1に記載のシステム。
【請求項１０】
各レスポンスでは、前記レスポンスの各コンテンツアイテムをレンダリングする必要のあるデータが、前記コンテンツアイテムを定義する前記1つまたは複数のデータオブジェクトに含まれるか、あるいは、前記レスポンスにおいて以前に受信されたコンテンツアイテムを定義する1つまたは複数のデータオブジェクトに含まれる、請求項1に記載のシステム。
【請求項１１】
ユーザデバイス上で実行されているソーシャル・メッセージング・プラットフォームのクライアントソフトウェアによって実行される方法であって、
1つまたは複数のコンピュータと1つまたは複数の記憶デバイスとを備えるサーバに、コンテンツ要求を送信するステップであって、前記サーバが前記ソーシャル・メッセージング・プラットフォームを実装するように構成される、ステップと、
前記ユーザデバイスが前記サーバから前記コンテンツ要求のレスポンスを受信している間に、かつ前記ユーザデバイス上のネットワークスタックが前記クライアントソフトウェアに対する前記レスポンスを提供する前に、前記ネットワークスタックのトランスポート層から複数の断片を取得するステップであって、前記複数の断片が前記レスポンスを構成し、前記レスポンスが、コンテンツアイテムと前記コンテンツアイテムを記述するメタデータとを含み、各コンテンツアイテムがレンダリング可能であるとともに、1つまたは複数のデータオブジェクトによって定義される、ステップと、
前記断片が前記トランスポート層から取得されるとき、前記断片の前記コンテンツアイテムをディスプレイバッファにインクリメンタルにレンダリングするステップであって、前記メタデータによって決定された順序で前記コンテンツアイテムを前記ディスプレイバッファに配置することを含み、前記ディスプレイバッファが前記ユーザデバイスのメモリのデータ構造である、ステップと、
前記ユーザデバイスのディスプレイ上に前記ディスプレイバッファの全部または一部を表示するステップと
を含む、方法。
【請求項１２】
前記クライアントソフトウェアは、スタンドアロンアプリであるか、前記ユーザデバイス上にインストールされたウェブブラウザで実行されるJavaスクリプトプログラムである、請求項11に記載の方法。
【請求項１３】
前記コンテンツアイテムを記述する前記メタデータは、各コンテンツアイテムに対して、前記レスポンスの他のコンテンツアイテムに対する、および前記ディスプレイバッファに以前にレンダリングされたレスポンスのコンテンツアイテムに対する、前記コンテンツアイテムの前記ディスプレイバッファの場所を指定するシーケンス識別子を含む、請求項11に記載の方法。
【請求項１４】
それぞれのコンテンツアイテムのシーケンス識別子が、他のコンテンツアイテムに対する、前記コンテンツアイテムの作成された時間に対応する、請求項13に記載の方法。
【請求項１５】
前記メタデータは、前記レスポンスの最初の断片において受信され、前記レスポンスのコンテンツアイテムの総数を含み、前記方法はさらに、
前記最初の断片の前記コンテンツアイテムを前記ディスプレイバッファにレンダリングし、前記レスポンスの後続の断片の各コンテンツアイテムのためのそれぞれのプレースホルダを前記ディスプレイバッファに含めるステップと、
前記後続の断片の前記コンテンツアイテムをレンダリングするときに、前記それぞれのプレースホルダを再配置するステップとを含む、請求項11に記載の方法。
【請求項１６】
前記メタデータはさらに、各コンテンツアイテムについて、シーケンス識別子を含み、それぞれのプレースホルダは、対応するコンテンツアイテムの前記シーケンス識別子によって指定された前記ディスプレイバッファの場所に作成される、請求項15に記載の方法。
【請求項１７】
前記断片が受信されるときに前記断片の前記コンテンツアイテムをインクリメンタルにレンダリングするステップは、
第1の断片が特定のコンテンツアイテムの最初の部分のみを含むと決定するステップと、
前記特定のコンテンツアイテムの残りを含む第2の断片を受信するステップと、
前記最初の部分と前記特定のコンテンツアイテムの前記残りを組み合わせるステップと、
前記ディスプレイバッファに前記組み合わせたコンテンツアイテムをレンダリングするステップと
を含む、請求項11に記載の方法。
【請求項１８】
前記1つまたは複数のデータオブジェクトは、JSONオブジェクトであり、前記断片が受信されるときに前記断片の前記コンテンツアイテムをインクリメンタルにレンダリングするステップは、各コンテンツアイテムに対して、
前記コンテンツアイテムを定義するJSONオブジェクトの開始を識別するステップと、
前記コンテンツアイテムを定義する前記JSONオブジェクトの終わりを識別するステップと
を含む、請求項17に記載の方法。
【請求項１９】
前記レスポンスの前記断片の各々は、前記クライアントソフトウェアに、トランスポート層プロトコルによって提供される1つまたは複数のトランスポート層セグメントを含む、請求項11に記載の方法。
【請求項２０】
各レスポンスでは、前記レスポンスの各コンテンツアイテムをレンダリングする必要のあるデータが、前記コンテンツアイテムを定義する前記1つまたは複数のデータオブジェクトに含まれるか、あるいは、前記レスポンスにおいて以前に受信されたコンテンツアイテムを定義する1つまたは複数のデータオブジェクトに含まれる、請求項11に記載の方法。
【請求項２１】
命令を格納する1つまたは複数の非一時的コンピュータ可読記憶媒体であって、前記命令が、1つまたは複数のコンピュータによって実行されると、前記1つまたは複数のコンピュータに動作を実行させるように動作可能であり、前記動作が、
1つまたは複数のコンピュータと1つまたは複数の記憶デバイスとを備えるサーバに、コンテンツ要求を送信するステップであって、前記サーバがソーシャル・メッセージング・プラットフォームを実装するように構成される、ステップと、
前記1つまたは複数のコンピュータが前記サーバから前記コンテンツ要求のレスポンスを受信している間に、かつ前記1つまたは複数のコンピュータ上のネットワークスタックがクライアントソフトウェアに対する前記レスポンスを提供する前に、前記ネットワークスタックのトランスポート層から複数の断片を取得するステップであって、前記複数の断片が前記レスポンスを構成し、前記レスポンスが、コンテンツアイテムと前記コンテンツアイテムを記述するメタデータとを含み、各コンテンツアイテムがレンダリング可能であるとともに、1つまたは複数のデータオブジェクトによって定義される、ステップと、
前記断片が前記トランスポート層から取得されるとき、前記断片の前記コンテンツアイテムをディスプレイバッファにインクリメンタルにレンダリングするステップであって、前記メタデータによって決定された順序で前記コンテンツアイテムを前記ディスプレイバッファに配置することを含み、前記ディスプレイバッファが前記1つまたは複数のコンピュータのメモリのデータ構造である、ステップと、
前記1つまたは複数のコンピュータのディスプレイ上に前記ディスプレイバッファの全部または一部を表示するステップと
を含む、1つまたは複数の非一時的コンピュータ可読記憶媒体。
【国際調査報告】
2022500785.tif 000007
2022500785.tif 000008
2022500785.tif 000009