(58)【調査した分野】(Int.Cl.,DB名)
コンピュータコードの各修正部分のためのそれぞれの前記事前作業動作は、実行されると、前記コンピューティングデバイスに、コンピュータコードのそれぞれの前記修正部分を前記アクティビティに関連付けさせ、前記アクティビティ用のタイマーを開始または再開させ、
コンピュータコードの各修正部分のためのそれぞれの前記事後作業動作は、実行されると、前記コンピューティングデバイスに、コンピュータコードのそれぞれの前記修正部分用のコンピュータコードの対応する前記オリジナル部分の実行が完了すると、コンピュータコードの対応する前記オリジナル部分を実行するための前記持続時間が前記タイマーに追加されるように、前記アクティビティ用の前記タイマーを一時停止させ、または停止させる、請求項1に記載のコンピュータ実装方法。
コンピュータコードの各修正部分のためのそれぞれの前記事前作業動作は、実行されると、前記コンピューティングデバイスに、コンピュータコードのそれぞれの前記修正部分を前記アクティビティに関連付けさせ、コンピュータコードのそれぞれの前記修正部分用のコンピュータコードの対応する前記オリジナル部分の実行のための開始時間を識別する第1のタイムスタンプを記録させ、
コンピュータコードの各修正部分のためのそれぞれの前記事後作業動作は、実行されると、前記コンピューティングデバイスに、コンピュータコードのそれぞれの前記修正部分用のコンピュータコードの対応する前記オリジナル部分の実行が完了した終了時間を識別する第2のタイムスタンプを記録させる、請求項1または3に記載のコンピュータ実装方法。
前記アクティビティログは、前記アクティビティの前記状況を示す第1のエントリと、前記コンピューティングデバイスによって実施される他のアクティビティの状況を示す他のエントリとを含む、請求項1に記載のコンピュータ実装方法。
前記サーバシステムへの前記リモートプロシージャコールの送信と、前記リモートプロシージャコールへの前記応答の受信との間に経過した前記時間の長さに少なくとも部分的に基づいて、前記アクティビティの完了までの前記総時間を判断するステップをさらに含む、請求項11に記載のコンピュータ実装方法。
前記コンピューティングデバイスによる前記アクティビティの実施を呼び出すための前記ユーザ入力を受信するステップは、前記ユーザ入力が、前記コンピューティングデバイスの電子ディスプレイ上に表示されるウェブページまたはアプリケーションのユーザインターフェースにおける前記アクティビティに関連付けられた制御を選択したことを識別するステップを含む、請求項1から12のいずれか一項に記載のコンピュータ実装方法。
【発明の概要】
【課題を解決するための手段】
【0003】
本文書は概して、クライアントコンピューティングデバイスにおけるアクティビティの実施に関する情報が判断され、分析され、かつ/または報告され得るためのシステム、方法、デバイスおよび他の技法について記載する。いくつかの実装形態において、アクティビティ実施を追跡するためのフレームワークが、クライアントデバイスにおいて実装される。フレームワークは、時間経過に伴うアクティビティの状況を追跡することができ、アクティビティの持続時間を示す情報を含む、アクティビティの実行についての情報を記憶することができる。いくつかの実装形態において、フレームワークは、ウェブページまたはウェブアプリケーション中でスクリプト記述コードによって実装されてよく、各タスクのそれぞれの実行時間を示す情報など、アクティビティに関連付けられた複数のタスクの実行についての情報を記録することができる。フレームワークは次いで、コンピューティングデバイスのユーザの視点から、アクティビティに関連付けられた遅延を正確に示す情報を収集するのに使われ得る。
【0004】
本明細書に記載する主題のいくつかの実装形態は、コンピュータ実装方法を含む。この方法は、コンピューティングデバイスにおいて、コンピューティングデバイスによるアクティビティの実施を呼び出すためのユーザ入力を受信するステップを含み得る。アクティビティに関連付けられたコンピュータコードの複数の部分が識別されてよく、コンピュータコードの複数の部分の中のコンピュータコードの各部分は、異なる時間に、コンピューティングデバイスによって非同期に実行されるようにスケジュールされ得る。アクティビティに関連付けられたコンピュータコードの複数の部分の中のコンピュータコードの各部分について、(i)コンピュータコードのそれぞれの部分が実行されてよく、(ii)コンピュータコードのそれぞれの部分の実行の持続時間を示す、コンピュータコードのそれぞれの部分の実行についてのデータが記録されてよく、(iii)コンピュータコードの少なくとも1つの後続部分も、アクティビティを完了するために実行されることを求められるかどうかに関して判断が行われてよい。アクティビティの完了までの総時間は、コンピュータコードの複数の部分の実行についての記録されたデータを集計したことに少なくとも部分的に基づいて与えられ得る。
【0005】
これらおよび他の実装形態は、任意選択で、以下の特徴のうちの1つまたは複数を含み得る。
【0006】
アクティビティの完了までの総時間は、コンピュータコードの複数の部分の持続時間の合計に少なくとも部分的に基づいて判断され得る。
【0007】
アクティビティ用のコンピュータコードの複数の部分の中のコンピュータコードの各部分は、コンピュータコードのそれぞれのオリジナル部分を含み得る。
【0008】
アクティビティ用のコンピュータコードの複数の部分の少なくともサブセット中のコンピュータコードの各部分について、コンピュータコードの部分は、(i)コンピュータコードのそれぞれのオリジナル部分が実行される前に実行されるように用意される事前作業動作(Pre-work Operation)、および(ii)コンピュータコードのそれぞれのオリジナル部分が実行された後に実行されるように用意される事後作業動作を含むように修正され得る。コンピュータコードの部分を実行することは、(i)コンピュータコードの部分のための事前作業動作(Post-work Operation)、(ii)コンピュータコードの部分のためのコンピュータコードのそれぞれのオリジナル部分、および(iii)コンピュータコードの部分のための事後作業動作を実行することを含む、コンピュータコードの修正された部分を実行することを含み得る。
【0009】
コンピュータコードの各修正部分のためのそれぞれの事前作業動作は、実行されると、コンピューティングデバイスに、コンピュータコードのそれぞれの修正部分をアクティビティに関連付けさせ、アクティビティ用のタイマーを開始または再開させることができる。コンピュータコードの各修正部分のためのそれぞれの事後作業動作は、実行されると、コンピューティングデバイスに、コンピュータコードのそれぞれの修正部分用のコンピュータコードの対応するオリジナル部分の実行が完了すると、コンピュータコードの対応するオリジナル部分を実行するための持続時間がタイマーに追加されるように、アクティビティ用のタイマーを一時停止させ、または停止させることができる。
【0010】
コンピュータコードの各修正部分のためのそれぞれの事前作業動作は、実行されると、コンピューティングデバイスに、コンピュータコードのそれぞれの修正部分をアクティビティに関連付けさせ、コンピュータコードのそれぞれの修正部分用のコンピュータコードの対応するオリジナル部分の実行のための開始時間を識別する第1のタイムスタンプを記録させることができる。コンピュータコードの各修正部分のためのそれぞれの事後作業動作は、実行されると、コンピューティングデバイスに、コンピュータコードのそれぞれの修正部分用のコンピュータコードの対応するオリジナル部分の実行が完了した終了時間を識別する第2のタイムスタンプを記録させることができる。
【0011】
コンピュータコードの各修正部分のためのそれぞれの事前作業動作は、実行されると、コンピューティングデバイスに、アクティビティログ中で、アクティビティの状況をアクティブとマークさせることができる。コンピュータコードの各修正部分のためのそれぞれの事後作業動作は、実行されると、コンピューティングデバイスに、アクティビティログ中で、アクティビティの状況を保留または終了とマークさせることができる。
【0012】
アクティビティログは、アクティビティの状況を示す第1のエントリと、コンピューティングデバイスによって実施される他のアクティビティの状況を示す他のエントリとを含み得る。
【0013】
コンピュータコードの修正された部分のうちの第1のもののための事後作業動作は、実行されると、コンピューティングデバイスに、(i)コンピュータコードの少なくとも1つの追加部分が、アクティビティの実施を完了するためにこれから実行されることになっているかどうかを判断させ、かつ(ii)コンピュータコードの少なくとも1つの追加部分が、アクティビティの実施を完了するためにこれから実行されることになっていると判断したことに応答して、アクティビティログ中のアクティビティの状況をアクティブから保留に変更させることができる。
【0014】
コンピュータコードの修正された部分のうちの第1のもののための事後作業動作は、実行されると、コンピューティングデバイスに、(i)コンピュータコードの少なくとも1つの追加部分が、アクティビティの実施を完了するためにこれから実行されることになっているかどうかを判断させ、かつ(ii)コンピュータコードのどの追加部分も、アクティビティの実施を完了するためにこれから実行されることになっていないと判断したことに応答して、アクティビティログ中のアクティビティの状況をアクティブから終了に変更させることができる。
【0015】
アクティビティ用のコンピュータコードの複数の部分は、コンピューティングデバイスが、一度にコンピュータコードの複数の部分のうちのただ1つを実行するように、単一のスレッド中で非同期に実行されるようにスケジュールされてよい。
【0016】
アクティビティ用のコンピュータコードの複数の部分のうちの、アクティビティ用のコンピュータコードの第1の部分が実行され得る。異なるアクティビティ用のコンピュータコードの少なくとも一部分が、コンピューティングデバイスによって、およびアクティビティ用のコンピュータコードの第1の部分を実行した後で実行され得る。アクティビティ用のコンピュータコードの第2の部分が、他のアクティビティ用のコンピュータコードの少なくとも部分を実行した後、コンピューティングデバイスによって実行され得る。アクティビティの完了までの総時間は、アクティビティ用のコンピュータコードの第1の部分およびアクティビティ用のコンピュータコードの第2の部分を実行するそれぞれの持続時間を含み得るが、異なるアクティビティ用のコンピュータコードの少なくとも部分を実行する持続時間は、アクティビティの完了までの総時間から除かれ得る。
【0017】
コンピュータコードの複数の部分は、JAVASCRIPT(登録商標)コードなどのスクリプト記述コードのそれぞれの部分を含み得る。
【0018】
アクティビティ用のコンピュータコードの複数の部分のうちの、コンピュータコードの第1の部分は、実行されると、コンピューティングデバイスに、コンピューティングデバイスから離れたサーバシステムへリモートプロシージャコールを送信させることができる。方法は、(i)コンピューティングデバイスにおいて、およびサーバシステムから、リモートプロシージャコールへの応答を受信するステップと、(ii)コンピューティングデバイスにおいて、サーバシステムへのリモートプロシージャコールの送信と、リモートプロシージャコールへの応答の受信との間に経過した時間の長さを識別するデータを記録するステップとをさらに含み得る。
【0019】
アクティビティの完了までの総時間は、サーバシステムへのリモートプロシージャコールの送信と、リモートプロシージャコールへの応答の受信との間に経過した時間の長さに少なくとも部分的に基づいて判断され得る。
【0020】
コンピューティングデバイスによるアクティビティの実施を呼び出すためのユーザ入力を受信するステップは、ユーザ入力が、コンピューティングデバイスの電子ディスプレイ上に表示されるウェブページまたはアプリケーションのユーザインターフェースにおけるアクティビティに関連付けられた制御を選択したことを識別するステップを含み得る。
【0021】
本明細書に記載する主題のいくつかの実装形態は、1つまたは複数の非一時的コンピュータ可読媒体を含み得る。媒体は、実行されると、動作の実施を引き起こす命令を記憶することができる。動作は、コンピューティングデバイスにおいて、コンピューティングデバイスによるアクティビティの実施を呼び出すためのユーザ入力を受信することと、アクティビティに関連付けられたコンピュータコードの複数の部分を識別することであって、コンピュータコードの複数の部分の中のコンピュータコードの各部分は、異なる時間にコンピューティングデバイスによって実行されるようにスケジュールされる、ことと、アクティビティに関連付けられたコンピュータコードの複数の部分の中のコンピュータコードの各部分について、コンピュータコードのそれぞれの部分を実行することと、コンピュータコードのそれぞれの部分の実行の持続時間を示す、コンピュータコードのそれぞれの部分の実行についてのデータを記録することと、コンピュータコードの少なくとも1つの後続部分も、アクティビティを完了するために実行されることを求められるかどうかを判断することと、コンピュータコードの複数の部分の実行についての記録されたデータを集計したことに少なくとも部分的に基づいて、アクティビティの完了までの総時間を出力することとを含み得る。
【0022】
本明細書に記載する主題のいくつかの実装形態は、コンピューティングデバイスを含む。コンピューティングデバイスは、1つまたは複数のプロセッサ、ウェブブラウジングアプリケーション、およびアクティビティ追跡器を含み得る。ウェブブラウジングアプリケーションは、レンダリングエンジン、入力ハンドラ、およびスクリプト記述エンジンを含み得る。レンダリングエンジンは、ウェブページの提示を、ユーザへの表示のために生成することを可能にされ得る。入力ハンドラは、ウェブページの提示とのユーザ対話を検出することを可能にされてよく、ユーザ対話は、コンピューティングデバイスによるアクティビティの実施を呼び出すという意図を示す。スクリプト記述エンジンは、ウェブページ用のウェブコード中の1つまたは複数のスクリプトを実行することができる。アクティビティ追跡器は、再コーディングエンジン、タイマー、およびアクティビティログを含み得る。再コーディングエンジンは、アクティビティ用のコンピュータコードのいくつかの部分を、それらの部分がウェブブラウジングアプリケーションによって実行される前に修正することを可能にされてよく、修正することは、コンピュータコードの部分のうちの少なくともいくつかのための事前作業動作用のコードおよび事後作業動作用のコードを挿入することを含み、再コーディングエンジンは、コンピュータコードの対応する無修正部分ではなく、実行されるべき、コンピュータコードの修正された部分をスクリプト記述エンジンに提供する。タイマーは、アクティビティの1つまたは複数の実行持続時間を追跡することを可能にされ得る。アクティビティログは、アクティビティの1つまたは複数の実行持続時間を記述する情報を記憶することを可能にされる。
【0023】
これらおよび他の実装形態は、任意選択で、以下の特徴のうちの1つまたは複数を含み得る。事前作業動作のためのコードは、実行されると、コンピューティングデバイスに、アクティビティの状況をアクティブ状況に変更させることができる。事後作業動作のためのコードは、実行されると、コンピューティングデバイスに、アクティビティの状況を保留状況または終了状況に変更させることができる。アクティビティログは、アクティビティの状況を識別する情報をさらに記憶することができる。
【0024】
事前作業動作のためのコードは、実行されると、コンピューティングデバイスに、アクティビティ用のタイマーを開始または再開させることができる。事後作業動作のためのコードは、実行されると、コンピューティングデバイスに、アクティビティ用のタイマーを停止または一時停止させることができる。
【0025】
本明細書に記載する主題のいくつかの実装形態は、いくつかの事例において、以下の利点のうちの1つまたは複数を実現することができる。コンピューティングデバイスのユーザによって知覚される遅延を反映する、クライアントコンピューティングデバイスにおいて少なくとも一部が実施されるアクティビティの総持続時間が判断され得る。たとえば、アクティビティに関連付けられた各タスクの実行が始まり、終了する時間を検出することによって、ユーザによって経験される遅延が正確に判断され得る。いくつかの実装形態において、非同期アクティビティに関連付けられた遅延は、アクティビティが完了される前にアクティビティに関連付けられたタスクが、1回または複数回断続的に開始され、一時停止されるときであっても判断され得る。したがって、クライアント計算時間が、追跡されている特定のアクティビティに関連付けられたタスクの間に他のアクティビティの実施をインターリーブする場合であっても、ターゲットにされたアクティビティに特に関連付けられた遅延が判断され得るように、追跡されるアクティビティ用の該当タスクのみの持続時間が分離されればよい。いくつかの実装形態において、コンピューティングデバイスが、アクティビティの完全なライフサイクルを正確に追跡することができるようにする、時間に伴ってアクティビティの状況を追跡するためのフレームワークが設けられ得る。たとえば、アクティビティおよびそれらの成分タスクの状況および識別を支配する規則が定義され得る。規則は、逸失タスク、所与のアクティビティとのタスクの誤った関連付け、およびアクティビティの完了の早まった検出など、偽の追跡イベントの出現を削減するように定義され得る。本明細書で開示する主題は、他の非同期アクティビティのタスクが所与の非同期アクティビティのタスクの合間に実施されるときであっても、クライアントデバイスが所与の非同期アクティビティ(たとえば、複数の別個にスケジュールされたタスクを含む)を完了するのにかかる時間量を追跡および/または報告するための、クライアントデバイスの能力を向上させることによって、クライアントデバイス(たとえば、コンピュータ)の基本的働きを向上させる。
【発明を実施するための形態】
【0027】
図面の中の類似の参照番号および記号は、同じ要素を示す。
【0028】
本文書は概して、コンピューティングデバイス上で実行されるアクティビティを追跡するためのシステム、方法、デバイス、および他の技法について記載する。以下の開示は、アクティビティの部分が別々の時間期間中に起こり得る場合であっても、複数の異なる非同期アクティビティの追跡を可能にする。たとえば、所与のアクティビティの完了に先立って、異なるアクティビティの1つまたは複数のタスクが実施され得る。異なるアクティビティの1つまたは複数のタスクが完了されると、所与のアクティビティのタスクが実施され続けてよい。この例では、所与のアクティビティを完了するのに求められる時間量の正確な追跡および/または報告は、異なるアクティビティの動作が所与のアクティビティの動作の実施の合間に実施されたことを考慮に入れる。
【0029】
アクティビティとは概して、アクティビティを呼び出したトリガリングイベントに関連した、コンピューティングデバイスによって(単独でも、1つまたは複数の他のコンピュータと協調しても)実施される動作の任意の集合体である。たとえば、トリガリングイベントは、ウェブページ上でストックティッカーをリフレッシュするというユーザの意図を示す、コンピューティングデバイスとのユーザ対話であってよい。ユーザ対話(すなわち、トリガリングイベント)に応答して実施される動作の集合体は、アクティビティと呼ばれ得る。いくつかのケースでは、アクティビティは、アクティビティを実践するのに必要とされる、全体的作業の一部分に各々が関するタスクのセットからなり得る。タスクはしたがって、単一の時間間隔内に実行される、アクティビティ用の動作の一部分(たとえば、所与の時間に実施されるようにスケジュールされる、アクティビティ用の動作のセット)であってよい。ストックティッカーシナリオにおいて、たとえば、ストックティッカーを、更新された相場でリフレッシュするアクティビティは、ユーザのティッカーにおいてどの株式相場が提供されるかを識別するための第1のタスク、更新された相場を示すデータを要求する、サーバへのリモートプロシージャコールをスケジュールする第2のタスク、サーバからの受信された相場を処理し、フォーマットする第3のタスク、およびサーバからの更新された相場に基づいて、ウェブページ中のストックティッカーグラフィックを更新する第4のタスクを伴い得る。当然ながら、たとえば、クライアントデバイスの要求に応答して、更新された株式相場を実際に取得し、相場を提供するために、サーバによって追加タスクが実施されてよい。
【0030】
本明細書に記載する技法によると、クライアントコンピューティングデバイスにおけるアクティビティ追跡器は、アクティビティに関連付けられた各タスク(またはクライアントコンピューティングデバイスにおいて実行される各タスク)の実行を追跡して、アクティビティについての1つまたは複数の実施属性を判断することができる。実施属性は、たとえば、任意の個々のタスク、タスクの異なるサブセット、またはアクティビティにおけるタスクすべてについての総遅延に関連付けられた遅延(持続時間)を含み得る。アクティビティ追跡器によって判断された情報は次いで、ウェブサイトオペレータ、アプリケーション開発者、または他者に、クライアントデバイスによる所与のアクティビティの実施について価値ある洞察を提供するために報告され、分析されてよい。たとえば、開発者は、(たとえば、ストックティッカーを更新するための)アクティビティを呼び出すための、ユーザの選択の時間と、アクティビティが完了したことをユーザが知覚する(たとえば、ブラウザが、更新された株式相場でウェブページをレンダリングし直す)時間との間の遅延を厳密に知ることに興味をもつ場合がある。クライアント側監視技法のいくつかの実装形態は、正確および確実に、そのような情報の判断および提供を可能にすることができる。実装形態はしたがって、アクティビティの動作についての技術的情報を提供する視覚指示の形で出力を提供することができ、アクティビティを実行するシステムに行き渡っている条件についての情報を自動的に提供することができる。
【0031】
いくつかの実装形態において、アクティビティ追跡器は、クライアントコンピューティングデバイス上の非同期アクティビティを追跡するように構成され得る。非同期アクティビティとは概して、少なくとも1つの非同期タスクを含むアクティビティである。非同期タスクとは概して、タスクが結果を戻す前に、他のコンピュータ動作の実施を阻止しないタスクである。たとえば、ストックティッカー例において、クライアントデバイスが、更新された株式相場情報をサーバシステムに対して要求する非同期タスクを呼び出す場合がある。更新された情報についての要求を生成し、要求をサーバに送信し、更新された情報を受信することに関わる、少なくともある程度の遅延がある。ただし、タスクは非同期に呼び出されるので、コンピューティングデバイスは、要求をサーバシステムに送信した後、コンピューティングデバイスがサーバシステムからの、要求への応答を待つ間、他の動作を実施することに進んでよい。後で、サーバが応答したことを識別すると、応答はコンピューティングデバイスによって処理されてよく、追加タスクが、サーバの応答によって示される、更新された株式相場を使ってアクティビティを完了するために呼び出されてよい。
【0032】
例として本明細書に記載するタスクのうちのいくつかはアクティビティの論理段階に対応するが、すべてのタスクがこのモデルに準拠し得るわけではないことを諒解されたい。そうではなく、たとえば、タスクは、ある時間にアクティビティのために実施されるようにスケジュールされる作業のどの部分であってもよい。たとえば、一度に動作のただ1つのスレッドを実行するシングルスレッドのコンピューティング環境において、デバイスは、第1の時間間隔中に第1のアクティビティのために実施されるように、動作の第1のシリーズをスケジュールすればよく、次いで、第1の時間間隔に続く第2の時間間隔中に異なるアクティビティに関連した一連の動作をスケジュールすればよく、次いで、第2の時間間隔に続く第3の時間間隔中に第1のアクティビティのために実施されるように、動作の第3のシリーズをスケジュールすればよい。動作の第1のシリーズおよび動作の第3のシリーズは、論理的に関係していてもいなくても、各々、第1のアクティビティ用のそれぞれのタスクと呼ばれ得る。いくつかの実装形態において、各タスクは、アクティビティ用のコンピュータコードのそれぞれの部分として定義され得る。
【0033】
いくつかの実装形態において、本明細書に記載する技法は、スクリプト記述エンジンを利用する、クライアントコンピューティングデバイス上のアプリケーションによって、たとえば、JAVASCRIPT(登録商標)エンジン(または別のスクリプト記述エンジン)を利用するウェブブラウジングアプリケーションによって実践され得る。本文書を通じて使われるように、エンジンという用語は、コンピューティングハードウェアのセットに特定の機能性を実施させる機械可読命令を実行するように特別に構成されるコンピューティングハードウェアのセットを指す。そのような実装形態において、アクティビティ追跡器用のフレームワークは、クライアントデバイスによって翻訳され、稼働されるスクリプト記述型コードによって指定され得る。たとえば、ウェブページとのユーザ対話に応答して非同期アクティビティを実施するためのJAVASCRIPT(登録商標)コードを含むウェブページは、これらのアクティビティの実施を追跡するためのアクティビティ追跡器を実装するための追加JAVASCRIPT(登録商標)コードを含み得る。アクティビティ追跡器は、たとえば、コンピューティングデバイスによって実施されようとしているタスクを遮断し、タスク用のコードを、アクティビティタイマーを開始し、一時停止し、タスクの実行についての情報のログをとるための事前作業および事後作業動作を含むように書き換えることができる。
【0034】
スクリプト記述エンジンは、ウェブページ中で定義されるアクティビティのうちのどれについても単一のタスクのみが、ある時間にデバイスによって実行され得るように、シングルスレッドであってよい。JAVASCRIPT(登録商標)エンジンなどのスクリプト記述エンジンが、コールバック関数を使って、スクリプト記述されたアクティビティタスクを非同期に実施させるイベントループを実装し得る。スクリプト記述エンジンは、コンピューティングデバイスによって処理されるべきメッセージのリストと、メッセージに関連付けられたコールバック関数の指示とを含むメッセージキューを、(たとえば、コンピュータメモリデバイスなどの物理的データ構造に記憶されるデジタルデータとして)維持することができる。ブラウザは、メッセージキューを定期的にポーリングして、キュー中の次のメッセージを識別し、次いで、それに関連付けられたコールバック関数を実行する(かつ、キューからメッセージをクリアする)ことができる。コールバック関数は、キューに追加され、コールバック関数に関連付けられる追加メッセージを生成し得る。コールバック関数は各々、アクティビティに関連付けられたタスクであってよい。このようにして、アクティビティにおける後続タスクは、アクティビティ用の先行タスクによって動的に(たとえば、自動的に)スケジュールされ得る。図面を参照してより詳細に記載するように、アクティビティ追跡器は、いくつかの実装形態において、アクティビティに関連付けられたタスクの持続時間などの有用情報を判断するために、クライアントデバイスにおけるアクティビティ用のタスクのすべてまたはいくつかのすぐ前または後に事前作業および事後作業追跡動作を実施させるように、このフレームワークで実装され得る。
【0035】
図1は、一部がクライアントコンピューティングデバイス上で、および一部がサーバ上で実施される例示的アクティビティの概念タイミング
図100を示す。この図は概して、アクティビティ用の非同期タスクが、どのようにスケジュールされ、実行され得るか、およびアクティビティの状況が、クライアントデバイス上のアクティビティ追跡器によって実装される規則に従って、時間とともにどのように変わり得るかを示す。
【0036】
3つの行が、水平の点線によって分離されて、タイミング
図100に示されており、行の各々は、異なる処理スレッドに対応する。行の各々は、アクティビティが始まる時間t
0と、アクティビティが終了する時間t
7との間の一連の時間におけるアクティビティの態様についての情報を示す。具体的には、上の行はブラウザスレッド102を表し、中央の行はサーバスレッド104を表し、下の行は現在のアクティビティ状況106を表す。クライアントスレッド102は、クライアントコンピューティングデバイスが、アクティビティに関連付けられたコードを実行している時間を識別する。本明細書に記載する例において、クライアントスレッド102は、どの時間においても、単一のアクティビティに関連付けられたコードのみがクライアントデバイスによって実行され得るように、シングルスレッドである。このモデルは、共通ウェブブラウジングアプリケーションにおいてJAVASCRIPT(登録商標)エンジンなどのスクリプト記述エンジンによって利用される。
【0037】
たとえば、ターゲットにされたコンテンツ(たとえば、様々な異種類のソースから取得された広告など)を、所与のユーザ向けのウェブページの提示に統合することに関連した例示的アクティビティを検討する。ウェブページは、ウェブページの他の部分をロードさせ、適切な広告(または他のサードパーティコンテンツ)がユーザ向けにフェッチされている間にスクリーン上にレンダリングさせる非同期技法を利用し得る。言い換えると、広告のロードは、ウェブページの他のコンテンツがロードされるのを阻止するべきでも、広告がロードされるときにページとのユーザ対話を防止するべきでもない。この例では、クライアントスレッド102中のブロック108、114、116、118、および120の各々は、広告ローディングアクティビティのための、クライアントデバイス102によって実施される、非同期作業(たとえば、タスク)のチャンクを示す。広告は、クライアントコンピューティングデバイスから離れてネットワーク上に置かれたアドサーバから取り出されてよく、したがって、サーバスレッド104は、アクティビティに関連したサーバによって実施される作業(たとえば、タスク)を表す追加ブロック110および112をさらに含む。サーバは、一度にただ1つのタスクが実施され得るようなシングルスレッド、または同時に複数のタスクが実施され得るようなマルチスレッドのいずれかであってよい。
図1に示すように、この例におけるサーバスレッド104は、ここでのサーバがタスク110および112を時間t
2から時間t
3までに同時に実施するので、マルチスレッドである。
【0038】
第3の行は、t
0〜t
7の各時間における現在のアクティビティ状況106を表す。いくつかの実装形態において、アクティビティ追跡器は、アクティビティのライフサイクル中の様々な時間におけるアクティビティの状況を記述する情報を記憶することができる。アクティビティの状況は、異なる時間に実行される複数のタスクにわたる、アクティビティの信頼できる追跡を可能にする規則のセットに従って判断され得る。規則は、どの所与のときにも、状況が、3つの状況、すなわち(1)アクティブ(Active)、(2)保留(Pending)、および(3)終了(Ended)のうちの1つを帯び得ると定める。「アクティブ」アクティビティは、現時点でクライアントコンピューティングデバイスによって実行中であるものである。「保留」アクティビティは、現時点でクライアントコンピューティングデバイスによって実行中でないが、まだ終了されていないものである。「終了」アクティビティは、アクティビティに関連した、クライアントコンピューティングデバイスによって実施されるべき追加タスクがないものである。多くのケースにおいて、アクティビティは、アクティビティが実施を完了したことにより、「終了」になり得る。ただし、アクティビティは、ユーザによる、完了前のアクティビティの取り消しなど、他の理由でも、またはアクティビティの完了を防止するエラーが起きたことにより、「終了」になり得る。その上、クライアントデバイス上のスクリプト記述エンジンはシングルスレッドであると想定されるので、どの所与の瞬間においても、ただ1つのアクティビティがある時間において「アクティブ」と指定され得る。
【0039】
いくつかの実装形態において、アクティビティは、クライアントデバイスがサーバへのリモートプロシージャコールをスケジュール中であるとき、およびクライアントデバイスが、将来の時間に実行されるべきである、アクティビティに関連したタスクをスケジュール中であるときを含む、アクティビティに関連付けられたクライアントデバイスによって実施されるどの非同期作業中でもアクティブとマークされ得る。最終的に、規則は、アクティビティがアクティブとして設定され得る2つの状況を与える場合があり、すなわち、(1)アクティビティが最初に呼び出される時間から、アクティビティに関連付けられた作業(たとえば、タスク)の初期チャンクが終了するまで、および(2)リモートプロシージャコールからのコールバックを含むアクティビティに関連付けられた任意の後続非同期作業(たとえば、タスク)中、である。
【0040】
図2を手短に参照すると、本明細書に記載する規則によるアクティビティ状況の間の遷移を有する例示的状態図が示されている。段階202において、たとえば、アクティビティを呼び出すというユーザの意図を示す、クライアントデバイスにおけるウェブページとのユーザ対話に応答して、アクティビティが開始される。クライアントデバイスは次いで、第1の非同期タスクを実行することによって、アクティビティを実施し始めることができる。第1の非同期タスクの実行中、アクティビティは段階202において現在とマークされる。いくつかの実装形態において、タスクは、非同期にタスクを実施するためのイベントループを利用するウェブブラウジングアプリケーション中のJAVASCRIPT(登録商標)エンジンなど、クライアントデバイス上のスクリプト記述エンジンによって翻訳および/または実行され得る。第1の非同期タスクが完了すると、イベントループは終了し、アクティビティ追跡器は、スケジューリングキュー(タスクキュー)を調べて、たとえば、アクティビティ用に追加非同期タスクがスケジュールされているかどうかを判断する(段階204)。追加タスクがスケジュールされていない場合、アクティビティ状況は、段階208において示されるように、「終了」に遷移される。アクティビティ追跡器が、追加タスクがアクティビティ用に実施されるようにスケジュールされると、スケジューリングキューから判断した(すなわち、アクティビティが終了でないと判断した)場合、アクティビティは、段階206において示されるように、第1の非同期タスクの完了時に「保留」とマークされる。後で、アクティビティ用の次の非同期タスクが実行されると、アクティビティの状況は再度、「アクティブ」とマークされる。「アクティブ」と「保留」との間のアクティビティ状況の遷移は、さらなるタスクがアクティビティ用に実施されることが可能でなくなるまで、この場合、アクティビティは「終了」とマークされるが、1回または複数回繰り返されてよい。
【0041】
再度
図1を参照して、アクティビティがt
0からt
7に進行するときの例示的アクティビティの段階および対応する状況について、ここで記載する。t
0において、クライアントスレッド102は、アクティビティに関連付けられた第1の非同期タスク108の実行を始める。いくつかの実装形態において、これは、アクティビティの実施を呼び出すトリガリングイベント(たとえば、ウェブページまたはアプリケーションのグラフィカルユーザインターフェース中の制御のユーザ選択)に応答して、クライアントデバイス上の第1のイベントループ中に起こり得る。t
0からt
1まで、第1のタスク108はクライアントスレッド102中で実行される。時間t
1において始まると、タスク108は、クライアントデバイスから離れたサーバへの第1のリモートプロシージャコールを行う。第1のリモートプロシージャコールは、ネットワークを介してサーバに送信されてよく、t
1において(または、ネットワーク送信時間により、t
1の後間もなく)、サーバスレッド104は第2のタスク110を呼び出す。クライアントスレッド102中で実行されるときの第1のタスク108の持続時間だけ、現在のアクティビティ状況は「アクティブ」である。
【0042】
時間t
2において、クライアントデバイス上のイベントループが終了し、したがって、第1のタスク108の実施がそれとともに終了する。時間t
2から時間t
3まで、クライアントスレッドは、どのタスクも実行中でないか、またはそうでなければアクティビティに関連付けられた作業を実施中でない。したがって、アクティビティ追跡器は、アクティビティの状況を、t
2からt
3までは「保留」とマークすればよい。この期間中、クライアントデバイスは必ずしも非アクティブではない。そうではなく、クライアントはタスクを非同期に実行することができるので、たとえば、
図1で図解される特定のアクティビティについての第1のリモートプロシージャコールへの応答を待ち受ける間、他のアクティビティに関連付けられたタスクが実行されてよい。また、「アクティブ」状況は概して、クライアントデバイス(サーバではなく)が現時点で、アクティビティに関連付けられたタスクを実行中であるかどうかに結び付けられるので、サーバスレッド102がt
2からt
3までアクティビティのための作業を実施中であることにより、この期間中、アクティビティ状況106は「アクティブ」にはならない。t
2においても、第1のタスク108が終了する前に、クライアントスレッド102は第2のリモートプロシージャコールを行い、これにより、サーバスレッド104は第2のサーバタスク112を呼び出す。サーバはマルチスレッドであってよく、たとえば、それによって、サーバタスク110および112を、タスクのそれぞれの持続時間の少なくとも一部分は同時に実行させる。
【0043】
時間t
3において、クライアントデバイスは、サーバから第1のリモートプロシージャコールへの応答を受信し、これにより、応答を処理するために、クライアントスレッド102中でタスク114が呼び出される。たとえば、サーバの応答は、応答メッセージをコールバック関数に関連付けるメッセージキューに入れられてよい。クライアントは、メッセージキューをポーリングして、第1のリモートプロシージャコールへの応答が受信されたことを識別することができ、応答して、関連付けられたコールバック関数をタスク114として実行する。タスク114の実行中、アクティビティの状況は「アクティブ」である。時間t
4において、タスク114は、タスク114に続いて直ちに始まる(またはタスク116がタスク114の終端部分であってよい)。第1のリモートプロシージャコールへの応答を処理した結果に基づいて、t
4におけるクライアントデバイスは、ウェブページまたはアプリケーションのユーザインターフェースを非同期に更新することができる。アクティビティ状況は、t
4からタスク116の完了まで、「アクティブ」のままである。
【0044】
一方、t
4からt
5まで、ネットワークスレッド104は、第2のリモートプロシージャコールに応答して呼び出されたタスク112を処理し続ける。クライアントのタスク116の完了に続くこの間隔の部分の間、アクティビティは、「保留」状況でマークされる。時間t
5において、タスク112は完了し、応答メッセージがクライアントデバイスに送信される。いくつかの実装形態において、応答メッセージは、クライアントの非同期メッセージキューに追加され、コールバック関数に関連付けられ得る。メッセージを受信すると、クライアントデバイスは、第2のリモートプロシージャコールへの応答を(たとえば、応答を非直列化するように)処理することができる。この処理は、クライアントスレッド102中のタスク118用のブロックによって表される。処理の結果に基づいて、追加タスク120がスケジュールされ、クライアントスレッド102中で時間t
6から時間t
7まで実行される。アクティビティ追跡器は、タスク118および120の両方の実施中、アクティビティについてのアクティビティ状況106を「アクティブ」とマークすればよい。
【0045】
時間t
7において、クライアントスレッド102は、アクティビティ用の最終タスク120の実施を完了し、アクティビティ追跡器は次いで、アクティビティの状況を「アクティブ」から「終了」に変更する。いくつかの実装形態において、アクティビティ追跡器は、アクティビティ用に何らかの追加タスクがスケジュールされているかどうかを判断するためにタスクキューを調べることによって、アクティビティが終了であると判断することができる。追加タスクがスケジュールされている場合、アクティビティ追跡器は、アクティビティが完了されていないと認識することができ、したがって、アクティビティを「保留」とマークする。ただし、追加タスクがキュー中でスケジュールされていない場合、アクティビティ追跡器は、アクティビティが完了されていると認識することができ、したがって、アクティビティを「終了」とマークする。
【0046】
いくつかの実装形態では、クライアントデバイスにおけるアクティビティ追跡器が、アクティビティの実施を、その実行にわたって監視し得る。たとえば、アクティビティ追跡器は、アクティビティ用の個々のタスクの持続時間を追跡することができ、そうすることによって、アクティビティに関連付けられた総遅延が、アクティビティのタスクのすべてまたはいくつかの、持続時間を集計することによって判断され得る。したがって、
図1のタイミング図に示されるアクティビティの総遅延を判断するために、アクティビティ追跡器は、クライアントスレッド102からのタスク108、114、116、118、および120のそれぞれの持続時間を判断すればよく、クライアントがリモートプロシージャコールへのサーバの応答を待っていた時間をさらに加えればよい。
【0047】
たとえば、持続時間(または、各実行されるタスクの始まりおよび終了についての時間をマークするタイムスタンプなど、持続時間を判断するのに使用可能な情報)を記録するアクティビティログが、クライアントデバイス上で維持され得る。
図3〜
図6に関して以下でさらに説明するように、アクティビティ追跡器は、いくつかの実装形態において、リモートプロシージャコールが行われる時間、およびコールへの応答がサーバから受信される時間を記録し得る。コールを行うことと、応答を受信することとの間のネットワーク遅延が次いで、報告され、かつ/またはアクティビティの総遅延を含む、遅延の他の測度を判断するのに使われ得る。
【0048】
いくつかの実装形態において、アクティビティ追跡器は、ネットワークスレッド104上で複数のタスクが稼動中である時間中の冗長な遅延をなくすことができる。たとえば、
図1において総アクティビティ遅延を判断するために、アクティビティ追跡器は、タスク108、114、116、118、および120の実行持続時間の合計をとればよく、クライアントデバイスがサーバからクライアントのリモートプロシージャコールへの応答を待ち受けたときにアクティビティが保留中であった時間を合計にさらに加えればよい。いくつかの実装形態において、総アクティビティ遅延以外の遅延は、アクティビティ追跡器によって収集されたデータを使って算出され得る。たとえば、クライアント側遅延のみ(たとえば、タスク108、114、116、118、および120の総計持続時間)が追跡されてよく、かつ/またはクライアント側遅延とは別個の総サーバ遅延が判断されてよい。
【0049】
図3は、クライアントコンピューティングデバイスにおいて非同期に実行されるアクティビティのそれぞれの持続時間を判断するための例示的な技法の概念図を示す。
図1のタイミング図は、例示目的のために、単に、単一のアクティビティがクライアントデバイスによって実行されるのを示すが、実際には、クライアントデバイスは、単一のクライアント側スレッド102中でアクティビティ用の様々なタスクを多重化することによって、複数の異なるアクティビティを実行し得る。たとえば、ウェブブラウザ中のJAVASCRIPT(登録商標)エンジンは、ほぼ即座の応答を求めるユーザ対話にもエンジンが応答するときであっても、ウェブページ中のコンテンツの部分に対する自動非同期更新を実施することができる。タスクを非同期に実行することの1つの利益は、タスクは、コーリングタスクが完了されるまで、他のタスクの実施を阻止する必要がないことである。たとえば、
図1において、クライアントスレッド102は、第1のアクティビティが「保留」である間、t
2からt
3までの間隔中に、他のアクティビティ用のタスクを実行する場合がある。当然ながら、タスクの非同期性により、総アクティビティ遅延などのアクティビティプロパティをより判断しにくくなる可能性があり、というのは、他のアクティビティ用のタスクは、目標アクティビティ用のタスクの実行の間のタイムスロット中に実施され得るからである。たとえば、アプリケーション開発者が、追跡される目標アクティビティに対応するタスクにのみ関連付けられた遅延を分離するとともに、他の遅延に対応するタスクのための他の遅延を取り除くことを望む場合がある。したがって、ユーザが、目標アクティビティを呼び出すユーザ対話とアクティビティの完了との間の2.3秒の遅れを経験し得るにもかかわらず、遅延のうちのわずか1.1秒は目標アクティビティ自体に起因する場合があり、それ以外の1.2秒は、目標アクティビティの特定のタスクの間に実行したタスクを有する1つまたは複数の他のアクティビティに起因する場合がある。
【0050】
図3の例では、8つのタスク302〜316が、図の左部分にある垂直時間バーによって示されるように、ある時間期間にわたってコンピューティングデバイスにおけるシングルスレッドのスクリプト記述エンジンによって連続して実行されるものとして示されている。このセットの中で最初に実行されるタスクはタスク302であり、これは、アクティビティ1用の第1のタスクである。いくつかの実装形態ではウェブページまたはアプリケーション中のスクリプト記述型コードとして実装され得る、クライアントデバイスにおけるアクティビティ追跡器は、アクティビティ1がクライアントスレッド中で実行し始めると、アクティビティ1用のタイマーを開始し、タスク302が完了されるとタイマーを一時停止する。
【0051】
タスク302に続いて、非同期タスク304が、異なる、第2のアクティビティ(アクティビティ2)用の第1のタスクとして実行される。アクティビティ追跡器は、アクティビティ2をアクティブとマークし、タスク304が実行し始めると、アクティビティ2用のタイマーを開始する。タスク304が完了されると、アクティビティ追跡器は、アクティビティ2用のタイマー304を一時停止し、タスク304の持続時間をアクティビティログ中に記録する。同様の動作が、アクティビティ1および2用の、およびアクティビティ3用でもある、後で実行されるタスク306〜316の各々に対して実施されてよく、そうすることによって、タスク306〜316の各々の個々の持続時間が取り込まれ、またはアクティビティ1、2、および3の各々用のそれぞれのタイマーに加えられる。
【0052】
所与のアクティビティが終了したとき、所与のアクティビティに関連付けられたタスクの各々についての持続時間は、総アクティビティ遅延を判断するために、合計されるか、またはそうでなければ集計され得る。たとえば、アクティビティ1についての総アクティビティ遅延318は、タスク302、306、310、および316のそれぞれの持続時間に基づき得る。同様に、アクティビティ2についての総アクティビティ遅延320は、タスク304および315のそれぞれの持続時間に基づいてよく、アクティビティ3についての総アクティビティ遅延322は、308および312のそれぞれの持続時間に基づいてよい。総アクティビティ遅延318、320、および322は、いくつかの実装形態において、クライアントコンピュータ上またはサーバ上のアクティビティログ324中に記憶され得る。
【0053】
ここで
図4を参照すると、クライアントコンピューティングデバイス402におけるアクティビティの遅延を追跡するための例示的システム400のブロック図が示されている。いくつかの実装形態において、システム400は、プロセス502および504(
図5Aおよび
図5B)ならびにプロセス600(
図6Aおよび
図6B)を含む、本明細書に記載するプロセスおよびコンピュータ実装方法を実践することができる。システム400は概して、クライアントコンピューティングデバイス402およびコンピュータサーバシステム404を含み、これらは、インターネットなどのネットワーク406を介して通信する。システム400のいくつかの構成要素が、例示として特定の配置で示されているが、他の配置も可能である。たとえば、アクティビティ追跡器410はウェブブラウザ408の構成要素であってよく、またはアクティビティ追跡器410の個々の構成要素が、アクティビティ追跡器410、ブラウザ408、もしくは両方のいずれかによって実現されてよい。
【0054】
クライアントデバイス402は概して、デスクトップコンピュータ、ノートブックコンピュータ、ネットブック、スマートフォン、タブレットコンピューティングデバイス、またはスマートウォッチもしくは他の装着可能デバイスなど、どのタイプのユーザコンピューティングデバイスであってもよい。いくつかの実装形態において、クライアントデバイス402は、コンピュータベースの電源コンセント、台所用品、煙検出器、またはサーモスタットなど、あるタイプの接続された、スマートデバイス(たとえば、モノのインターネットデバイス)であってよい。コンピューティングデバイス402は、ウェブブラウザ408、アクティビティ追跡器410、およびネットワークインターフェース412を含み得る。
【0055】
ネットワークインターフェース412は、1つまたは複数のネットワークを介して他のコンピューティングデバイスと通信することを可能にされる。ネットワーク406は、たとえば、ワイヤードまたはワイヤレスネットワークであってよく、ローカルエリアネットワークまたはワイドエリアネットワークであってよい。いくつかの実装形態において、ネットワークインターフェース412は、インターネットを介してサーバシステム404と通信することを可能にされる。サーバシステム404は、クライアントコンピューティングデバイス402にコンテンツを提供する1つまたは複数のコンピュータを含み得る。サーバシステム404は、クライアントコンピューティングデバイス402にコンテンツをプッシュすることができ、かつ/またはクライアントデバイス402によって始動された要求に応答して、クライアントデバイス402にコンテンツを提供することができる。いくつかの実装形態において、サーバシステム404は、ウェブページおよびウェブベースのアプリケーションをホストするためのウェブサーバ434を含み得る。
【0056】
いくつかの実装形態において、サーバシステム404は、クライアントデバイス402が編集されたコンテンツを実行すると、サーバシステム404がクライアントデバイス402にサービスするコンテンツを、クライアントデバイスにおいてアクティビティ追跡器410を実装するコンピュータコード(たとえば、JAVASCRIPT(登録商標)または別のスクリプト)で編集することができる。たとえば、サーバ434は、ウェブページ用のHTMLファイルにJAVASCRIPT(登録商標)コードを埋め込み、または参照することができる。JAVASCRIPT(登録商標)コードは、ウェブページがウェブブラウザ408によって実行されるとそこから生じ得る1つまたは複数のアクティビティに関して、アクティビティ追跡器410のアクションを実施するように構成されてよい。
【0057】
いくつかの実装形態において、サーバシステム404はアクティビティアナライザ436を含み得る。サーバシステム404上のそのアクティビティアナライザ436は、クライアントデバイス402上のアクティビティアナライザ424と同様の動作を実施することができる。たとえば、アクティビティアナライザ436は、アクティビティログ412中に記録された情報を処理して、アクティビティについての総遅延、またはアクティビティのいくつかの部分についての遅延など、アクティビティの実施特性を判断することができる。いくつかの実装形態において、サーバシステム404からサービスされるコンテンツの1つまたは複数のパラメータは次いで、クライアントデバイスに対して後でサービスされるコンテンツの実施特性を最適化する(たとえば、コンテンツから呼び出され得るアクティビティについてのアクティビティ遅延を削減する)ように調節されてよい。いくつかの実装形態において、クライアントデバイスによって実施される1つまたは複数のアクティビティの遅延または他の実施特性を示す報告が生成され得る。アクティビティアナライザ436はまた、いくつかの実装形態において、遅延の差を明らかにし得る、異なるクライアントデバイスの特性またはクライアントデバイスにおけるアクティビティの他の実施特性を判断するのに、洗練された統計的技法を使うことができる。
【0058】
クライアントデバイス402におけるウェブブラウザ408は、ウェブページを提示すること、スクリプト記述型コード(たとえば、JAVASCRIPT(登録商標))を稼動すること、およびウェブベースのアプリケーションを実行することが可能な標準ウェブブラウジングアプリケーションであってよい。ウェブブラウザ408は、入力ハンドラ426、レンダリングエンジン428、およびスクリプト記述エンジン430を含み得る。入力ハンドラ426は概して、ウェブブラウザ408によって提示されるウェブページまたは他のコンテンツに向けられたユーザ入力を受信するように動作可能である。たとえば、入力ハンドラ426は、タイプされた入力を検出するためのキーボードハンドラ、発話入力を検出するためのボイスハンドラ、タッチスクリーンジェスチャーを検出するためのタッチハンドラ、および/またはマウスもしくはスタイラス入力を検出するためのポインタハンドラを含み得る。入力ハンドラ426は、1つまたは複数のユーザ入力チャネルを監視して、ユーザ入力がウェブブラウザ408に対して受信されたときを検出することができ、そのような入力が検出されたとき、ブラウザ408の他の構成要素に(たとえば、割込みによって)警告すればよい。たとえば、入力ハンドラ426は、ユーザが、タッチ、声、またはそれ以外のやり方で、実施されるべき非同期アクティビティをコールする、ウェブページ中のメニュー項目を選択したことを検出することができる。
【0059】
レンダリングエンジン428は概して、ウェブコードを解析するように、およびウェブページのグラフィカル提示を、ユーザへの提示のために生成するように動作可能である。いくつかの実装形態において、レンダリングエンジン428は、ハイパーテキストマークアップ言語(HTML)および関連付けられたコード(たとえば、カスケーディングスタイルシート(CSS)、JAVASCRIPT(登録商標))を解析して、ウェブページのドキュメントオブジェクトモデル(DOM)表現を組み立て、次いで、DOMに基づいてウェブページのグラフィカル提示を構築する。スクリプト記述エンジン430は概して、ウェブブラウザ408によってロードされたウェブページまたは他のコンテンツ中のスクリプトを翻訳し、実行するように構成される。いくつかの実装形態において、スクリプト記述エンジン430は、スクリプト記述エンジン430によって実行される非同期アクティビティをウェブページが含むことを可能にするJAVASCRIPT(登録商標)エンジンであってよい。
【0060】
クライアントデバイス402におけるアクティビティ追跡器410は概して、クライアントデバイス402において少なくとも一部が実行されるアクティビティの実施を追跡するように構成される。たとえば、アクティビティ追跡器410は、アクティビティ遅延を判断するのに使用可能な、アクティビティ実行についてのデータを収集することができる。いくつかの実装形態において、アクティビティ追跡器410は、アクティビティログ412、アクティビティタイマー416、スケジューラ418、遮断および再コーディングエンジン420、報告エンジン422、ならびにアクティビティアナライザ424を含み得る。アクティビティ追跡器410、スケジューラ418、遮断および再コーディングエンジン420、報告エンジン422、ならびにアクティビティアナライザ424は各々、コンピューティングハードウェアのセットに、本明細書に記載する特定の機能性を実施させる機械可読命令を実行するように特別に構成されるコンピューティングハードウェア(たとえば、1つまたは複数のプロセッサ)のセットとして実装され得る。
【0061】
遮断および再コーディングエンジン420は、ウェブブラウザ408によって提示されているウェブページ中のアクティビティが呼び出されており、実行されようとしていると識別することができる。いくつかの実装形態において、遮断および再コーディングエンジン420は、アクティビティを呼び出すためのコールがウェブブラウザのスクリプト記述エンジン430によって実行される前に、そのようなコールをアクティビティ追跡器410にリダイレクトするソフトウェアによって、コールを遮断してよい。たとえば、ユーザが、非同期アクティビティを呼び出すためにウェブページのグラフィカルインターフェースにおいて制御を選択すると、入力ハンドラ426は、入力を識別し、イベントについてスクリプト記述エンジンに警告することができる。スクリプト記述エンジン430は、アクティビティ用に実施されるべきタスクを識別することができ、タスクの指示を遮断および再コーディングエンジン420に提供することができる。遮断および再コーディングエンジン420は次いで、タスク用のコンピュータコードを、事前作業動作、事後作業動作、または事前作業および事後作業動作の両方を含むように書き換えるか、またはそうでなければ修正してよい。
【0062】
事前作業および事後作業動作は、書き換えられたタスクコードがスクリプト記述エンジン430によって実行されると、スクリプト記述エンジン430に、アクティビティ追跡器410によって定義された動作を実施させることができる。たとえば、事前作業動作は、実行されると、スクリプト記述エンジン430に、タスクが関連付けられたアクティビティの識別子を出力させ、タスクの状況を「アクティブ」としてマークするエントリをアクティビティログ412中で生成させ、アクティビティ用のタイマー416を開始させることができる。事前作業動作が完了された後、実際のタスクが実行されてよい。
【0063】
タスクの終了時に、事後作業動作は、実行されると、スクリプト記述エンジン430に、アクティビティ用にいずれかの追加タスクが実行されるようにスケジュールされているかどうかを判断するために、スケジューラ418中のタスクキューを調べさせることができる。タスクキューが、追加タスクが実施されるようにスケジュールされていないことを示す場合、またはそうでなければアクティビティが完了されたと判断された場合、事後作業動作は、実行されると、タイマーを停止し、アクティビティログ412を更新してタスクの持続時間を記録し、アクティビティの現在の状況を「終了」とマークしてよい。ただし、タスクキューが、少なくとも1つの追加タスクがアクティビティ用にスケジュールされていることを示す場合、またはそうでなければアクティビティが終了でないと判断された場合、事後作業動作は、実行されると、タイマー(後で、次のタスクが実行されると再開され得る)を一時停止し、アクティビティログ412を更新してタスクの持続時間を記録し、アクティビティの現在の状況を「保留」とマークしてよい。いくつかの実装形態において、アクティビティ追跡器は概して、
図1および
図2に関して記載したように、アクティビティ状況をマークするための規則を強制し得る。
【0064】
図5Aおよび
図5Bは、特定のタスクに関連付けられたアクティビティコードに対して遮断および再コーディングエンジン420が実施し得る変換の例を示す。具体的には、
図5Aは、コンピューティングデバイス402上で実行されるべき非同期タスクの再コーディングを示す。タスクに関連付けられたオリジナルコード502aが遮断および再コーディングエンジン420に与えられ、コード504aの修正バージョンが生成され得る。修正コード504aは、事前作業動作、タスク用のオリジナルコード、および事後作業動作を含む。修正コード504aは次いで、いくつかの実装形態ではブラウザ408中のスクリプト記述エンジン430によって実行され得る。
【0065】
図5Bは、サーバシステム404または別のサーバへのリモートプロシージャコールを行うことを伴うタスク用のコードの再コーディングを示す。この例では、オリジナルコード502bはやはり、事前作業および事後作業動作を含む修正コード504bを生成するように再コーディングされる。リモートプロシージャコール用の事前作業動作は、サーバに対してコールが行われた時間を識別するタイマーを開始してよい。タイマーが始動された後、他のどの事前作業動作も完了され、リモートプロシージャコールが行われ、リモートプロシージャコールに対する応答がコンピューティングデバイス402において受信されるまで、他のタスクが実施され得る。リモートプロシージャコールに対する応答を検出すると、事後作業動作を実行するためにコールバックが行われてよく、これはタイマーを停止し、そうすることによって、コンピューティングデバイス402がリモートプロシージャコールを行ったときと、コンピューティングデバイス402がリモートプロシージャコールに対する応答を受信したときとの間のネットワーク遅延が判断され得る。
【0066】
いくつかの実装形態において、アクティビティ追跡器410は、アクティビティの遅延または他の実施特性の監視を可能にする1つまたは複数の追加構成要素を含み得る。アクティビティログ412は、アクティブ、保留、または終了である1つまたは複数のアクティビティについての、コンピューティングデバイス402において記録された情報を含み得る。アクティビティログ412は各アクティビティ用のレコード414a〜nを含むことができ、レコード414a〜nは、それぞれのアクティビティに関連したイベント用のエントリを含むことができる。エントリは、たとえば、一意のアクティビティID、一意のタスクID、アクティビティの現在の状況、アクティビティの累積持続時間、ならびにタスクの実行の始まりおよび終了など、イベントが起きたときを識別するタイムスタンプを示すことができる。報告エンジン422は時々、アクティビティアナライザ436がログ412を処理することができるようにするために、サーバシステム404にアクティビティログ412を送信してよい。いくつかの実装形態において、スケジューラ418は、非同期タスクをスケジュールするために、コンピューティングデバイス402上のタスクキューと対話する。タスクキューは、たとえば、ブラウザ408によってポーリングされる場合があり、スケジューラ418がキュー中で列挙した1つまたは複数のタスクを実行することができる。
【0067】
図6Aは、コンピューティングデバイスにおける非同期アクティビティの遅延を追跡するための例示的プロセス600のフローチャートを示す。いくつかの実装形態において、プロセス600は、
図4に示されるコンピューティングシステム400を含む、本明細書に記載するデバイスおよびシステムによって実践され得る。フローチャートは、特定の順序で起こるプロセス600の様々な段階を示すが、いくつかの段階は、いくつかの実装形態では、並行して、または
図6の例示的プロセス600に示されるものとは異なる順序で実施されてよい。
【0068】
段階602において、コンピューティングデバイスが、アクティビティを呼び出すための入力を受信する。いくつかの実装形態において、入力は、たとえばウェブページにおける、またはデバイス上のアプリケーションのグラフィカルユーザインターフェースにおける制御の選択を通して、ユーザから受信され得る。コンピューティングデバイスは、入力を受信すると直ちに、または指定された遅れの後、入力を、アクティビティを呼び出すための命令として認識し得る。たとえば、入力ハンドラ426は、ユーザ入力を検出し、ウェブブラウザ408および/またはアクティビティ追跡器410の他の構成要素と通信して、入力に応答することができる。いくつかの実装形態では、他のトリガリングイベントが、コンピューティングデバイスにアクティビティの実施を呼び出させる場合がある。たとえば、ウェブページが、非同期更新または他のアクティビティを、あらかじめ定義された時間に、または他の非ユーザ始動イベントを検出すると、自律的に実施し得る。
【0069】
段階604において、ユーザ入力を受信したことに応答して、コンピューティングデバイスは、第1のタスクを、アクティビティ用に実施されるようにスケジュールする。第1のタスク、およびアクティビティ用の他のタスクは、所与のタスクがコールされた後、同じまたは別のアクティビティ用の他のタスクが、所与のタスクについて応答が判断されているとき、コンピューティングデバイスによって実行され得るように、非同期であってよい。したがって、非同期アクティビティは、アクティビティに関連付けられた一連の個々のタスクを個々に実施することによって完了されてよく、ここで各タスクは、アクティビティを完了するのに求められる全体的作業の一部分を表す。各タスクは、アクティビティ用のコンピュータコードのそれぞれの部分によって定義されてよい。
【0070】
いくつかの実装形態において、ブラウザイベントループ用のキューなどのキューの中にタスクの指示を置くことによって、タスクがスケジュールされ得る。ブラウザは、1つまたは複数のアクティビティ用にいずれかの非同期タスクがスケジュールされているかどうかを判断するために、イベントループを定期的にポーリングしてよく、スケジュールされている場合、タスクのうちの1つまたは複数が実施され得る。キューは先入れ先出しキューとして構造化されてよく、またはいくつかのタスクが、より最近スケジュールされたタスクが別のタスクに対して優先順位を飛び越え、ブラウザに、より古いタスクの前により最近のタスクを実施させるように優先度を付けられてよい。
【0071】
所与のタスクの実行中、タスク自体が、アクティビティを完了するために実施されることを求める1つまたは複数の追加非同期タスク(たとえば、サブタスク)を含めることができる。したがって、現在実行中のタスクが、ブラウザまたはアクティビティ追跡器に、アクティビティ用の後続タスクをスケジュールさせることができ、後続タスクはキューに追加される。このように、ユーザ入力を受信すると、アクティビティに関するタスクすべてが、直ちに識別されなくてもよく、そうではなく、第1のタスクが識別されてよく、追加タスクが連鎖されなくなるとともにアクティビティが完了するまで、第1のタスクおよび任意の後続タスクの実行中に後続タスクが連鎖され(スケジュールされ)得る。いくつかの実装形態において、コンピューティングデバイスは、第1のタスクを、後の時間に実施されるようにスケジュールするよりも、アクティビティを呼び出すユーザ入力を検出すると、アクティビティ用の第1のタスクを直ちに実施してよい。
【0072】
段階606において、コンピューティングデバイスは、タスクが実施されようとしていることを識別する。たとえば、ウェブページ中でアクティビティが実施されるべきである場合、ブラウザは、スケジュールされたタスクのキューをポーリングし、実施されるべき次のタスクを識別すればよい。キューからタスクを識別したことに応答して、ブラウザは、タスクが実施されようとしていることをアクティビティ追跡器に通知して、アクティビティ追跡器に、タスクを、実行される前に処理させることができる。
【0073】
段階608において、アクティビティ追跡器中の再コーディングエンジンが、タスクに関連付けられたコンピュータコードを、アクティビティ追跡器がコンピューティングデバイス上でのタスクの実行の1つまたは複数の態様を監視できるようにするコードを含むように修正する。たとえば、実行遅延を判断するために、タスクには、アクティビティログ中で、タスクが付属する特定のアクティビティに関連付けられたエントリに、タスクが実行を始める時間を記録するコードであって、タスクの実行が終了する時間をマークするコードが編集されてよい。コードは、タスクが付属するアクティビティの識別子を出力することもでき、アクティビティの現在の状況を、「アクティブ」、「保留」、および「終了」など、あらかじめ定義された状態の中で変更することができる。いくつかの実装形態において、アクティビティ用のコードは、アクティビティが呼び出されたときに、または各タスクが呼び出されるとオンザフライで、再コーディングされ得る。いくつかの実装形態において、アクティビティ用のコードは、アクティビティが呼び出されたときに、またはそうでなければオンザフライで再コーディングされなくてよく、代わりに、アプリケーションがコンパイルされたときに再コーディングされてよい。たとえば、アクティビティ用のJAVASCRIPTコードがクライアントデバイスにサービスされる前に、サーバシステムは、コードを、アクティビティ追跡器を含むように書き換えることができる。書換えは、アクティビティ用のタスクのすべてまたはいくつかがクライアントデバイスにおいて実行されると、それらの開始および終了時に事前作業および/または事後作業動作を実施させるコードを埋め込むことを含み得る。
【0074】
段階610において、コンピューティングデバイスは、アクティビティ追跡器によって修正されたようにタスクを実行する。たとえば、再コーディングエンジンが、実行されようとしているタスクに関連付けられたコードに事前作業動作、事後作業動作、または両方を挿入した後、タスク用の修正コードは、実行のために、ウェブブラウザ中のスクリプト記述エンジンに与えられてよい。段階618、620、および622を含む、段階610の拡張表現が、
図6Bに示されている。
【0075】
段階618aにおいて、スクリプト記述エンジンは、タスク用の事前作業動作を実行する。いくつかの実装形態において、これは、最初に、タスクを、その適切なアクティビティに関連付けることを伴う。たとえば、タスクの実行中に収集された情報が適切なアクティビティと相関し得るように、修正されたタスクコード中にプログラムされた一意のアクティビティ識別子が、アクティビティログ中に記録されてよい。
【0076】
段階618bにおいて、アクティビティ状況は、「アクティブ」とマークされる。タスクが、所与のアクティビティ用に実行される第1のタスクである場合、アクティビティ状況は最初に、タスクの実行中は「アクティブ」に設定される。タスクが、1つまたは複数の他のタスクがあらかじめ実行された後に実行される後続タスクである場合、現在の状況は、「保留」から「アクティブ」に変更されてよい。
【0077】
段階618cにおいて、たとえば、アクティビティに関連付けられた実際のタスクコードが段階620において実行し始める開始時間を記録することによって、アクティビティに関連付けられたタイマーが開始される。いくつかの実装形態において、段階620において実行されるタスク用のコードは、事前作業および事後作業動作用のコードの間にオリジナル部分を挟むようにコードが修正される前の、タスクに関連付けられたオリジナルコードである。
【0078】
段階622において、コンピューティングデバイスは、タスク用のコンピュータコードの修正部分中で提供された、事後作業動作用のコードを実行する。事後作業動作は、段階622a〜c、またはこれらのうちの1つもしくは複数の、組合せを含み得る。
【0079】
段階622aにおいて、タスク用のコンピュータコードのオリジナル部分が実行を終えた時間を識別するタイムスタンプが、アクティビティログ中に記録される。アクティビティログ中に記憶された開始および停止時間はしたがって、タスクの実行持続時間を示し得る。
【0080】
段階622bにおいて、現在のアクティビティ状況は、「アクティブ」から「保留」または「終了」のいずれかに変更される。状況が「保留」から「終了」に変更されるべきかどうかを判断するために、スケジュールされたタスクのキューの内容が、いずれかの後続タスクがアクティビティ用に実施されるようにスケジュールされるかどうかを判断するために評価されてよい。後続タスクがスケジュールされていない場合、アクティビティ状況は「アクティブ」から「終了」に変更されてよい。スケジュールされた後続タスクがある場合、アクティビティ状況は「アクティブ」から「保留」に変更されてよい。いくつかの実装形態において、タスクの実行の持続時間は、タスクの完了までメモリ中に保持されるタイマーモジュールによって判断されてよく、その場合、タスクの実行の持続時間を識別するデータは、段階622cにおいてアクティビティログ中に記録され得る。
【0081】
再度、
図6Aに示されるプロセス600を続けると、段階612においてコンピューティングデバイスは、段階610において実行されたタスクに関連付けられたアクティビティと同じアクティビティ用に、いずれかの追加タスクがこれから実施されることになっているかどうかを判断する。追加タスクが、アクティビティの実施を完了するためにこれから実行されることになっていると判断したことに応答して、プロセス600は段階604に戻り、(たとえば、スケジュールされたタスクのキューに後続タスクを追加することによって)1つまたは複数の後続タスクの実施がスケジュールされ得る。いくつかの実装形態において、後続タスクは、修正されたタスクコードの実行の前または後で、クライアントデバイス上のアクティビティ追跡器中のスケジューラによって、スケジューリングがタスク自体またはその事前作業もしくは事後作業動作のどの一部にもならないようにスケジュールされ得る。いくつかの実装形態において、
図6Bに関して記載したように、タスクコードのオリジナル部分、事前作業動作、事後作業動作、またはこれらの組合せは、タスク用の修正コードの実行中に後続タスクをスケジュールすることが可能であり得る。
【0082】
さらなるタスクが、アクティビティの実施を完了するためにこれから実行されることになっていないと判断したことに応答して、プロセス600は段階614に進行して、アクティビティに関連付けられた遅延の1つまたは複数の測度を判断する。いくつかの実装形態において、アクティビティを実施したクライアントデバイスは、遅延をローカルに算出することができる。たとえば、アクティビティの総持続時間が、アクティビティに関連付けられた各タスクの個々の持続時間に基づいて算出され得る。1つまたは複数の共通特性を共有するアクティビティ用のタスクのサブセットの総持続時間など、総持続時間のいくつかの部分が算出されてもよい。
【0083】
いくつかの実装形態において、クライアントデバイスは、アクティビティログをサーバにアップロードすることができ(段階616)、サーバは、そこに含まれるデータのより洗練された分析を実施することができる。たとえば、サーバは、多くの異なるクライアントデバイスから、匿名化されたアクティビティログ中にデータを集計して、多数のデバイスにわたるアクティビティの遅延または他の実施特性を判断することができる。その上、アクティビティがその上で実施されたクライアントデバイスのハードウェアおよび/またはソフトウェア環境について取得された情報(たとえば、ユーザエージェントID、ブラウザまたはスクリプト記述エンジンバージョン、コンピューティングデバイスモデル)を使って、サーバは、アクティビティの遅延または他の実施特性におけるパターンを、アクティビティが実行されたハードウェアおよび/またはソフトウェア環境の特徴と相関させ得る。サーバの分析の結果を記述する報告が次いで、生成され、たとえば、クライアントデバイスにおけるアクティビティの実施を向上することを欲するアプリケーション開発者に提示され得る。
【0084】
図7は、本明細書に記載する技法を実装するのに使われ得るコンピューティングデバイス700およびモバイルコンピューティングデバイスの例を示す。コンピューティングデバイス700は、ラップトップ、デスクトップ、ワークステーション、携帯情報端末、サーバ、ブレードサーバ、メインフレーム、および他の適切なコンピュータなど、様々な形のデジタルコンピュータを表すことを意図している。モバイルコンピューティングデバイスは、携帯情報端末、セルラー電話、スマートフォン、および他の同様のコンピューティングデバイスなど、様々な形のモバイルデバイスを表すことを意図している。ここに示される構成要素、それらの接続および関係、ならびにそれらの機能は、例示であることのみを目的としており、本文書において記載および/または請求される本発明の実装形態を限定することは目的としていない。
【0085】
コンピューティングデバイス700は、プロセッサ702、メモリ704、記憶デバイス706、メモリ704および複数の高速拡張ポート710に接続する高速インターフェース708、ならびに低速拡張ポート714および記憶デバイス706に接続する低速インターフェース712を含む。プロセッサ702、メモリ704、記憶デバイス706、高速インターフェース708、高速拡張ポート710、および低速インターフェース712の各々は、様々なバスを使って相互接続され、共通マザーボード上に、または必要に応じて他の様式で搭載され得る。プロセッサ702は、GUIについてのグラフィカル情報を、高速インターフェース708に結合されたディスプレイ716などの外部入力/出力デバイス上に表示するための、メモリ704中または記憶デバイス706上に記憶された命令を含む、コンピューティングデバイス700内での実行のための命令を処理することができる。他の実装形態では、複数のプロセッサおよび/または複数のバスが、必要に応じて、複数のメモリおよびタイプのメモリとともに使われてよい。また、複数のコンピューティングデバイスが接続されてよく、各デバイスは、必要な動作の部分を(たとえば、サーババンク、ブレードサーバのグループ、またはマルチプロセッサシステムとして)提供する。
【0086】
メモリ704は、コンピューティングデバイス700内に情報を記憶する。いくつかの実装形態において、メモリ704は、1つまたは複数の揮発性メモリユニットである。いくつかの実装形態において、メモリ704は、1つまたは複数の不揮発性メモリユニットである。メモリ704は、磁気または光ディスクなど、別の形のコンピュータ可読媒体であってもよい。
【0087】
記憶デバイス706は、コンピューティングデバイス700に大容量記憶を提供することが可能である。いくつかの実装形態において、記憶デバイス706は、フロッピーディスクデバイス、ハードディスクデバイス、光ディスクデバイス、もしくはテープデバイス、フラッシュメモリもしくは他の同様の固体メモリデバイス、または記憶エリアネットワークもしくは他の構成におけるデバイスを含むデバイスのアレイなどのコンピュータ可読媒体であるか、またはそれらを含み得る。コンピュータプログラム製品はまた、実行されると、上述したような1つまたは複数の方法を実施する命令を含み得る。コンピュータプログラム製品はまた、メモリ704、記憶デバイス706、またはプロセッサ702上のメモリなどのコンピュータまたは機械可読媒体で有形に実施され得る。
【0088】
高速インターフェース708は、コンピューティングデバイス700向けの帯域消費型動作を管理し、低速インターフェース712は、より帯域低消費型動作を管理する。機能のそのような割振りは、例示にすぎない。いくつかの実装形態において、高速インターフェース708は、メモリ704、ディスプレイ716(たとえば、グラフィックスプロセッサまたはアクセラレータを通して)に、および様々な拡張カード(図示せず)を受け得る高速拡張ポート710に結合される。本実装形態において、低速インターフェース712は、記憶デバイス706および低速拡張ポート714に結合される。低速拡張ポート714は、様々な通信ポート(たとえば、USB、Bluetooth(登録商標)、イーサネット(登録商標)、ワイヤレスイーサネット)を含み得るが、キーボード、ポインティングデバイス、スキャナなど、1つもしくは複数の入力/出力デバイス、またはスイッチもしくはルータなどのネットワークデバイスに、たとえば、ネットワークアダプタを通して結合され得る。
【0089】
コンピューティングデバイス700は、図に示すように、いくつかの異なる形で実装されてよい。たとえば、標準サーバ720として、またはそのようなサーバのグループで複数回、実装され得る。さらに、ラップトップコンピュータ722などのパーソナルコンピュータで実装され得る。また、ラックサーバシステム724の一部として実装され得る。代替として、コンピューティングデバイス700からの構成要素は、モバイルコンピューティングデバイス750などのモバイルデバイス(図示せず)中の他の構成要素と組み合わせることができる。そのようなデバイスの各々は、コンピューティングデバイス700およびモバイルコンピューティングデバイス750のうちの1つまたは複数を含んでよく、システム全体が、互いと通信する複数のコンピューティングデバイスから作られてよい。
【0090】
モバイルコンピューティングデバイス750は、他の構成要素の中でも、プロセッサ752、メモリ764、ディスプレイ754などの入力/出力デバイス、通信インターフェース766、およびトランシーバ768を含む。モバイルコンピューティングデバイス750には、追加記憶を提供するために、マイクロドライブまたは他のデバイスなどの記憶デバイスが設けられてもよい。プロセッサ752、メモリ764、ディスプレイ754、通信インターフェース766、およびトランシーバ768の各々は、様々なバスを使って相互接続され、構成要素のうちのいくつかは、共通マザーボード上に、または必要に応じて他の方式で搭載されてよい。
【0091】
プロセッサ752は、メモリ764中に記憶された命令を含む、モバイルコンピューティングデバイス750内の命令を実行することができる。プロセッサ752は、別個および複数のアナログおよびデジタルプロセッサを含むチップのチップセットとして実装され得る。プロセッサ752は、たとえば、ユーザインターフェース、モバイルコンピューティングデバイス750によって稼働されるアプリケーション、およびモバイルコンピューティングデバイス750によるワイヤレス通信の制御など、モバイルコンピューティングデバイス750の他の構成要素の調整を可能にし得る。
【0092】
プロセッサ752は、制御インターフェース758およびディスプレイ754に結合されたディスプレイインターフェース756を通してユーザと通信し得る。ディスプレイ754は、たとえば、TFT(薄膜トランジスタ液晶ディスプレイ)ディスプレイもしくはOLED(有機発光ダイオード)ディスプレイ、または他の適切なディスプレイ技術であってよい。ディスプレイインターフェース756は、グラフィカルおよび他の情報をユーザに対して提示するようにディスプレイ754を駆動するための適切な回路機構を備え得る。制御インターフェース758は、コマンドを、ユーザから受信し、プロセッサ752への提出のためにコンバートし得る。さらに、外部インターフェース762が、モバイルコンピューティングデバイス750と他のデバイスの近距離通信を可能にするように、プロセッサ752との通信を提供し得る。外部インターフェース762は、たとえば、いくつかの実装形態ではワイヤード通信を、または他の実装形態ではワイヤレス通信を提供することができ、複数のインターフェースが使われてもよい。
【0093】
メモリ764は、モバイルコンピューティングデバイス750内に情報を記憶する。メモリ764は、1つもしくは複数のコンピュータ可読媒体、1つもしくは複数の揮発性メモリユニット、または1つもしくは複数の不揮発性メモリユニットのうちの1つまたは複数として実装され得る。拡張メモリ774が設けられ、拡張インターフェース772を通してモバイルコンピューティングデバイス750に接続されてもよく、インターフェース772は、たとえば、SIMM(シングルインラインメモリモジュール)カードインターフェースを含み得る。拡張メモリ774は、モバイルコンピューティングデバイス750に余剰記憶空間を提供することができ、またはモバイルコンピューティングデバイス750向けのアプリケーションもしくは他の情報を記憶することもできる。特に、拡張メモリ774は、上述したプロセスを実践し、または補うための命令を含むことができ、セキュアな情報も含むことができる。したがって、たとえば、拡張メモリ774は、モバイルコンピューティングデバイス750用のセキュリティモジュールとして設けられてよく、モバイルコンピューティングデバイス750のセキュアな使用を許可する命令でプログラムされ得る。さらに、ハッキングできないようにSIMMカード上に識別情報を置くなど、付加情報とともに、SIMMカードを介して、セキュアなアプリケーションが提供されてよい。
【0094】
メモリは、たとえば、以下で論じるように、フラッシュメモリおよび/またはNVRAMメモリ(不揮発性ランダムアクセスメモリ)を含み得る。コンピュータプログラム製品は、実行されると、上述したような1つまたは複数の方法を実施する命令を含む。コンピュータプログラム製品は、メモリ764、拡張メモリ774、またはプロセッサ752上のメモリなどのコンピュータまたは機械可読媒体であってよい。いくつかの実装形態において、コンピュータプログラム製品は、たとえば、トランシーバ768または外部インターフェース762を介して、伝搬される信号中で受信され得る。
【0095】
モバイルコンピューティングデバイス750は、必要な場合はデジタル信号処理回路機構を含み得る通信インターフェース766を通してワイヤレスに通信することができる。通信インターフェース766は、中でも特に、GSM(登録商標)ボイスコール(広域移動通信システム)、SMS(ショートメッセージサービス)、EMS(拡張メッセーングサービス)、もしくはMMSメッセージ通信(マルチメディアメッセーングサービス)、CDMA(符号分割多元接続)、TDMA(時分割多元接続)、PDC(パーソナルデジタルセルラー)、WCDMA(登録商標)(広帯域符号分割多元接続)、CDMA2000、またはGPRS(汎用パケット無線サービス)など、様々なモードまたはプロトコルの下で通信を提供し得る。そのような通信は、たとえば、無線周波数を使うトランシーバ768を通して起こり得る。さらに、たとえばBluetooth(登録商標)、WiFi、または他のそのようなトランシーバ(図示せず)を使って、短距離通信が起こり得る。さらに、GPS(全地球測位システム)受信機モジュール770が、追加ナビゲーションおよびロケーション関連ワイヤレスデータをモバイルコンピューティングデバイス750に提供してよく、このデータは、必要に応じて、モバイルコンピューティングデバイス750上で稼動するアプリケーションによって使われ得る。
【0096】
モバイルコンピューティングデバイス750は、オーディオコーデック760を使って可聴的に通信することもでき、コーデック760は、発話情報を、ユーザから受信し、使用可能なデジタル情報にコンバートし得る。オーディオコーデック760は同様に、たとえば、モバイルコンピューティングデバイス750のハンドセット中のスピーカーを通すなどして、ユーザ向けの可聴音を生成し得る。そのような音は、ボイス通話からの音を含んでよく、記録された音(たとえば、ボイスメッセージ、音楽ファイルなど)を含んでよく、モバイルコンピューティングデバイス750上で動作するアプリケーションによって生成された音も含んでよい。
【0097】
モバイルコンピューティングデバイス750は、図に示すように、いくつかの異なる形で実装されてよい。たとえば、セルラー電話780として実装され得る。また、スマートフォン782、携帯情報端末、または他の同様のモバイルデバイスの一部として実装され得る。
【0098】
ここに記載するシステムおよび技法の様々な実装形態は、デジタル電子回路機構、集積回路機構、特別に設計されたASIC(特定用途向け集積回路)、コンピュータハードウェア、ファームウェア、ソフトウェア、および/またはそれらの組合せで実現され得る。これらの様々な実装形態は、少なくとも1つのプログラム可能プロセッサを含むプログラム可能システム上で実行可能および/または翻訳可能な1つまたは複数のコンピュータプログラムでの実装を含んでよく、プログラム可能プロセッサは、記憶システム、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスからデータおよび命令を受信するように、ならびにそれらにデータおよび命令を送信するように結合された、特殊または一般的目的であってよい。
【0099】
これらのコンピュータプログラム(プログラム、ソフトウェア、ソフトウェアアプリケーションまたはコードとしても知られる)は、プログラム可能プロセッサ用の機械命令を含み、高度手続型および/もしくはオブジェクト指向プログラミング言語で、ならびに/またはアセンブリ/機械言語で実装され得る。本明細書で使用する機械可読媒体およびコンピュータ可読媒体という用語は、機械命令を機械可読信号として受信する機械可読媒体を含むプログラム可能プロセッサに、機械命令および/またはデータを提供するのに使われる、どのコンピュータプログラム製品、装置および/またはデバイス(たとえば、磁気ディスク、光ディスク、メモリ、プログラム可能論理デバイス(PLD))も指す。機械可読信号という用語は、プログラム可能プロセッサに機械命令および/またはデータを提供するのに使われるどの信号も指す。
【0100】
ユーザとの対話を可能にするために、ここで記載するシステムおよび技法は、ユーザに情報を表示するための表示デバイス(たとえば、CRT(陰極線管)やLCD(液晶ディスプレイ)モニタ)と、ユーザがコンピュータに入力を与え得るためのキーボードおよびポインティングデバイス(たとえば、マウスやトラックボール)とを有するコンピュータ上で実装することができる。他の種類のデバイスも、ユーザとの対話を可能にするのに使うことができ、たとえば、ユーザに与えられるフィードバックは、どの形の感覚フィードバック(たとえば、視覚フィードバック、聴覚フィードバック、または触覚フィードバック)でもよく、ユーザからの入力は、音響、発話、または触覚入力を含む、どの形でも受信することができる。
【0101】
ここで記載するシステムおよび技法は、バックエンド構成要素を(たとえば、データサーバとして)含む、もしくはミドルウェア構成要素(たとえば、アプリケーションサーバ)を含む、もしくはフロントエンド構成要素(たとえば、ここで記載するシステムおよび技法の実装形態とユーザが対話し得るためのグラフィカルユーザインターフェースもしくはウェブブラウザを有するクライアントコンピュータ)、またはそのようなバックエンド、ミドルウェア、もしくはフロントエンド構成要素のどの組合せも含むコンピューティングシステムで実装することができる。システムの構成要素は、どの形または媒体のデジタルデータ通信(たとえば、通信ネットワーク)によっても相互接続することができる。通信ネットワークの例には、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、およびインターネットがある。
【0102】
コンピューティングシステムは、クライアントおよびサーバを含み得る。クライアントとサーバは概して、互いから離れており、通常、通信ネットワークを通して対話する。クライアントとサーバの関係は、それぞれのコンピュータ上で稼動するとともに互いとのクライアント-サーバ関係を有するコンピュータプログラムにより発生する。
【0103】
本明細書に記載するログ(たとえば、アクティビティログ)は、コンピュータによって可読である物理的メモリ構造に記憶されたデジタルデータとして実装され得る。
【0104】
ここでのシステム、方法、デバイス、および他の技法がユーザについての個人情報(たとえば、コンテキストデータ)を収集するか、または個人情報を利用することができる状況において、ユーザには、プログラムまたは特徴がユーザ情報(たとえば、ユーザのソーシャルネットワーク、ソーシャルアクションもしくはアクティビティ、職業、ユーザの嗜好、またはユーザの現在のロケーションについての情報)を収集するかどうかを制御するための、あるいはユーザにより関連し得るコンテンツをコンテンツサーバから受信するかどうか、および/またはどのようにして受信するかを制御するための機会が与えられ得る。さらに、特定のデータが、記憶され、または使われる前に、個人的に識別可能な情報が削除されるように1つまたは複数のやり方で扱われ得る。たとえば、ユーザのアイデンティティが、ユーザについての個人を識別できる情報が判断され得ないように扱われてよく、またはユーザの地理的ロケーションが、ユーザの特定のロケーションを判断することができないように、ロケーション情報が取得されるように(たとえば、市、郵便番号、または州レベルに)一般化されてよい。したがって、ユーザは、情報がどのように、ユーザについて収集され、コンテンツサーバによって使われるかに対する制御を有することができる。
以上、様々な実装形態を詳しく記載したが、他の修正が可能である。さらに、図面に示される論理フローは、望ましい結果を達成するのに、図示される特定の順序、または順番を求めない。さらに、他のステップが提供されてよく、またはステップが、記載したフローからなくされてよく、他の構成要素が、記載したシステムに追加され、もしくはそこから削除されてよい。したがって、他の実装形態は、以下の特許請求の範囲内である。