(57)【特許請求の範囲】
【請求項１】
方法であって、
コンピューティング・デバイスのスクリプト・エンジンによりスクリプト・コードを受け取るステップであって、前記スクリプト・コードは、前記コンピューティング・デバイスのブラウザー・アプリケーションにより受け取られたマークアップ・ドキュメントに含まれる、または前記マークアップ・ドキュメントにより参照される、ステップと、
ランタイムにおいて、前記スクリプト・エンジンにより前記スクリプト・コードへ適用されるマルチフェーズ・コード準備プロセスの少なくとも１つのフェーズへ適用する作業レベルを決定するステップと、
前記マルチフェーズ・コード準備プロセスの前記フェーズの適用を低減するか、又は延期するか否かを決定するために前記作業レベルを用いるステップと、
を含み、
前記作業レベルは、前記ブラウザー・アプリケーションによる前記スクリプト・コードの少なくとも一部の呼び出しの予測または分析のうちの少なくとも１つに基づき、または前記ブラウザー・アプリケーションによる前記スクリプト・コードの前記少なくとも一部のランタイムにおける使用において観察されたパターンに基づく、
方法。
【請求項２】
請求項１に記載の方法であって、前記決定するステップは、前記スクリプト・コードをパースすることに対して適用する前記作業レベルを決定することを含む、方法。
【請求項３】
請求項１に記載の方法であって、前記決定するステップは、前記スクリプト・コードに基づいてバイトコードを生成することに対して適用する前記作業レベルを決定することを含む、方法。
【請求項４】
請求項１に記載の方法であって、前記決定するステップは、前記スクリプト・コードを解釈することに対して適用する前記作業レベルを決定することを含む、方法。
【請求項５】
請求項１に記載の方法であって、前記決定するステップは、前記スクリプト・コードのメモリ使用を最適化することに対して適用する前記作業レベルを決定することを含む、方法。
【請求項６】
請求項１に記載の方法であって、前記決定するステップは、前記スクリプト・コードのループ・ボディを最適化することに対して適用する前記作業レベルを決定することを含む、方法。
【請求項７】
請求項１に記載の方法であって、前記決定するステップは、前記スクリプト・コードの変数のタイプを最適化することに対して適用する前記作業レベルを決定することを含む、方法。
【請求項８】
請求項１に記載の方法であって、前記決定するステップは、前記スクリプト・コードを最適化するためのジャスト・イン・タイム・コンパイラーの使用に対して適用する前記作業レベルを決定することを含む、方法。
【請求項９】
コンピューティング・デバイスであって、
コンピューター実行可能なコンポーネントを記録したメモリと、
前記メモリに通信可能に結合されたプロセッサであって、該プロセッサは前記コンピューター実行可能なコンポーネントの実行を容易にするよう構成されているプロセッサと
を備え、
前記コンピューター実行可能なコンポーネントは、
スクリプト・コードを含む、または前記スクリプト・コードを参照するマークアップ・ドキュメントを表示するよう構成されるブラウザー・アプリケーションと、
ランタイムにおいて、前記スクリプト・コードの部分を分析するか、またはスクリプト・コードの実行中にその部分の使用を分析し、その部分の性能を、変更された部分の実行により向上させることになる一組の条件を決定するために、前記スクリプト・コードを受け取るよう構成されたスクリプト・エンジン・コンポーネントと
を備え、
遭遇している一組の条件に応じて、その部分の代わりに、変更された部分がブラウザー・アプリケーションにより実行される、コンピューティング・デバイス。
【請求項１０】
請求項９記載のコンピューティング・デバイスであって、前記部分は実行のために前記ブラウザー・アプリケーションにより前記変更された部分と置換される、コンピューティング・デバイス。
【請求項１１】
請求項９記載のコンピューティング・デバイスであって、遭遇している一組の条件に応じて、前記部分は前記ブラウザー・アプリケーションにより実行される、コンピューティング・デバイス。
【請求項１２】
請求項９記載のコンピューティング・デバイスであって、前記スクリプト・コードの前記部分は、前記スクリプト・コードのループ・ボディであり、前記スクリプト・コードの変更された部分は、前記スクリプト・コードの変更されたループ・ボディであるコンピューティング・デバイス。
【請求項１３】
請求項９記載のコンピューティング・デバイスであって、前記スクリプト・コードの前記部分は前記スクリプト・コードの変数のタイプに関連し、前記スクリプト・コードの前記変更された部分は前記変数のタイプに関し最適化されている、コンピューティング・デバイス。
【請求項１４】
コンピューター読取可能命令を含むコンピューター読取可能格納媒体であって、前記コンピューター読取可能命令が実行されることにより、少なくとも２個のプロセッシング・コアを含むコンピューティング・デバイスに、
前記少なくとも２個のプロセッシング・コアのうちの第１プロセッシング・コアにより、スクリプト・コードを含む又はスクリプト・コードを参照するマークアップ・ドキュメントを処理するステップであって、前記第１プロセッシング・コアにより、前記マークアップ・ドキュメントの前記スクリプト・コードにより表される機能を可能にする実行可能コードを生成するステップを含む、ステップと、
前記スクリプト・コードの特性に基づいて、前記少なくとも２個のプロセッシング・コアのうちの第２プロセッシング・コアにより、選択的に、前記実行可能コードとは異なる代替的実行可能コードを生成するステップと、
前記第１プロセッシング・コアによる前記スクリプト・コードの更なる実行のために、前記実行可能コードを、前記代替的実行可能コードと置換するステップと
を含む動作を行わせる、
コンピューター読取可能格納媒体。
【請求項１５】
請求項１４に記載のコンピューター読取可能格納媒体であって、置換する前記ステップは、前記第１プロセッシング・コアによる前記実行可能コードの現在の実行を妨げることなく、前記実行可能コードを前記代替的実行可能コードと取り替えるステップを含む、コンピューター読取可能格納媒体。
【請求項１６】
請求項１４に記載のコンピューター読取可能格納媒体であって、置換する前記ステップは、前記第１プロセッシング・コアによる更なる実行のために前記代替的実行可能コードのアドレスをスワップ・インするステップを含む、コンピューター読取可能格納媒体。
【請求項１７】
請求項１４に記載のコンピューター読取可能格納媒体であって、代替的実行可能コードを生成する前記ステップは、前記スクリプト・コードへ割り当てられた優先度に基づいて前記代替的実行可能コードを生成するステップを含み、前記優先度は１組の優先作業キューで表され、１組の優先作業キューにおいて前記スクリプト・コードが表される、コンピューター読取可能格納媒体。
【請求項１８】
請求項１４に記載のコンピューター読取可能格納媒体であって、第１プロセッシング・コアにより前記実行可能コードを生成する前記ステップは、解釈したコードを生成するステップを含み、第２プロセッシング・コアにより代替的実行可能コードを生成する前記ステップは、ジャスト・イン・タイム・コンパイラーを用いる変更されたコードを生成するステップを含む、コンピューター読取可能格納媒体。
【請求項１９】
請求項１４に記載のコンピューター読取可能格納媒体であって、第２プロセッシング・コアによる、代替的実行可能コードを生成する前記ステップは、前記実行可能コードの実行に適用可能な１組の状況に関して推測または観察することができる、前記実行可能コードの動的変数のタイプに対して変更されるコードを生成するステップを含む、コンピューター読取可能格納媒体。
【請求項２０】
請求項１４に記載のコンピューター読取可能格納媒体であって、前記少なくとも２個のプロセッシング・コアのうちの第３プロセッシング・コアにより、前記マークアップ・ドキュメントと関連しているが前記マークアップ・ドキュメントの表示には既に使用されていないオブジェクトに対するメモリを取り戻すステップ
を更に含むコンピューター読取可能格納媒体。
【発明の詳細な説明】
【背景技術】
【０００１】
[0001]  ウェブ・ブラウジングのエクスペリエンスは、最小の対話機能を用いての情報の平坦なプレゼンテーションから、クライアント側での多くの対話機能を用いてのアプリケーションやアプレットでの富んだエクスペリエンスへ、より一般的には、情報表示と、表示上のオブジェクトとの豊かな対話機能とのハイブリッドへと、発展してきた。従って、本来はクライアントのネイティブ・コードに基づいての情報の平坦なプレゼンテーションのために最初に設計された古いドキュメント・オブジェクト・モデル（ＤＯＭ）を、ＪａｖａＳｃｒｉｐｔ（登録商標）オブジェクトなどのようなスクリプト・コードを滑らかに処理するエクスペリエンスへと進化させる、ということに基づいた様々なチャレンジがある。例えば、ユーザー・エクスペリエンスを速いものにすることは、残されているチャレンジである。
【０００２】
[0002]  例えば、過去のフライ・アウト・メナューでは、ウェブ・エクスペリエンスにおいて、サーバーとの通信に基づく遅延によりちらつきが生じた。スクリプトは、小型プログラムに、追加の支援を得るためにサーバーへ戻ることなくオン・ザ・フライでＤＯＭを変更させることを可能にし、これの例は、Ａｓｙｎｃｈｒｏｎｏｕｓ  ＪａｖａＳｃｒｉｐｔ（登録商標）およびＥｘｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇａｇｅ（Ａｊａｘ）である。開発者や消費者などは、サーバーへ戻ることなくオン・ザ・フライで、より動的なものを望むので、クライアント側でのスクリプト・コードの実行を速くすることが、チャレンジとなっている。
【０００３】
[0003]  ユーザー・エクスペリエンスはＤＯＭのスクリプティングを中心としているので、ＤＯＭを変更することは、対話応答を徐々に低下させていく。スクリプト・エンジンとネイティブ・クラスのＤＯＭとの対話には、任意のオブジェクトをスクリプト可能にする一組のインターフェース、ｉＤｉｓｐａｔｃｈ、ｉＡｃｒｉｖｅＳｃｒｉｐｔなどを含むＯＬＥ自動化を使用していたので、従来は良好ではなかった。更に、今日では、不要であり得る様々なコンポーネント・オブジェクト・モデル（ＣＯＭ）・オブジェクトが乱雑に生成され得るので、性能が低下させられる。
【０００４】
[0004]  クライアント側スクリプティングは、クライアントのブラウザーへ入れられたユーザー入力に対するウェブ・ページの応答を、サーバーとの１以上の往復通信を避けることにより向上させるものであり、クライアント側スクリプティングは、一般に、ウェブ上で、サーバー側（ウェブ・サーバー上）ではなく、クライアント側でユーザーのウェブ・ブラウザーにより実行されるクラスのコンピューター・プログラムを参照する。例として、クライアント側スクリプティングは、ダイナミック・ハイパーテキスト・マークアップ・ランゲージ（ダイナミックＨＴＭＬまたはＤＨＴＭＬ）の一部であり、例えば、ＪａｖａＳｃｒｉｐｔ（登録商標）（クライアント側のＪａｖａＳｃｒｉｐｔ（登録商標））やＶＢＳｃｒｉｐｔなどのようなスクリプト言語で、ウェブ・ページがスクリプト化されることを可能として、ユーザー入力や、時刻などのような環境的条件や、他の変数に応じて、異なるおよび変化するコンテンツを有するようにする。
【０００５】
[0005]  マークアップ・ドキュメント内に埋め込まれるクライアント側スクリプトは、「埋め込みスクリプト」と呼ばれる場合がある。別のファイルに含まれ、そのファイルを用いるドキュメント（１以上）により参照されるスクリプトは、「外部スクリプト」と呼ばれる場合がある。リクエストに応答して、そのようなスクリプト・ファイルは、そのファイルが存在するウェブ・サーバー（１以上）などのようなネットワーク・コンピューティング・デバイスによりユーザーのコンピューターへ送られる。この点に関して、スクリプトを実行して、そのスクリプトからの可視出力を含むマークアップ・ドキュメントを表示するために、ウェブ・ブラウザーは、スクリプト・エンジンと共に働いて、スクリプト・コードのパース（parse）およびコンパイルを行う。クライアント側スクリプトはまた、ボタンのクリックなどのような特定のユーザー・アクションに応じてブラウザーに従わせる命令を含む。多くの場合、それらの命令に対しては、サーバーとの更なる通信を行わずに、従うようにされる。
【０００６】
[0006]  ユーザー・インターフェースの進歩により、傾向として、ウェブ・ブラウザーおよびウェブ・ページは多くのクライアント側スクリプティングを用いる傾向があり、そのようなインターフェースでは、ユーザーは、ウェブ・ページのフレンドリーではない「リフレッシュ」を経験せず、それに代えて、例えば、アニメーション化したグラフィック・インターチェンジ・フォーマット（ＧＩＦ）・ファイルを表すアイコンを見ることになり、これは、ＧＩＦファイルに対してのリクエストが生じたことと、そのページの部分が間もなく更新されることとを表す。ＪａｖａＳｃｒｉｐｔ（登録商標）へ能力を付加することにより、Ａｊａｘは、クライアント・マシンおよびスクリプト化ドキュメントの開発者が、新たなバージョンのページを要求またはレンダリングする必要無しにバックグラウンドで、ウェブ・サーバー（１以上）などのようなネットワーク・コンピューティング・デバイスと通信することを可能にする。
【０００７】
[0007]  一般的に、ユーザー・エクスペリエンスにおける改善へ導くが、これは、クライアント側でのセットアップに長い時間を要するといった他の待機時間をもたらす。例えば、上位１００のウェブのプロパティについての場合の傾向のように、ウェブ・サイトにおいて大量のスクリプティングが用いられている場合や、ネットワーク・データ転送レートが遅い場合や、クライアントでのプロセッシングが制限されている場合などには、スクリプト・エンジンは、マークアップ・ドキュメントのコンテンツのプレゼンテーションのための実行可能コードの全てを渡すために長い時間を要し、それによりユーザー・エクスペリエンスが良好ではなくなる。
【０００８】
[0008]  この点に関し、従来のウェブのブラウジングは、スクリプト・エンジンによる実行可能コードの生成を非効率的にするような形で、発展してきた。なぜなら、スクリプト・エンジンはスクリプト・コードの生成に関しての区別を行わず、それりより、スクリプト・エンジンがスクリプト化したマークアップ・ドキュメントのプレゼンテーションのための作業を完了するまでの間に、望まれない遅延時間が生じたからである。このような望まれない遅延時間は、特に、対話の開始前に全てのウェブ・サイト機能をロードすることをユーザーが必要としない又は待つことを望まない場合に、ユーザー・エクスペリエンスを大きく低下させる。
【０００９】
[0009]  今日のスクリプト・エンジンおよびコード生成の上記の欠点は、単に、従来のシステムの問題の幾つかの問題の概観を示すことを意図したものであり、網羅的であることを意図していない。現状水準での問題、および限定ではない様々な実施形態のうちの幾つかの実施形態の対応する利点は、以下の詳細な説明を検討することにより、更に明らかになる。
【発明の概要】
【００１０】
[0010]  ここで、より詳細な説明および添付の図面において示す、例示であり限定のためではない実施形態の様々な構成の基礎的又は一般的な理解を可能にする手助けとして、簡素化した概要を提供する。なお、この概要は、詳細な又は網羅的な概観であることを意図していない。この概要の唯一の目的は、下記の様々な実施形態のより詳細な説明の前置きとして、例示であり限定ではない幾つかの実施形態と関連する幾つかの概念を、簡素化した形で示すことである。
【００１１】
[0011]  例示的な実施形態では、方法は、コンピューティング・デバイスのスクリプト・エンジンにより、スクリプト・コードを受け取ることと、スクリプト・コードは、コンピューティング・デバイスのブラウザー・アプリケーションにより受け取られるマークアップ・ドキュメントに含まれるか又はマークアップ・ドキュメントにより参照されるものであることと、スクリプト・エンジンによりスクリプト・コードへ適用されるマルチフェーズ・コード準備プロセスの少なくとも１つのフェーズへ適用する作業レベル（level of effort）を決定することとを含む。作業レベルは、ブラウザー・アプリケーションによるスクリプト・コードの一部の呼び出しの予測または分析に基づいて、またはブラウザー・アプリケーションによるスクリプト・コードの一部の過去の使用において観察されるパターンに基づいて、決定することができる。
【００１２】
[0012]  別の例示的な実施形態では、コンピューティング・デバイスは、スクリプト・コードを含む又は参照するマークアップ・ドキュメントを表示するように構成されるブラウザー・アプリケーションと、スクリプト・エンジン・コンポーネントとを含み、スクリプト・エンジン・コンポーネントは、スクリプト・コードを受け取り、スクリプト・コードの部分を分析するか、またはスクリプト・コードの実行中にその部分の使用を分析し、その部分の性能を、変更された部分の実行により向上させることになる一組の条件を決定するものであり、遭遇している一組の条件に応じて、その部分の代わりに、変更された部分がブラウザー・アプリケーションにより実行される。
【００１３】
[0013]  別の例示的な実施形態では、コンピューター読取可能格納媒体は、コンピューター読取可能命令を含み、コンピューター読取可能命令は、実行に応答して、少なくとも２個のプロセッシング・コアを含むコンピューティング・デバイスに動作を行わせ、この動作は、少なくとも２個のプロセッシング・コアのうちの第１プロセッシング・コアにより、スクリプト・コードを含む又は参照するマークアップ・ドキュメントを処理することを含み、この処理は、第１プロセッシング・コアにより、マークアップ・ドキュメントのスクリプト・コードにより表される関数(機能)を可能にする実行可能コードを生成することを含む。動作は、更に、スクリプト・コードの特性に基づいて、少なくとも２個のプロセッシング・コアのうちの第２プロセッシング・コアにより、実行可能コードとは異なる代替的実行可能コードを選択的に生成し、第１プロセッシング・コアによるスクリプト・コードの更なる実行のために、実行可能コードを代替的実行可能コードと取り替えることを含む。
【００１４】
[0014]  代替的実行可能コードを生成することは、スクリプト・サイズの少なくとも１つのループのサイズとスクリプト・コードの全体サイズとの比率の関数、またはスクリプト・コードの演算強度（computational intensity）の測定値、またはスクリプト・コードに基づいて構築されたコール・ツリー（call tree）の分析に基づいて、代替的実行可能コードを選択的に生成することを、含むことができる。
【００１５】
[0015]  他の実施形態、および限定ではない様々な例、シナリオ、および実装については、後に詳細に説明する。
[0016]  限定ではない様々な実施形態は、添付の図面を参照して説明する。
【図面の簡単な説明】
【００１６】
【図１】図１は、マルチフェーズ・コード準備プロセスの１以上のフェーズへ適用する作業レベルを決定するための方法の例を示すフロー図を示す。
【図２】図２は、様々な実施形態に従った、コード準備の間にコードに適用され得る様々なステージの例を示す。
【図３】図３は、様々な実施形態に従った、作業の様々なレベルを適用できる所与のフェーズの複数のサブレベルがあり得ることを示すブロック図である。
【図４】図４は、実施形態における、実行の様々な条件に基づいた、コードに対しての代替的なループ・ボディの生成を示すブロック図である。
【図５】図５は、実施形態における、動的タイピングに基づく動的コードの生成および実行の間のコード・スワッピングの別の限定ではない実施形態を示す。
【図６】図６は、実施形態における、ブラウザー・アプリケーションとスクリプト・エンジンとの間での交換の例を示すフロー図である。
【図７】図７は、実施形態における、解釈したコードを実行するスレッドと最適化したコードを生成するスレッドと対応するデータ構造の組との間のバランスを示すブロック図である。
【図８】図８は、実施形態に従った、コード最適化のための作業アイテムの優先度の再付与を示すブロック図である。
【図９】図９は、実施形態における、置換のための最適化したコードを生成するための、限定ではないプロセスを示すフロー図である。
【図１０】図１０は、様々な実施形態に従った、スクリプト・エンジンとブラウザー・アプリケーションとの間での対話を含む、例示であり限定ではないデバイスを示すブロック図である。
【図１１】図１１は、ここで説明する様々な実施形態を実施することができる、例示であり限定ではないネットワーク化した環境を表すブロック図である。
【図１２】図１２は、ここで説明する様々な実施形態の１以上の構成を実施することができる、例示であり限定ではないコンピューティング・システムまたは動作環境を示すブロック図である。
【発明を実施するための形態】
【００１７】
概観
[0029]  背景において示したように、ＤＨＴＭＬドキュメントなどのようなマークアップ・ドキュメントにおいて、より多くの埋め込みまたは外部のスクリプト・コード、例えば、ＪａｖａＳｃｒｉｐｔ（登録商標）などを含めるという傾向により、ユーザー・エクスペリエンスは良くないものとなる場合があり得、そのようなユーザー・エクスペリエンスでは、従来のスクリプト・エンジンにより適用される従来の動的コード生成プロセスにより、過度の遅延が生じる。
【００１８】
[0030]  この点に関して、動的コード生成では、その特性の幾つかに起因して、幾つかのチャレンジが内在する。例えば、ＪａｖａＳｃｒｉｐｔ（登録商標）などのような動的にタイピングされる言語では、コードが実際に実行されるまで、データの様々なアイテムが呈するタイプを判断することが可能ではないことが多々あり、例えば、動的にタイピングされた変数が整数か浮動かストリングかを、コードが実際に実行されるまで知ることができないことがある。
【００１９】
[0031]  更に、ＪａｖａＳｃｒｉｐｔ（登録商標）がホストされる方法についての広いコンテキストは、別の差を生じさせる。なぜなら、ＣＮＮ．ｃｏｍの番組などのような、ウェブ・ページの一部になるという目標を有するプログラムに関しては、プログラムを同時に実行しているときに、ネイティブ・コードを使用するためにプログラムを動的にコンパイルする要求が、重要になるからである。例えば、上位１００のウェブ・サイトの１つの特徴は、それらが実際に実行するコードよりもかなり多くのコードをロードすることである。この点に関してのチャレンジは、単に高速でコードの実行を試みることではない。幾つかのウェブ・サイトでは、最終的に所与のユーザまたは時間に対して実行するのは、ロードしているコードの約１５％〜２０％のみである。従って、ロードやパースなどのようなプロセスにおける別のボトルネックがあることに起因しており、単にコードを高速で実行することを超えた、別のチャレンジがある。これは、単にＪａｖａ（登録商標）を高速で実行することとは異なるコンテキストである。なぜなら、ロードおよびパースを最小限にして、使用されない又は使用される可能性の低いコードに対して行われるコード準備の量を低減するという異なる目標が含まれるからである。
【００２０】
[0032]  「ホット・スポット」という用語は、実行中のプログラムにおいて多く用いられる関数に関する専門語である。しかし、ここでの実施形態においてここで考慮する問題は、マークアップ・ページを受け取ることからウェブ・ページを呈示することまでのチェーン全体を通じてコード準備を避け、要求された関数を実行すること、例えば、ロードを避ける又は延期する、パースを避ける又は延期する、コンパイルを避ける又は延期する、コード実行の最適化を避ける又は延期することなどにも関係するという点に関して、より広いものである。即ち、主題の開示は、プレゼンテーション・コンテンツにおいて参照された又は受け取られたスクリプト・コード、例えば、限定ではないが、ウェブ・ページ・リクエストに応答してネットワークから受け取ったマークアップ・コンテンツにおいて参照されたスクリプト・コードなどのようなスクリプト・コードの準備を調整して、準備と関連する遅延を低減させてプレゼンテーション・コンテンツをユーザーに対して表示することを可能とすることと関連する。
【００２１】
[0033]  従って、本願において示す様々な実施形態において、コードの準備が低減されるが、これは、例えば、マークアップ・ドキュメントと関連するＵＩを可能な限り速く呈示するために可能な限り少ない量のコードの準備を行うことと、ロード、パース、解釈などを可能な限り延期することとを目標として行われ、この延期では、例えば、きびきびとＵＩを表示することの妨げとなるアイテムのための様々なコードの準備のステージまたはサブステージを、そのコードが実際に要求されるまで又は特定の条件に遭遇するまで、延期する。
【００２２】
[0034]  更に、解釈または実行の間におけるコードの観察を通じて、コードに関して共通の実行パスのケースを決定できる場合、後に詳細を示す様々な実施形態において、ネイティブ・コードの２個のバージョンを維持することができ、その一方は、共通のケースに対して最適化または改善されたものであり、他方のバージョンは、共通ではないケースに対してのみ使用される。これらの概念は、ネイティブ・コードの２個より多くのバージョンと、それらと関連する使用のケースとに対して拡張することができ、その場合において、２個より多くの使用のケースを支持すると効率が良くなり、切り換えのためのコストも大きくはない。
【００２３】
[0035]  後に詳細に示す更に別の実施形態では、準備ができている情報に応答して情報の表示を優先する様式で複数のコアを用いることができ、これは、１つのコアまたは一組のコアで情報を呈示するためのＵＩスレッドを維持し、別のコアまたは一組のコアで上記のコード準備プロセスの最適化および管理をＪＩＴ（ジット）すること又は適用することを行うことにより、行われる。これに関して、作業キューなどのようなデータ構造は、変更されたネイティブ・コードを生成する最適化および管理コアと、ユーザに対してのウェブ・サイトの表示を可能なかぎり速く行っているＵＩコアとの間で情報を共有するために、維持することができる。更に、様々な実施形態において、ＵＩコアには、所与の状況に対して実行するためのコードの代替的ピースが使用可能であるという通知が与えられ、それにより、コードの代替的ピースを、ＵＩコアによる実行に対してスワップ・インすることができるが、その際にＵＩコアにより現在実行中のコードを妨げない。
【００２４】
[0036]  他の実施形態および様々な限定ではない例、シナリオ、および実装を、以下で更に詳細に説明する。
コンテンツの高速プレゼンテーションのための、スクリプト・コードの、延期および最適化されるコード準備
[0037]  先に述べたように、ここで示す様々な実施形態において、コード準備は、低減または延期されるが、これは、例えば、限定ではないが、マークアップ・ドキュメントと関連するＵＩを可能な限り速く呈示するために可能な限り少ない量のコードの準備を行うことと、ロード、パース、解釈、最適化などを可能な限り延期することとを目標として行われ、この延期では、例えば、きびきびとＵＩを呈示することの妨げとなるアイテムのための様々なコード準備のステージまたはサブステージを、後のときまで又は実際に要求されるまで、延期する。
【００２５】
[0038]  図１は、マルチフェーズ・コード準備プロセスの１以上のフェーズへ適用する作業レベル、例えば、作業無し、部分的パースのみ、パース、割り込み、コードを最適化するためのコードの実行の監視など、を決定するための方法の例を示すフロー図を示す。１００において、スクリプト・コードが、コンピューティング・デバイスのスクリプト・エンジンにより受け取られる。スクリプト・コードは、コンピューティング・デバイスのブラウザー・アプリケーションにより受け取られたマークアップ・ドキュメントに含まれているか、またはそのマークアップ・ドキュメントにより参照されている。１００において、スクリプト・エンジンによりスクリプト・コードへ適用されるマルチフェーズ・コード準備プロセスの少なくとも１つのフェーズに適用するための作業レベルが、決定される。１２０において、作業レベルの決定は、マークアップ・ドキュメントの表示と関連してスクリプト・コードの少なくとも一部がブラウザー・アプリケーションによりどれだけ呼び出されるか、についての予測または観察に基づいて作業レベルを決定すること、または、１３０において、マークアップ・ドキュメントの表示と関連してのブラウザー・アプリケーションによるスクリプト・コードの少なくとも一部の過去の使用において観察されたパターンに基づいて、作業レベルを決定すること、または１２０と１３０との双方を行うことを、含むことができる。
【００２６】
[0039]  例えば、図２に示すように、コードを受け取った後の最初のステージとして、そのコードを完全にパースする代わりに、オプションとして、適用する作業を少なくすることができる。例えば、パースを行わないようにすることや、括弧の一致（brace matching）により、単に関数の開始部と終了部とを決定するための部分的パースを行うことができる。例えば、括弧の一致を用いて、スクリプト・エンジンは、コード２００を受け取り、ブラウザー・アプリケーションにより呼び出された関数が見つかるまで、部分的にパースされたコード２０２におけるＮ個の関数、メソッド１、メソッド２、メソッド３、メソッド４・・・、メソッドＮの境界がどこにあるかの決定を行うことができる。例えば、コード２０２のメソッド４が実際に呼び出された場合、スクリプト・エンジンは、単に、メソッド１、メソッド２、およびメソッド３の開始部と終了部とを決定することにより、メソッド４のパースおよび解釈を開始して、パースされ解釈されたメソッド４  ２０４を得ることができる。即ち、パースおよび解釈はコード準備ステージの例であり、作業レベルに関する特定の決定により示されるように、高優先度のコードは多くのリソースを用いて扱い、低優先度のコードは少ないリソースを用いてまたはリソースを用いずに扱うように、このような作業レベルを決定して適用することができる。
【００２７】
[0040]  解釈の間、スクリプト・エンジンはまた、メソッド４の特性を観察して、メソッド４を行うために生成される実行可能コードを改善することができ、その改善は、例えば、メソッド４のメモリ使用の改善や、メソッド４を更に効率的にすることである。例えば、スクリプト・エンジンが、メソッド４内に多く実行されるループがあると判定して、そのループに対して更なる最適化リソースを適用する場合や、スクリプト・エンジンが、コードのピースに対しての特定の変数のタイプが、予想通りにまたは決定論的に、整数であると決定する場合があり、その場合にはより効率的な表現を用いることができる。これに関して、動的プログラムは、ランタイムにおいて異なるタイプを呈する変数を有することができるが、プログラマーは、設計または表現を簡素化するためのパターンを用いるコードを開発する傾向があり、例えば、プログラマーは、一貫して、整数を格納するための変数を用いるか、または、予想通りにまたは決定論的に、ストリングである変数を用いる。これに関して、解釈の間、スクリプト・エンジンは、そのようなパターンを観察し、次に、メソッド４のための実行可能コード２０６の生成／コンパイルのためのコード準備を簡素化することができる。
【００２８】
[0041]  更なる動作として、後に別の実施形態において詳細に説明するが、実行可能コード２０６の挙動も、コードの実行の間に観察することができ、その場合において、典型的なケースにおいてのコードの実行の仕方について更なる観察を行うことができ、それにより、実行可能コード２０６に対して、変更された実行可能コード２０８の形へと更なる変更を行うことを可能にし、次に、将来の実行または将来の実行の幾つかのために、その変更された実行可能コード２０８により実行可能コード２０６を置換することができる。従って、様々な実施形態において、コード準備のマルチフェーズ、例えば、パース、解釈、コンパイル、実行、または何れかのフェーズのサブフェーズのうちの何れかにおいて、これらの活動のそれぞれは様々なコード準備ステップへと分割でき、それらのステップに作業レベルを適用できるので、作業レベルを決定することができ、また、作業レベルが、即時リソースを要求しないものである場合、それと関連するコード準備のフェーズまたはサブフェーズを延期することができ、実質的に、ブラウザー・アプリケーションにより実際に要求されているコード準備へ、またはブラウザー・アプリケーションにより実際に多く要求される可能性又は近い将来に呼び出される可能性の高いコード準備へ、即時リソースを割り当てる。
【００２９】
[0042]  従って、１つの構成では、コード準備の延期は、コード準備の様々なステージおよびサブステージを通して、またはそれらの中で可能なときに行われる。これは、単に、スクリプト・コードからネイティブ・プロセッサー・コードへの変換を延期するだけではなく、ここで説明する実施形態がパース、解釈、バイトコードの生成などを遅延する、即ち、所与のコードのピースに対して適用される関連する作業レベルに基づいて、コード準備の何れかのステージまたはサブフェーズを延期するという点において、より広く適用可能である。
【００３０】
[0043]  上述のように、ここで開示する実施形態は、「ホット・スポット」という用語の典型的な専門的使用よりも広範であり、ホットな関数（例えば、多く実行される関数）を観察し、ランタイムにおいて、コールドな関数よりもホットな関数の準備のために、より多くの作業を行う。これらの実施形態は、コード準備における任意の数Ｎのフェーズを考慮し、作業レベルは、コードの予測された又は観察された使用に基づいて、各フェーズに対して決定することができる。更に、所与のフェーズの複数のサブフェーズもあり得、それらに対しても異なる作業レベルを適用することができる。
【００３１】
[0044]  これは図３のブロック図に示され、図３は、コード準備の３個のステージ３００、３１０、３２０を示し、それらは、ぞれぞれ、サブステージの組３０２、３０４、３０６、組３１２、３１４、３１６、組３２２、３２４、３２６を有する。これに関して、例えば、予測されるコード使用や、観察された実際のコード使用に基づいて、異なる作業レベルを異なるステージ／サブステージへ割り当てることができる。例えば、コード最適化ステージ、例えば、ステージ３００、３１０、３２０のサブステージ・レベルでの最適化技術の例は、ループ不変コード運動分析（loop invariant code motion analysis）、共通自己表現消去（common self expression elimination）、一定伝播（constant propagation）などを含むことができる。
【００３２】
[0045]  図３では、それぞれに３個のサブステージを持つ３個のステージが示されているが、代替の実施形態では、任意の階層関係に従って、または他の任意の又はオプションのコード準備プロセスに従って、任意の数のステージおよびサブステージが考慮され、コード準備プロセスの所与の分岐やノードに対して作業レベルを割り当てることができることに、留意されたい。例えば、限定ではない別の例として、スクリプト・エンジンは、「ウォーム（warm）」コードに関してはその合計１０個のフェーズのうちの３個のフェーズを実行し、「コールド」コードに関してはその１０個のフェーズのうちの１個のみを実行するが、最もホットなコードのサブセットの１０個のフェーズの全てを実行することを、決定する。言い換えると、コード準備プロセスの任意の数のフェーズに対して、作業レベルは、実行中のプログラムによりどれだけコードが使用されているかと、そのコードについておよびコードの使用についての情報とに基づいて、時間の関数としてネイティブ・マシン命令の最も有効なシーケンスを出すところに、調節または調整することができる。
【００３３】
[0046]  従って、コード準備のフェーズまたはサブフェーズの延期に加えて、ここでの実施形態は、時間が経つ間に、所与の組のコードまたは関数の最適化に対してリソースが使用可能になると又はコミットされると、コードの実行についての予測または実際の観察に基づいて、代替コードを生成することを説明する。例として、Ｎｅｗ  Ｙｏｒｋ  Ｔｉｍｅｓ（ニューヨーク・タイムズ）のオンライン・サイトなどのような多く使用されるウェブ・サイトでの平均的なユーザー・エクスペリエンスは約５〜１０分であるが、ユーザの観点からは、スクリプト・エンジンによるニューヨーク・タイムズの多くのコア関数の観察、例えば、ページのレイアウトの方法、スタイル情報の取得、データの取得など、に要する時間は僅かである。これに関しては、新たなページのレイアウトのための数百の方法があるわけではなく、従って、スクリプト・エンジンは、ニューヨーク・タイムズの記事を読むための共通コード・パス（１以上）が何であるかを、比較的速く、完全に又は殆ど観察することができ、その後、その記事を読むため又は更なる記事を読むために代替コードの生成を開始することができる。
【００３４】
[0047]  図４は、実行における異なる条件に基づいた、コードに対する代替のループ・ボディの生成を示すブロック図である。例えば、実行の条件４２０に応じて、ループ・ボディ４１０、ループ・ボディ４１２、またはループ・ボディ４１４が、現在の条件に対するアプリケーションに対して、より速いもの又はより効率的なものである。従って、ループ・ボディ４１０を持つ実行可能コード４００、ループ・ボディ４１２を持つ実行可能コード４０２、およびループ・ボディ４１４を持つ実行可能コード４０４のそれぞれを、予め生成することができ、また、ループ・ボディ４１０、４１２、または４１４を、プレゼンテーション・スレッドによりアドレスされた既存のコードに対してスワップ・イン又はスワップ・アウトして、適切な条件Ｃ１、Ｃ２、またはＣ３のそれぞれに対しての代替のボディを実行することができる。従って、単体で又は組み合わせた結果として条件Ｃ１、Ｃ２、またはＣ３となる任意の予め定めた設定条件Ａ、Ｂ、Ｃなどに対して、コードの実行の効率を改善する作業における結果として、別のループ・ボディをスワップ・インすることができる。この例では、ループ・ボディの実行は代替に関しても最適化されるが、ここで説明する実施形態は、他の最適化方法や、ループ・ボディ以外のコードやコードの一部のスワップ・インやスワップ・アウトにも適用可能である。
【００３５】
[0048]  代替コードの生成の限定ではない更なる例として、コードの使用の予測またはコードの実行の実際の観察の結果として、時間のうちの９５％にわたり、整数が、所与のデータ・アイテムに対するものであると決定できるか、又は所与のデータ・アイテムに対して格納されると決定できる場合には、例えば、ｘ８６プロセッサーで直接に使用するためのネイティブの整数レジスター・フォーマットを用いる最適化されたネイティブ・コードを生成することができ、従って、殆どの場合に生じるそのようなシナリオに対して、最適化されたネイティブ・コードを使用することができる。次に、希なケースが時間のうちの５％において起きる場合、特別のケースに対してスワップ・インできる別のバージョンのネイティブ・コードを用いて、変数を浮動（またはネイティブの整数レジスター・フォーマットよりも効率が低い何らかのもの）としてタイプ入力することができる。
【００３６】
[0049]  動的タイピングに基づく動的なコードの生成および実行の間のコード・スワッピングの別の限定ではない例を示す。これに関して、解釈の間にコード５００の特性を観察することにより、または実行の間のコード５００の観察の結果として、共通コードのパスまたは一組のパスがあると決定できる場合、ネイティブ・コード５０２または共通コード・パス（１以上）に適する他の代替物を生成することができ、次に、共通の度合の低いケースに実際に遭遇したとき又は遭遇する場合に、コード５０４を、その共通の度合の低いケースに関してスワップ・インを行うことができる。最適化されたネイティブ・コードの別バージョンを、ネイティブ・コードの別の使用のケースへ適用するためにスワップ・インすることについてのそのような構成は、以下で更に詳細に説明する。例えば、後に詳細に説明する別の実施形態では、ジャスト・イン・タイム（Just in time）・コンパイラーをコードのピースへ適用するか否かの判断にヒューリスティック（heuristics）が適用され、次に、コードのピースに対しての所与の状況の組の下で、「ジットされた」コードを実行するか、または、単にコードのピースを解釈する。
【００３７】
[0050]  これに関して、図４および図５は、ここで説明される様々な実施形態の別の構成を示す。この構成では、コード生成プロセスは、コード準備のステージおよびサブステージの延期により導かれるだけではなく、解釈または実行の観察を通じてコード自体を考慮する、所有される様々な情報レベルにより通知され、それにより、代替コードが全インスタンスにおけるコードを単に置換できる場合に代替コードを生成するだけではなく、代替的状況に対しての代替コードを生成する（例えば、後に、ブラウザー・アプリケーションによる所与の関数コールに応じて、容易にスワップ・インまたはスワップ・アウトすることができる別のループ・ボディを生成する）。
【００３８】
[0051]  従って、上述のように、コードの挙動は推測または観察することができ、異なる状況、例えば共通ケースと非共通ケース、に対する別のコードの生成へと導き、共通ケースに対して代替のものを実行し、それにより、共通点が最も低いケースの制約無しに、全体的性能を改善する。従って、コード生成のインテリジェントな選択を、コードについての情報により通知することができ、例えば、コードが、予想通りにまたは決定論的に、変数を整数のアレイとして定めるように見えることを通知することができ、その場合、ループの先頭で高速の検査を行うコードを生成して、整数のアレイであることを確認し、そのように想定し、その整数のアレイの構成用に調整されたより効率的なループを用いるようにする。
【００３９】
[0052]  図６は、ブラウザー・アプリケーション６３０とスクリプト・エンジン６４０との間での交換の例を示すフロー図である。ブラウザー・アプリケーション６３０により受け取られたスクリプト・コード６６０は、スクリプト・コード６６０の重要性についての優先度情報無しで、スクリプト・エンジン６４０へ送られる。６００において、スクリプト・エンジン６４０は、スクリプト・コード６６０のループ・ボディ、またはループ・ボディの使用を分析する。６１０において、変更されたループ・ボディを、特定の条件の下での使用のため、例えば、スクリプト・コード６６０の共通使用ケースのための最適化されたコードでの使用のために、生成することができる。６２０において、ループ・ボディを、遭遇している条件の組に応答して、変更されたループ・ボディと置換することができ、また、代替的には、ループ・ボディの先頭において検査を行い、共通使用ケースに遭遇したかを確認し、その結果として、ループ・ボディまたは変更されたループ・ボディを実行することができる。対応する実行可能コード６７０は、実行のためにブラウザー・アプリケーション６３０へ戻される。
【００４０】
[0053]  これに関して、低優先度のコードがパースされ、生成され、最適化されることなどを待つことなく、スクリプト・エンジンの限られたコード生成リソースを、ユーザーに情報を高速で呈示するという目標へ向けるための上記の技術の応用を、下記の限定ではない例を参照して更に説明する。
【００４１】
[0054]  最初に、ＨＴＭＬやＤＴＨＭＬなどのようなマークアップ・ファイルは、スタイル・シートやＪａｖａＳｃｒｉｐｔ（登録商標）ファイルなどを有するブラウザー・アプリケーションにより受け取られる。ブラウザー・アプリケーションは、マークアップ・ファイルの様々なパートを分割し、次に、同時接続を用いて、そのマークアップで定められたＪａｖａＳｃｒｉｐｔ（登録商標）または他のファイルを、様々な異なるピースに対して１つ、ダウンロードする。様々な異なるピースが受け取られると、ブラウザー・アプリケーションは、何れのピースの優先度や重要度の情報も無しで、ＪａｖａＳｃｒｉｐｔ（登録商標）ファイルをＪａｖａＳｃｒｉｐｔ（登録商標）エンジンへ送る。タイミングの問題で、スクリプト・エンジンは、コードの所与のピースを実行する準備を整えることを命令されることもある。しかし、コードの所与のピースを実行する要求は、それをブラウザー・アプリケーションが受信してから１ｍｓ内に起こり得るが、更に、対応するコードを生成するために３０〜４０ｍｓを要し、表示のためにＵＩパスにおいて更に５ｍｓを要するなどの場合、これらの遅延は積み重ねられて、ユーザー・エクスペリエンスに対して影響することになり得る。従って、上記のように、コード準備のステージおよびサブステージの延期や回避にインテリジェンスを適用できれば、好都合である。例えば、人間の視覚的および認識的な理解の問題として、１００ｍｓ以上の遅延は、知覚可能な遅延となる。
【００４２】
[0055]  従って、別の例として、コードの所与のピースに関して、スクリプト・エンジンは、代わりに、パースを開始する前に１〜２ｍｓを使って関数の境界の場所を捜すことができ、スクリプト・エンジンは、コードへ「ｐａｒｓｅ  ｍｅ  ｌａｔｅｒ（これを後にパースせよ）」スタブを挿入し、それを僅か１〜２ｍｓパス後に戻すように渡すことができる。次に、後に、ブラウザー・アプリケーションが、例えば、コードのピースの関数Ｆを呼び出したい場合、コードの全ピースをパースすることをなおも避けつつ、追加の１〜２ｍｓを使ってコードのピースの関数Ｆのパースおよび実行を行うことができる。
【００４３】
[0056]  上記の別の実施形態に従って、例は更に広がり、スクリプト・エンジンは、コードのピースの関数Ｆのパースおよび生成の間に、変数Ｖが、予想通りにまたは決定論的に、整数であるかのように見えることを観察すること、または、Ｆを数回実行した後に、Ｖが、予想通りにまたは決定論的に、整数であることを確認することができ、次に、スクリプト・エンジンは、整数としてのＶの表現に対しての専用化したコードを生成することができる。これに関して、スクリプト・エンジンは、これまでに起きたことを予測的に観察しつつ、要求されていることに対して可能な限り遅くに応答するように努力して、共通ケース（１以上）において生じる高速で更に効率的なコードを生成するように、更に進展させる。
【００４４】
[0057]  本開示の別の構成では、一方での、上記のコード生成の管理および最適化と、他方での、管理および最適化の完了を待たずにユーザーに対してＵＩを迅速に呈示することとの間でのバランス取りを達成するために、複数のコアが用いられる。従って、様々な実施形態において、最適化および管理は、主なＵＩスレッド（マウスのクリックなどのような入力に応答し、関連するコードを即座に実行し、例えば、入力に従ってビューを変更する）とは異なるスレッドで行われるが、他のプロセッシング・コアが、上記のインテリジェントなコード生成の実施形態の何れかに基づいて代替コードを同時に生成することもできる。
【００４５】
[0058]  これに関して、様々な実施形態において、バランス取りプロセスが、マークアップ・ドキュメントのレンダリングを駆動するＵＩコアと、コードの生成を最適化する最適化／管理コアとの間で適用される。１つの実施形態では、最適化／管理コアは、代替ネイティブ・コードを生成する最適化／管理コアと、ユーザーに対してウェブ・サイトをレンダリングしているＵＩコアとの間で情報を共有するために、データ構造を管理する。ＵＩコアは、高速での呈示に焦点を合わせており、従って、一般的に、ユーザーと向かい合うので、１つの実施形態では、ＵＩコアと最適化／管理コアとは、共有される機構を含み、それにより、ＵＩコアは、例えば、ウェブ・ページを表示する活動の中へと代替コードをスワップすることを待たず、その活動の速度を落とさずに、コードの所与のピースの代替的なまたは最適化されたバージョンのものを、それが使用可能になったときに、実行する。これに関して、以下の様々な実施形態において説明するように、上書きコードと代替コードとのコードの実行中における関連する問題を避ける機構を提供することができる。
【００４６】
[0059]  １つの実施形態において説明したように、バランス取りプロセスに対する非対称設計は、最適化／管理コアが、作業キューのメンテナンスの負荷と、コードのスワップ・インおよびスワップ・アウトの調整と、バックグラウンドでのコードの生成とに対処することとを保証し、それにより、ＵＩコアは、待つことがなく、ユーザーに対して情報を表示するタスクを継続することができる。
【００４７】
[0060]  １つの限定ではない実装において、関数毎に実装されるｆｕｎｃｔｉｏｎ＿ｉｎｆｏと呼ばれる関数への呼び出しを行うことまたはその関数をチェックすることにより、ＵＩスレッドは、呼び出しのためのネイティブ・エントリー・ポイントがあるか否かを検査することができ、ある場合、ＵＩスレッドは、そのネイティブ・エントリー・ポイントに対して呼び出しを行う。ネイティブ・エントリー・ポイントは、コード生成の様々なフェーズにおけるコードのピースに対してのスタッブとすることができ、例えば、ネイティブ・エントリー・ポイントは、「ｇｅｎｅｒａｔｅｄ  ｃｏｄｅ（生成されたコード）」スタッブや、コードのパースを行わせることへ導く「ｐａｒｓｅ  ｍｅ（これをパースせよ）」スタッブや、「ｃａｌｌ  ｔｈｅ  ｉｎｔｅｒｐｒｅｔｅｒ  ｔｏ  ｒｕｎ  ｔｈｅ  ｃｏｄｅ（コードを実行するためにインタープリターを呼べ）」スタッブであり得る。これに関して、ＵＩスレッドは、スタッブのコンテンツに対してアグノスティック（agnostic）であり、単に、その時そこにあるものを、スタッブ呼び出しに従って、実行する。代替コードを生成できるとき、次の時にＵＩスレッドはコードを無視し、代替コードは、スタッブのチェックにより、古いコードを置換しているであろう。即ち、次のパスにより、ＵＩスレッドは、新たなアドレスを指す「ｇｅｎｅｒａｔｅｄ  ｃｏｄｅ」スタッブを介して代替コードへジャンプする。
【００４８】
[0061]  例えば、コードを、生成されたコードへと漸進的に動かすことの一部として、１つの実施形態において、最初のパスで、重要ではないコードはパースされないが、「ｐａｒｓｅ  ｍｅ」スタッブが挿入され、それにより、次のパスにおいて、またはＵＩスレッドがコードに次に遭遇したときに、コードがパースされる。コードが次に呼び出されたときに、バイトコードが生成され、次に、インタープリターを呼び出してバイトコードを実行することなどが行われる。ＵＩコアはまた、ロックを取らずに作業アイテムを並べる１つの方法であるロック・フリー・キューを用いて作業アイテムを降ろすことができる。これに関して、これらのキューの編成の方法、コードに対していつ何をするかについての優先順位、パースやコンパイルなどのために行う作業の量、およびそれらの理由のヒューリスティックは、後に詳細に説明する。従って、ユーザーの知識無しで、バックグラウンドにおいて大量の作業が行われており、それは、共通のウェブ・ページおよびアプリケーション・シナリオを認識し、バックグラウンド・コア（最適化／管理コア）のリソースを、それらが最も効率的に作用するところへ向ける。
【００４９】
[0062]  図７は、第１のコア又は一組のコアにより処理されるＵＩスレッド７５０と、第２のコア又は別の一組のコアにより処理されるＪＩＴスレッド７６０とが、インタープリターにより解釈された解釈済みコード７７０をいつ実行するか、またはコードをいつ「ジット」して（コードにＪＩＴコンパイラーを通過させる）、そのジットしたコード７８０を実行するかに関しての、上記のバランス取りを達成する実装の例を示す。
【００５０】
[0063]  上記で示唆したように、サンク（thunk）などのような、スタッブの使用の例として、この場合、最初に、各サンクにヌル（NULL）値を割り当てることがてき、値がヌルである場合、ＵＩスレッド７５０は、解釈済みコード７７０を使用することができるが、フィールドがヌルではない場合（即ち、ジットされたコードを指すアドレスがある場合）、ＵＩスレッド７００は、代わりに、ジットされたコード７８０を用いる。その間に、最適化／管理コアは、リソースと時間とが許す限り更に多くのコードをジットすることを試み続け、それにより、最終的に、すべての作業が完了されるが、その間に、ユーザーは、たとえ全てのコードに対してロード、パース、コンパイル、ジッタなどがまだなされていなくとも、可能な限り速くウェブ・ページを経験する。
【００５１】
[0064]  この例の限定ではない詳細を更に説明すると、そのような環境においてコードを実行するための２つの方法があり、それらは、コードをインタープリターを介して実行すること（一般的には速い）、またはコードをジットすること（ジッター（jitter）と呼ばれるジャスト・イン・タイム・コンパイラーを介しての実行であり、一般的には遅い）である。コードをジットし、ジッターの完了を待ち、ジットされたコードを実行するよりも、概して、インタープリターを用いての線形的シーケンスのコードの解釈は速い。これに関して、ジッターは、最適化されたコードを形成するために、コードにわたって複数のパスを用いる傾向がある。従って、コードの使用が多くなるであろうと思われる場合、一般に、追加のコード準備時間があるにもかかわらず、ジッターを用いることで性能が向上するが、コードの使用が少ない場合、例えば、一回の場合、一般に、インタープリターを用いてコードを速く実行することで性能が向上する。従って、様々な実施形態において、ジットされたコードと解釈されたコードとの間でのバランスが維持される。
【００５２】
[0065]  最初に、ＵＩスレッド上で、インタープリターはコードの解釈を開始し、ＪＩＴスレッド上で、ジットの対象となる候補が識別される。例えば、ジッティング（jitting）に対して良好に動作を行う関数は、小さい関数であり、コードの殆どはループ（１以上）内にある。従って、それらの関数は、最初に、ラウンド予測ジッティング（round speculative jitting）に従ってジットされ、最上位の候補は、一組のヒューリスティックに基づいて選択される。予測ジッティングでは、呼び出された関数がジットされるのみではなく、幾つかの関数は、呼び出されなくとも、呼び出される見込みがある場合は、ジットされる。そのような関数がジットされると、次に、エントリー・ポイントが、解釈済みコード７７０からジットされたコード７８０へと切り換えられる。
【００５３】
[0066]  これに関して、様々な優先度の複数のキューがバックグラウンド（オプティマイザー／マネージャー）・コアにより維持される。これの例が図７に示され、図７では、ロード・スロット７００、７０２、・・・７０４を持つ最上位の優先度のキューが維持され、ロード・スロット７１０、７１２、・・・７１４を持つ第２レベルの優先度のキュー、ロード・スロット７２０、７２２、・・・７２４を持つ第３レベルの優先度のキュー、・・・、そしてロード・スロット７３０、７３２、・・・７３４を持つ第Ｎレベルの優先度のキューが維持されている。例えば、１つの実施形態では、高優先度から低優先度までの様々な優先度のキューが選択される。最初のパスの間に、コードが受け取られると、そのコードの特性に従って、作業がスロットに割り当てられるが、最初のパスの間に、後に説明する特定の予測基準に適合する場合、予測ジッティングが行われて作業を低優先度のキューへと指定する。予測ジッティングの後、例えば、作業アイテム７１４、７２２、および７３０がジッティングに対する良い候補となり、従って、最上位レベルの候補の作業ロード・スロット７００、７０２、・・・７０４に対して、および予測プロセスの間に選択された候補に対して、ジッティングが行われる。
【００５４】
[0067]  予測ジッティングのラウンドの後、最上位の優先度のものに関して更なるジッティングが開始され、他の残りのアイテムは、優先度が以下のようにパーコレートして上げられる。これに関して、図８に示すように、第３の優先度のコードにおけるコード作業アイテム７２４に関しては、コードが実行される毎に、それは、解釈済みコード７７０が呼び出される毎に優先度のレベルが上げられる。従って、最初のパスの後、解釈済みコード７７０が使用される都度、その優先度は、それを最上位の優先度にするまで上げられていく。１つの実装では、作業アイテム７１０で示されている第２の優先度のコードが最上位の優先度になると、それは、他の全ての作業の前へと移動し、ジッターは、次の機会に、そのパスをそのようなコードにわたって開始する。
【００５５】
[0068]  結果として、コードが、多く使用されるものであるが、初期の優先度が低く、予測ラウンドで見逃される場合には、パーコレートして上げられ、即座に最適化される。コードが、多く呼び出されないものである場合には、それほど速く最適化されない。最上位の優先度のアイテムが全てジットされると、ジッターは、第２の優先度のアイテムの最適化および後続のアイテムの最適化を開始することができ、全てのアイテムを消費するまで、ＵＩスレッドは、その間に速度を落とすことなく、最上の最適コードを実行する。
【００５６】
[0069]  スクリプト・アイテムに対するコードの生成への優先度の付与の方法についてのヒューリスティックに関しては、１つのヒューリスティックは、コードがどれだけルーピー（loopy）であるか、であり、これは、ループである全てを除いたコード・サイズの測定値、即ち、全体のコード・サイズのどれだけかループであるかに対しての全体のコード・サイズの比率、またはその逆の、コード・サイズに対するループの比率である。従って、関数の殆どがループである場合には、ループの少ない関数よりも、最適化に関して優先度が高くなるが、コードの殆どはループではない。
【００５７】
[0070]  更に、重い数学演算を行っているコードは、ジットされることにより、ジットされないコードよりも多くの恩恵を受ける。最適化は、多くの数学処理を行うコードに対して良好に働く。なぜなら、プロセッサーのネイティブのレジスターを利用できるからであり、これらは、別のメモリの分離したメモリ構造を設定するコードと比較すると、非常に速い。
【００５８】
[0071]  限定ではない別の実施形態では、実行するスクリプトのコール・ツリーが構築され、これは優先順位を知らせる手助けとなる。これに関して、コール・ツリーは、ホットになるであろう関数を予想する手助けとなる。例えば、コードの第１のピースが、予想通りにまたは決定論的に、コードの第２のピースの前に実行されると示された場合、第２のピースよりも第１のピースを優先することは、理にかなっている。また、例えば、ｉｆステートメントの無いグローバル関数がある場合、そのようなコードを実行する機会が大いに見込め、その場合、高優先度となる。仮説的な例を、関数Ｆｏｏを含むコードのビットとする。
【００５９】
[0072]  
Ｆｏｏ
｛
Ｂａｒ；
Ｉｆ  Ｘ，ｔｈｅｎ  Ｙ
｝
[0073]  この場合、Ｆｏｏが呼び出された場合にＢａｒが呼び出されることが、明らかである。なぜなら、Ｘではない場合には、Ｙは呼び出されず、従って、最適化に関してのＢａｒの優先度はＹよりも高い。これらのヒューリスティックを入力として用い、相対的な優先度を形成する多くの方法がある。１つの方法は、コードの所与のピースが、選択されたヒューリスティックの組とどれだけ整合するかに応じて０から１００の優先度値を割り当て、ほぼ均等に複数のキューへと分割することである。
【００６０】
[0074]  上記のように、ジットされた実行可能コードが使用可能になると、そのジットされた実行可能コードが、インタープリター・コード・サンクへ挿入される。インタープリター・コード・サンクがまだ近くにある場合、コード生成が行われたか又は行われているかを判定するための検査を行い、まだである場合、作業アイテムの優先度が上げられる。それがジットされていた場合、サンクは、ジットされたアドレスと置換される。言い換えると、サンクは、ジットされたコードが使用可能になるまで、解釈済みコードを用いるケースを識別する手助けのために存在し、その後、サンクは、消滅するか又は新たなメモリ位置と置換され、それにより、コードは、別のメモリ位置へジャンプしてジットされたコードを実行するように、例えば、ＵＩスレッドを新たなコードへ送る又はジャンプさせるように、動作する。１つの実施形態では、作業アイテムを最上位の優先度のキューの前方へと移動させるときに短いロックを用いて、競合を避けることができるが、これはリストにおけるアイテムの単なる位置変更であるので、非常に速く、ロック時間は最小である。
【００６１】
[0075]  上記のように、インタープリターに対して１個、そしてジッターに対して１個のコアが使用されるが、追加の実施形態では、インタープリターに対して１個、高速のジッター（完全というほどではない）に対して１個、低速のジッター（完全）に対して１個のように、３個以上のコアを用いることがてきる。このように、幾らかの完全ではない最適化の恩恵を受ける特定のアイテムに関して、そのようなアイテムは、中間段階として改善される。
【００６２】
[0076]  更に、追加のコアを用いて、何れのオブジェクトによってもウェブ・サイトの表示と関連して既に使用も参照もされていない、全てのオブジェクトに対する全てのガベージ・コレクション（garbage collection）を行うことがてき、それにより、他のコアで行われている重要な作業を妨げないようにする。
【００６３】
[0077]  図９は、実施形態における置換のために最適化したコードを生成するための、限定ではないプロセスを示すフロー図である。９００において、第１プロセッシング・コアを用いて、スクリプト・コードを含む又は参照するマークアップ・ドキュメントが表示され、実行可能コードが生成され、これが、マークアップ・ドキュメントのスクリプト・コードにより表される機能を可能にする。９１０において、第２プロセッシング・コアを用いて、スクリプト・コードの特性に基づいて、実行可能コードとは異なる代替の実行可能コードを選択的に生成する。９２０において、第２プロセッシング・コアを用いて、実行可能コードを、第１プロセッシング・コアによるスクリプト・コードの更なる実行のために、代替の実行可能コードと置換する。オプションとして、９３０において、第３プロセッシング・コアが、ガベージ・コレクションのプロセスを行うことができ、それにより、マークアップ・ドキュメントと関連しているがマークアップ・ドキュメントまたはその機能のためにもはや使用されていないオブジェクトに対するメモリを、取り戻す。
【００６４】
[0078]  図１０は、様々な実施形態に従った、スクリプト・エンジン１０４０とブラウザー・アプリケーション１０３０との間での対話を含む、例示であり限定ではないデバイス１０００のブロック図である。示されているように、スクリプト・コード１０３２を含むマークアップ・ドキュメント１０３４は、ブラウザー・アプリケーション１０３０によに受け取られ、ブラウザー・アプリケーション１０３０は、次に、スクリプト・コード１０６０を、ここでの１以上の実施形態において説明するように、インテリジェントなコード生成のためにスクリプト・エンジン１０４０へ送る。これに関して、様々な中間データ構造１０５０が維持され、それにより、スクリプト・コード１０６０の所与のピースに対するコード生成の様々なステージの最適化に対して優先度が割り当てられる。これらの構造は、メモリ１０１０に維持することができ、また、適切な場合にはキャッシュ・メモリ１０１５に記憶することができる。上述のように、様々な実施形態において、複数のプロセッサー・コア１０２０が、上記の１以上の実施形態において説明したようにそれらの作業の区分に従って、また、別のコアを用いてユーザー・エクスペリエンスを優先させるために、実行を行う。スクリプト・エンジン１０４０は、ここで説明する様々な実施形態に従って、最後に、最適化の様々なレベルで、または完了のときに、実行可能コード１０７０をブラウザー・アプリケーションへ戻すように渡す。その間に、主なコードは、スクリプト・エンジン１０４０が全ての作業アイテムに対する作業を完了するのを待たずに、そのタスクを終了するとすぐに、マークアップ・ドキュメント１０４４のレンダリングの処理を行い、実行可能コード１０７０の出力は、マークアップ・ドキュメント１０４４の出力１０４２として表されている。
【００６５】
[0079]  様々な実施形態において、インテリジェントなコンパイル技術およびヒューリスティックが可能とされ、それらは、例えば、クライアントとの対話が多い範囲のような特定のウェブ・ページの「ホット・スポット」に対するコードの生成の速度を上げるために、個別のコアを用いることがてきる。ヒューリスティックは、そのウェブに対してカスタム化され、例えば、コード生成の選択についての案内を行うために、データ構造のウェブ・キャッシュを用いること、例えば、所与のウェブ・ページが使用された最後の時についての情報をキャッシュに記憶することができ、その結果として、識別されたホット・スポットに対するコードを速い速度で作ることができる。このように、時間の経過につれて、同じウェブ・サイトが呼び出されることが多くなる傾向があるので、ウェブ・サイトの解釈は、キャッシュに保持される積み重ねた構造を参照して、時間の経過とともに改善される。
【００６６】
[0080]  幾つかのパフォーマンスの結果は、上記の様々な実施形態および技術が、ここで説明する様々な実施形態を適用しない以前のウェブ・ページの負荷および対話に対して、４０ないし１５０倍の速度の向上に寄与することを示している。
【００６７】
例示的なネットワーク化され分散化された環境
[0081]  当業者は、ここで説明する動的コード生成の様々な実施形態を、任意のコンピューターや他のクライアントまたはサーバー・デバイスと関連して実施でき、任意のコンピューターや他のクライアントまたはサーバー・デバイスは、コンピューター・ネットワークの一部として又は分散型コンピューティング環境において配備でき、任意の種類のデータ・ストアと接続できることを、理解することができる。これに関して、ここで説明する様々な実施形態は、任意の数のメモリまたはストレージ・ユニットと、任意の数のストレージ・ユニットにわたって生じる任意の数のアプリケーションおよびプロセスとを有する任意のコンピューター・システムまたは環境において、実施することができる。これは、ネットワーク環境に配備されるサーバー・コンピューターとクライアント・コンピューターとを持つ環境や、リモート・ストレージやローカル・ストレージを有する分散型コンピューティング環境も含むが、これは限定ではない。
【００６８】
[0082]  分散型コンピューティング環境は、コンピューティング・デバイスおよびコンピューティング・システムの間での通信による交換により、コンピューター・リソースおよびサービスを共有できるようにする。これらのリソースおよびサービスは、情報の交換、ファイルなどのようなオブジェクトのためのキャッシュ・ストレージおよびディスク・ストレージを含む。また、これらのリソースおよびサービスは、負荷のバランス取り、リソースの拡張、プロセッシングの特殊化などのための、複数のプロセッシング・ユニットにわたってのプロセッシング・パワーを共有することを含む。分散型コンピューティングは、ネットワークのコネクティビティを利用し、クライアントがそれらの集合的パワーをレバレッジして会社全体に利益をもたらすことを可能とする。これに関して、様々なデバイスは、アプリケーションやオブジェクトやリソースを有することができ、それらは、本開示の様々な実施形態に関して説明した動的コード生成のための機構に参加することができる。
【００６９】
[0083]  図１１は、例示的なネットワーク型または分散型のコンピューティング環境の概略的な図を提供する。分散型コンピューティング環境は、コンピューティング・オブジェクト１１１０、１１１２などと、コンピューティング・オブジェクトまたはデバイス１１２０、１１２２、１１２４、１１２６、１１２８などとを含み、これらは、プログラム、メソッド、データ・ストア、プログラマブル・ロジックなどを含むことができ、アプリケーション１１３０、１１３２、１１３４、１１３８およびデータ・ストア（１以上）１１４０として表されている。コンピューティング・オブジェクト１１１０、１１１２などと、コンピューティング・オブジェクトまたはデバイス１１２０、１１２２、１１２４、１１２６、１１２８などとは、様々なデバイス、例えば、パーソナル・デジタル・アシスタント（ＰＤＡ）、オーディオ／ビデオ・デバイス、モバイル・フォン、ＭＰ３プレーヤー、パーソナル・コンピューター、ラップトップなどを含み得ることを、理解することができる。
【００７０】
[0084]  コンピューティング・オブジェクト１１１０、１１１２などと、コンピューティング・オブジェクトまたはデバイス１１２０、１１２２、１１２４、１１２６、１１２８などとのそれぞれは、通信ネットワーク１１４２を用いて、直接的または間接的に、コンピューティング・オブジェクト１１１０、１１１２などと、コンピューティング・オブジェクトまたはデバイス１１２０、１１２２、１１２４、１１２６、１１２８などとのうちの他の１以上のものと通信することができる。通信ネットワーク１１４２は、図１１では単一のエレメントとして示されているが、図１１のシステムへサービスを提供する他のコンピューティング・オブジェクトおよびコンピューティング・デバイスを含むものであり得、かつ／または複数の相互接続されたネットワークを表すもので有り得るが、それらは図に示していない。また、コンピューティング・オブジェクト１１１０、１１１２など、またはコンピューティング・オブジェクトまたはデバイス１１２０、１１２２、１１２４、１１２６、１１２８などのそれぞれは、アプリケーション１１３０、１１３２、１１３４、１１３６、１１３８などのようなアプリケーションを含むことができ、アプリケーションは、本開示の様々な実施形態に従って提供される動的コード生成のための技術との通信やインプリメンテーションに適切なＡＰＩ、または他のオブジェクト、ソフトウェア、ファームウェア、および／またはハードウェアを使用し得る。
【００７１】
[0085]  分散型コンピューティング環境をサポートする様々なシステム、コンポーネント、およびネットワーク構成がある。例えば、複数のコンピューティング・システムは、有線またはワイヤレスのシステムにより、ローカル・ネットワークや広く分散されたネットワークにより、共に接続することができる。現在、多くのネットワークはインターネットと接続されており、インターネットは、広く分散したコンピューティングに対するインフラストラクチャーを提供するものであり、かつ多くの異なるネットワークを含む。なお、任意のネットワーク・インフラストラクチャーを、様々な実施形態において説明した動的コード生成のためのシステムに対して入射するようにされる例示的な通信に、用いることができる。
【００７２】
[0086]  即ち、ネットワーク・トポロジーのホストおよびネットワーク・インフラストラクチャー、例えば、クライアント／サーバーや、ピア・ツー・ピアや、ハイブリッドのアーキテクチャーを、用いることができる。「クライアント」は、１つのクラスまたはグループのメンバーであり、この１つのクラスまたはグループのメンバーは、それと関連していない別のクラスまたはグループのサービスを用いる。クライアントは、プロセス、即ち、概略的には１組の命令またはタスクとすることができ、別のプログラムまたはプロセスにより提供されるサービスを要求する。クライアントのプロセスは、要求したサービスを用いるが、他のプログラムやサービス自体の作業の詳細について「知る」必要は無い。
【００７３】
[0087]  クライアント／サーバーのアーキテクチャー、特にネットワーク型のシステムでは、クライアントは、通常はコンピューターであり、このコンピューターは、例えばサーバーである別のコンピューターにより提供される共有ネットワーク・リソースへ、アクセスする。図１１では、限定ではない例として、コンピューティング・オブジェクトまたはデバイス１１２０、１１２２、１１２４、１１２６、１１２８などを、クライアントと考えることができ、コンピューティング・オブジェクト１１１０、１１１２などを、サーバーと考えることができ、その場合、サーバーとして動作するコンピューティング・オブジェクト１１１０、１１１２などはデータ・サービスを提供し、そのデータ・サービスは、例えば、クライアントであるコンピューティング・オブジェクトまたはデバイス１１２０、１１２２、１１２４、１１２６、１１２８などからデータを受け取ること、データを格納すること、データを処理すること、データをクライアントであるコンピューティング・オブジェクトまたはデバイス１１２０、１１２２、１１２４、１１２６、１１２８などへ送ることなどである。なお、何れのコンピューターも、状況に応じて、クライアント、サーバー、またはそれら双方と考えることができる。
【００７４】
[0088]  サーバーは、典型的にはリモート・コンピューター・システムであり、リモートまたはローカルのネットワーク、例えば、インターネットやワイヤレス・ネットワーク・インフラストラクチャーを通じて、アクセス可能である。クライアントのプロセスは、第１のコンピューター・システムでアクティブにすることができ、サーバーのプロセスは、第２のコンピューター・システムでアクティブにすることができ、互いに通信媒体を介して通信し、それにより、分散型の機能を提供し、且つ複数のクライアントがサーバーの情報収集能力の利点を用いることを可能にする。ここで説明した技術に従って用いられる何れのソフトウェア・オブジェクトも、スタンドアローンとして、または複数のコンピューティング・デバイスまたはオブジェクトにわたって分散して、提供することができる。
【００７５】
[0089]  通信ネットワーク１１４２またはバスがインターネットであるネットワーク環境では、例えば、コンピューティング・オブジェクト１１１０、１１１２などをウェブ・サーバーとすることができ、そのウェブ・サーバーと、他のコンピューティング・オブジェクトまたはデバイス１１２０、１１２２、１１２４、１１２６、１１２８などとが、多数の既知のプロトコルのうちの何れか、例えば、ハイパーテキスト・トランスファー・プロトコル（ＨＴＴＰ）を介して、通信するようにできる。また、分散型コンピューティング環境の特徴であり得るが、サーバーとして動作するコンピューティング・オブジェクト１１１０、１１１２などは、例えば、コンピューティング・オブジェクトまたはデバイス１１２０、１１２２、１１２４、１１２６、１１２８などのようなクライアントとして働くこともできる。
【００７６】
例示的なコンピューティング・デバイス
[0090]  述べたように、好都合なことに、ここで説明した技術は、コンピューティング・システムにおいて動的コード生成を行うことが望ましい任意のデバイスに、適用することができる。従って、手持ち型、ポータブル、および他のコンピューティング・デバイス、および全ての種類のコンピューティング・オブジェクトを、様々な実施形態と関連して、即ち、デバイスのリソース使用を望まれるように最適化するところにおいて、使用することを考えていることが、理解される。従って、図１２における以下で説明する汎用リモート・コンピューターは、コンピューティング・デバイスの単なる一例である。
【００７７】
[0091]  実施形態は、部分的に、デバイスまたはオブジェクトに対するサービスの開発者による使用のために、オペレーティング・システムを介して実施することができ、かつ／または、ここで説明した様々な実施形態の１以上の機能的特徴を実施するように動作するアプリケーション・ソフトウェア内に含ませることができる。ソフトウェアは、クライアント・ワークステーションやサーバーや他のデバイスなどのような１以上のコンピューターで実行されるプログラム・モジュールなどのような、コンピューター実行可能命令の一般的なコンテキストで説明することができる。コンピューター・システムは、データの通信に使用できる様々な構成およびプロトコルを有し、従って、特定の構成やプロトコルが限定と考慮されないことを、当業者は理解するであろう。
【００７８】
[0092]  従って、図１２は、適切なコンピューティング・システム環境１２００の一例を示すものであり、このコンピューター・システム環境において、ここで説明した実施形態の１つまたは態様を実施することができる。なお、上記で明らかにしたが、このコンピューター・システム環境１２００は、適切なコンピューティング環境の単なる一例であり、使用や機能の範囲に関する限定を示唆することを意図していない。更に、このコンピューター・システム環境１２００は、この例示的なコンピューター・システム環境１２００において示されるコンポーネントの何れか又はコンポーネントの組み合わせの何れかと関連する依存性を有するものとして解釈することを、意図していない。
【００７９】
[0093]  図１２を参照すると、１以上の実施形態を実施するための例示的なリモート・デバイスは、コンピューター１２１０の形態の汎用コンピューティング・デバイスを含む。コンピューター１２１０のコンポーネントは、処理ユニット１２２０、システム・メモリ１２３０、およびシステム・メモリを含む様々なコンポーネントを処理ユニット１２２０と結合するシステム・バス１２２２を含み得るが、これらには限定されない。
【００８０】
[0094]  コンピューター１２１０は、典型的には、様々なコンピューター読取可能媒体を含み、それらは、コンピューター１２１０によりアクセス可能な任意の使用可能な媒体とすることができる。システム・メモリ１２３０は、リード・オンリー・メモリ（ＲＯＭ）および／またはランダム・アクセス・メモリ（ＲＡＭ）などのような揮発性および／または不揮発性のメモリの形態のコンピューター・ストレージ・メモリを含むことができる。限定ではなく例として、システム・メモリ１２３０はまた、オペレーティング・システム、アプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データを含むことができる。更なる例に従うと、コンピューター１２１０は、様々な他の媒体（示していない）を含むことができ、それらは、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュ・メモリ、または他のメモリ技術、ＣＤ−ＲＯＭ、デジタル・バーサタイル・ディスク（ＤＶＤ）、または他の光ディスク・ストレージ、磁気カセット、磁気テープ、磁気ディスク記憶装置、または他の磁気記憶装置、または望まれる情報を格納するために使用できる有形の媒体および／または非一時的な媒体を含むことができるが、これは限定ではない。
【００８１】
[0095]  ユーザーは、入力デバイス１２４０を通じてコンピューター１２１０へコマンドおよび情報を入力することができる。また、モニターまたは他のタイプのディスプレイ・デバイスも、出力インターフェース１２５０などのようなインターフェースを介してシステム・バス１２２２へ接続される。また、このコンピューターは、モニターに加えて、他の周辺出力デバイス、例えば、スピーカーやプリンターを含むことができ、それらも出力インターフェース１２５０を通じて接続することができる。
【００８２】
[0096]  コンピューター１２１０は、リモート・コンピューター１２７０などのような１以上の他のリモート・コンピューターへの論理接続、例えば、ネットワーク・インターフェース１２６０を用いて、ネットワーク型または分散型の環境で動作することができる。リモート・コンピューター１２７０は、パーソナル・コンピューター、サーバー、ルーター、ネットワークＰＣ、ピア・デバイス、または他のコモン・ネットワーク・ノード（common network node）、または他の任意のリモートの媒体の消費または伝送のためのデバイス（remote media consumption or transmission device）であり得、また、上記でコンピューター１２１０と関連して説明したエレメントの何れかまたは全てを含み得る。図１２に示す論理接続は、ローカル・エリア・ネットワーク（ＬＡＮ）やワイド・エリア・ネットワーク（ＷＡＮ）などのようなネットワーク１２７２を含むが、他のネットワーク／バスを含むこともできる。そのようなネットワーク環境は、家庭、オフィス、エンタープライズ・ワイド・ネットワーク、イントラネット、およびインターネットにおいて一般的なものである。
【００８３】
[0097]  上述のように、様々なコンピューティング・デバイスおよびネットワーク・アーキテクチャーと関連させて例示的な実施形態を説明したが、基礎的な概念は、任意のネットワーク・システムおよび任意のコンピューティング・デバイスまたはシステムに、適用することができる。
【００８４】
[0098]  また、同じまたは類似の機能を実施するための複数の手法、例えば、適切なＡＰＩ、ツール・キット、ドライバー・コード、オペレーティング・システム、コントロール、スタンドアローンまたはダウンロード可能なソフトウェア・オブジェクトなどがあり、これらは、アプリケーションおよびサービスが、ここで提供される技術の利点を得ることを可能にする。即ち、ここでの実施形態は、ＡＰＩ（または他のソフトウェア・オブジェクト）の観点から、およびここで説明した１以上の実施形態を実現するソフトウェア・オブジェクトまたはハードウェア・オブジェクトの観点から予期される。即ち、ここで説明した様々な実施形態は、完全にハードウェアの態様、部分的にハードウェアであり部分的にソフトウェアである態様、およびソフトウェアの態様を有することができる。
【００８５】
[0099]  ここでは、「例示」という単語は、例や、事例や、実例を意味するものとして用いている。疑いをなくすためであるが、ここで開示した主題事項は、そのような例により限定されない。更に、ここで「例示」として説明した何れの態様や設計も、他の態様や設計よりも好適または好都合であると必ずしも解釈されるものではなく、また、当業者に知られた等価の例示的な構成および技術を除外することを意味しない。更に、用語「含む（includes）」、「有する（has）」、「包含する（contains）」、および類似の他の単語が使用される範囲において、疑いをなくすためであるが、それらのような用語は、何れの追加のエレメントや他のエレメントも除外しない、開かれた接続させるための語（open transition word）としての用語「含む（comprising）」と同様の様式で、含むことを意図している。
【００８６】
[00100]  上述のように、ここで説明した様々な技術は、ハードウェアまたはソフトウェア、または、適切である場合にはそれらの組み合わせと関連して、実施することができる。ここで使用しているように、用語「コンポーネント」、「システム」、およびそれらと同様のものは、同様に、コンピューター関連エンティティを示すことを意図しており、それは、ハードウェア、ハードウェアとソフトウェアとの組み合わせ、ソフトウェア、または実行中のソフトウェアの何れかである。例えば、コンポーネントは、プロセッサーで実行されるプロセス、プロセッサー、オブジェクト、実行可能ファイル、実行のスレッド、プログラム、および／またはコンピューターであり得るが、これらには限定されない。例として、コンピューターで実行されるアプリケーションとコンピューターとの双方を、１つのコンポーネントとすることができる。１以上のコンポーネントが、１つのプロセスおよび／または実行のスレッドの中に存在することがあり、また、コンポーネントは、１つのコンピューターにローカライズされることも、２以上のコンピューターに分散されることもできる。
【００８７】
[00101]  上記のシステムは、幾つかのコンポーネントの間での対話と関連して説明した。そのようなシステムおよびコンポーネントが、上記のものの様々な置換や組み合わせに従って、それらのコンポーネントまたは指定されたサブコンポーネント、指定されたコンポーネントまたはサブコンポーネントのうちの幾つか、および／または追加のコンポーネントを含むことができることは、理解できる。また、サブコンポーネントは、親コンポーネント内に含まれるもの（階層的）としてではなく、他のコンポーネントと通信するように結合されたコンポーネントとして実施することができる。更に、１以上のコンポーネントを、１つのコンポーネントへと組み合わせて統合された機能を提供できること、また、幾つかの個別のサブコンポーネントへと分割できることに、留意されたい。また、そのようなサブコンポーネントへ通信するように結合する任意の１以上の中間層、例えば管理層（management layer）などを提供することにより、統合した機能を提供できることにも、留意されたい。また、ここで説明した何れのコンポーネントも、ここで特に説明していないが当業者には一般に知られている１以上の他のコンポーネントと、対話することができる。
【００８８】
[00102]  上記で説明した例示的なシステムを考慮すると、説明した主題事項に従って実施され得る方法も、様々な図のフローチャートを参照して理解することができ。説明を簡素にする目的で、方法は一連のブロックで示されて説明されているが、様々な実施形態はブロックの順序により限定されないことが、理解および認識される。なぜなら、幾つかのブロックは、ここで示されて説明された順とは別の順で生じることや、他のブロックと同時に生じることがあるからである。非順次的な、または分岐した流れをフローチャートにより示す場合において、同じまたは類似の結果が得られる様々な別の分岐、フロー経路、およびブロックの順序を実施できることを、理解することができる。更には、ここで説明した方法を実施するために、例示した全てのブロックを必要としない場合もある。
【００８９】
[00103]  ここで説明した様々な実施形態に加えて、対応するエレメント（１以上）の機能から逸脱せずに同じまたは等価の機能を行うために、他の類似の実施形態を使用できることや、説明した実施形態（１以上）に対する変更や付加を行えることも、理解される。更に、複数の処理チップや複数のデバイスが、ここで説明した１以上の機能の性能を共有することができ、同様に、ストレージは、複数のデバイスにわたって作用することができる。従って、本発明は、何れの１つの実施形態によっても限定すべきではなく、特許請求の範囲に従った幅、精神、および範囲で解釈すべきである。
【図１】
0006054397.tif 000002
【図２】
0006054397.tif 000003
【図３】
0006054397.tif 000004
【図４】
0006054397.tif 000005
【図５】
0006054397.tif 000006
【図６】
0006054397.tif 000007
【図７】
0006054397.tif 000008
【図８】
0006054397.tif 000009
【図９】
0006054397.tif 000010
【図１０】
0006054397.tif 000011
【図１１】
0006054397.tif 000012
【図１２】
0006054397.tif 000013