【文献】
杉田 祐也 外1名,「アダプティブな実行時コード最適化」,情報処理学会研究報告,社団法人情報処理学会,1997年 5月21日,第97巻,第45号(97−PRO−13),pp.25−30
(58)【調査した分野】(Int.Cl.,DB名)
請求項1に記載の方法であって、前記決定するステップは、前記スクリプト・コードに基づいてバイトコードを生成することに対して適用する前記作業レベルを決定することを含む、方法。
請求項1に記載の方法であって、前記決定するステップは、前記スクリプト・コードのメモリ使用を最適化することに対して適用する前記作業レベルを決定することを含む、方法。
請求項1に記載の方法であって、前記決定するステップは、前記スクリプト・コードのループ・ボディを最適化することに対して適用する前記作業レベルを決定することを含む、方法。
請求項1に記載の方法であって、前記決定するステップは、前記スクリプト・コードの変数のタイプを最適化することに対して適用する前記作業レベルを決定することを含む、方法。
請求項1に記載の方法であって、前記決定するステップは、前記スクリプト・コードを最適化するためのジャスト・イン・タイム・コンパイラーの使用に対して適用する前記作業レベルを決定することを含む、方法。
請求項9記載のコンピューティング・デバイスであって、前記部分は実行のために前記ブラウザー・アプリケーションにより前記変更された部分と置換される、コンピューティング・デバイス。
請求項9記載のコンピューティング・デバイスであって、遭遇している一組の条件に応じて、前記部分は前記ブラウザー・アプリケーションにより実行される、コンピューティング・デバイス。
請求項9記載のコンピューティング・デバイスであって、前記スクリプト・コードの前記部分は、前記スクリプト・コードのループ・ボディであり、前記スクリプト・コードの変更された部分は、前記スクリプト・コードの変更されたループ・ボディであるコンピューティング・デバイス。
請求項9記載のコンピューティング・デバイスであって、前記スクリプト・コードの前記部分は前記スクリプト・コードの変数のタイプに関連し、前記スクリプト・コードの前記変更された部分は前記変数のタイプに関し最適化されている、コンピューティング・デバイス。
コンピューター読取可能命令を含むコンピューター読取可能格納媒体であって、前記コンピューター読取可能命令が実行されることにより、少なくとも2個のプロセッシング・コアを含むコンピューティング・デバイスに、
前記少なくとも2個のプロセッシング・コアのうちの第1プロセッシング・コアにより、スクリプト・コードを含む又はスクリプト・コードを参照するマークアップ・ドキュメントを処理するステップであって、前記第1プロセッシング・コアにより、前記マークアップ・ドキュメントの前記スクリプト・コードにより表される機能を可能にする実行可能コードを生成するステップを含む、ステップと、
前記スクリプト・コードの特性に基づいて、前記少なくとも2個のプロセッシング・コアのうちの第2プロセッシング・コアにより、選択的に、前記実行可能コードとは異なる代替的実行可能コードを生成するステップと、
前記第1プロセッシング・コアによる前記スクリプト・コードの更なる実行のために、前記実行可能コードを、前記代替的実行可能コードと置換するステップと
を含む動作を行わせる、
コンピューター読取可能格納媒体。
請求項14に記載のコンピューター読取可能格納媒体であって、置換する前記ステップは、前記第1プロセッシング・コアによる前記実行可能コードの現在の実行を妨げることなく、前記実行可能コードを前記代替的実行可能コードと取り替えるステップを含む、コンピューター読取可能格納媒体。
請求項14に記載のコンピューター読取可能格納媒体であって、置換する前記ステップは、前記第1プロセッシング・コアによる更なる実行のために前記代替的実行可能コードのアドレスをスワップ・インするステップを含む、コンピューター読取可能格納媒体。
請求項14に記載のコンピューター読取可能格納媒体であって、代替的実行可能コードを生成する前記ステップは、前記スクリプト・コードへ割り当てられた優先度に基づいて前記代替的実行可能コードを生成するステップを含み、前記優先度は1組の優先作業キューで表され、1組の優先作業キューにおいて前記スクリプト・コードが表される、コンピューター読取可能格納媒体。
請求項14に記載のコンピューター読取可能格納媒体であって、第1プロセッシング・コアにより前記実行可能コードを生成する前記ステップは、解釈したコードを生成するステップを含み、第2プロセッシング・コアにより代替的実行可能コードを生成する前記ステップは、ジャスト・イン・タイム・コンパイラーを用いる変更されたコードを生成するステップを含む、コンピューター読取可能格納媒体。
請求項14に記載のコンピューター読取可能格納媒体であって、第2プロセッシング・コアによる、代替的実行可能コードを生成する前記ステップは、前記実行可能コードの実行に適用可能な1組の状況に関して推測または観察することができる、前記実行可能コードの動的変数のタイプに対して変更されるコードを生成するステップを含む、コンピューター読取可能格納媒体。
請求項14に記載のコンピューター読取可能格納媒体であって、前記少なくとも2個のプロセッシング・コアのうちの第3プロセッシング・コアにより、前記マークアップ・ドキュメントと関連しているが前記マークアップ・ドキュメントの表示には既に使用されていないオブジェクトに対するメモリを取り戻すステップ
を更に含むコンピューター読取可能格納媒体。
【背景技術】
【0001】
[0001] ウェブ・ブラウジングのエクスペリエンスは、最小の対話機能を用いての情報の平坦なプレゼンテーションから、クライアント側での多くの対話機能を用いてのアプリケーションやアプレットでの富んだエクスペリエンスへ、より一般的には、情報表示と、表示上のオブジェクトとの豊かな対話機能とのハイブリッドへと、発展してきた。従って、本来はクライアントのネイティブ・コードに基づいての情報の平坦なプレゼンテーションのために最初に設計された古いドキュメント・オブジェクト・モデル(DOM)を、JavaScript(登録商標)オブジェクトなどのようなスクリプト・コードを滑らかに処理するエクスペリエンスへと進化させる、ということに基づいた様々なチャレンジがある。例えば、ユーザー・エクスペリエンスを速いものにすることは、残されているチャレンジである。
【0002】
[0002] 例えば、過去のフライ・アウト・メナューでは、ウェブ・エクスペリエンスにおいて、サーバーとの通信に基づく遅延によりちらつきが生じた。スクリプトは、小型プログラムに、追加の支援を得るためにサーバーへ戻ることなくオン・ザ・フライでDOMを変更させることを可能にし、これの例は、Asynchronous JavaScript(登録商標)およびExtensible Markup Langage(Ajax)である。開発者や消費者などは、サーバーへ戻ることなくオン・ザ・フライで、より動的なものを望むので、クライアント側でのスクリプト・コードの実行を速くすることが、チャレンジとなっている。
【0003】
[0003] ユーザー・エクスペリエンスはDOMのスクリプティングを中心としているので、DOMを変更することは、対話応答を徐々に低下させていく。スクリプト・エンジンとネイティブ・クラスのDOMとの対話には、任意のオブジェクトをスクリプト可能にする一組のインターフェース、iDispatch、iAcriveScriptなどを含むOLE自動化を使用していたので、従来は良好ではなかった。更に、今日では、不要であり得る様々なコンポーネント・オブジェクト・モデル(COM)・オブジェクトが乱雑に生成され得るので、性能が低下させられる。
【0004】
[0004] クライアント側スクリプティングは、クライアントのブラウザーへ入れられたユーザー入力に対するウェブ・ページの応答を、サーバーとの1以上の往復通信を避けることにより向上させるものであり、クライアント側スクリプティングは、一般に、ウェブ上で、サーバー側(ウェブ・サーバー上)ではなく、クライアント側でユーザーのウェブ・ブラウザーにより実行されるクラスのコンピューター・プログラムを参照する。例として、クライアント側スクリプティングは、ダイナミック・ハイパーテキスト・マークアップ・ランゲージ(ダイナミックHTMLまたはDHTML)の一部であり、例えば、JavaScript(登録商標)(クライアント側のJavaScript(登録商標))やVBScriptなどのようなスクリプト言語で、ウェブ・ページがスクリプト化されることを可能として、ユーザー入力や、時刻などのような環境的条件や、他の変数に応じて、異なるおよび変化するコンテンツを有するようにする。
【0005】
[0005] マークアップ・ドキュメント内に埋め込まれるクライアント側スクリプトは、「埋め込みスクリプト」と呼ばれる場合がある。別のファイルに含まれ、そのファイルを用いるドキュメント(1以上)により参照されるスクリプトは、「外部スクリプト」と呼ばれる場合がある。リクエストに応答して、そのようなスクリプト・ファイルは、そのファイルが存在するウェブ・サーバー(1以上)などのようなネットワーク・コンピューティング・デバイスによりユーザーのコンピューターへ送られる。この点に関して、スクリプトを実行して、そのスクリプトからの可視出力を含むマークアップ・ドキュメントを表示するために、ウェブ・ブラウザーは、スクリプト・エンジンと共に働いて、スクリプト・コードのパース(parse)およびコンパイルを行う。クライアント側スクリプトはまた、ボタンのクリックなどのような特定のユーザー・アクションに応じてブラウザーに従わせる命令を含む。多くの場合、それらの命令に対しては、サーバーとの更なる通信を行わずに、従うようにされる。
【0006】
[0006] ユーザー・インターフェースの進歩により、傾向として、ウェブ・ブラウザーおよびウェブ・ページは多くのクライアント側スクリプティングを用いる傾向があり、そのようなインターフェースでは、ユーザーは、ウェブ・ページのフレンドリーではない「リフレッシュ」を経験せず、それに代えて、例えば、アニメーション化したグラフィック・インターチェンジ・フォーマット(GIF)・ファイルを表すアイコンを見ることになり、これは、GIFファイルに対してのリクエストが生じたことと、そのページの部分が間もなく更新されることとを表す。JavaScript(登録商標)へ能力を付加することにより、Ajaxは、クライアント・マシンおよびスクリプト化ドキュメントの開発者が、新たなバージョンのページを要求またはレンダリングする必要無しにバックグラウンドで、ウェブ・サーバー(1以上)などのようなネットワーク・コンピューティング・デバイスと通信することを可能にする。
【0007】
[0007] 一般的に、ユーザー・エクスペリエンスにおける改善へ導くが、これは、クライアント側でのセットアップに長い時間を要するといった他の待機時間をもたらす。例えば、上位100のウェブのプロパティについての場合の傾向のように、ウェブ・サイトにおいて大量のスクリプティングが用いられている場合や、ネットワーク・データ転送レートが遅い場合や、クライアントでのプロセッシングが制限されている場合などには、スクリプト・エンジンは、マークアップ・ドキュメントのコンテンツのプレゼンテーションのための実行可能コードの全てを渡すために長い時間を要し、それによりユーザー・エクスペリエンスが良好ではなくなる。
【0008】
[0008] この点に関し、従来のウェブのブラウジングは、スクリプト・エンジンによる実行可能コードの生成を非効率的にするような形で、発展してきた。なぜなら、スクリプト・エンジンはスクリプト・コードの生成に関しての区別を行わず、それりより、スクリプト・エンジンがスクリプト化したマークアップ・ドキュメントのプレゼンテーションのための作業を完了するまでの間に、望まれない遅延時間が生じたからである。このような望まれない遅延時間は、特に、対話の開始前に全てのウェブ・サイト機能をロードすることをユーザーが必要としない又は待つことを望まない場合に、ユーザー・エクスペリエンスを大きく低下させる。
【0009】
[0009] 今日のスクリプト・エンジンおよびコード生成の上記の欠点は、単に、従来のシステムの問題の幾つかの問題の概観を示すことを意図したものであり、網羅的であることを意図していない。現状水準での問題、および限定ではない様々な実施形態のうちの幾つかの実施形態の対応する利点は、以下の詳細な説明を検討することにより、更に明らかになる。
【発明を実施するための形態】
【0017】
概観
[0029] 背景において示したように、DHTMLドキュメントなどのようなマークアップ・ドキュメントにおいて、より多くの埋め込みまたは外部のスクリプト・コード、例えば、JavaScript(登録商標)などを含めるという傾向により、ユーザー・エクスペリエンスは良くないものとなる場合があり得、そのようなユーザー・エクスペリエンスでは、従来のスクリプト・エンジンにより適用される従来の動的コード生成プロセスにより、過度の遅延が生じる。
【0018】
[0030] この点に関して、動的コード生成では、その特性の幾つかに起因して、幾つかのチャレンジが内在する。例えば、JavaScript(登録商標)などのような動的にタイピングされる言語では、コードが実際に実行されるまで、データの様々なアイテムが呈するタイプを判断することが可能ではないことが多々あり、例えば、動的にタイピングされた変数が整数か浮動かストリングかを、コードが実際に実行されるまで知ることができないことがある。
【0019】
[0031] 更に、JavaScript(登録商標)がホストされる方法についての広いコンテキストは、別の差を生じさせる。なぜなら、CNN.comの番組などのような、ウェブ・ページの一部になるという目標を有するプログラムに関しては、プログラムを同時に実行しているときに、ネイティブ・コードを使用するためにプログラムを動的にコンパイルする要求が、重要になるからである。例えば、上位100のウェブ・サイトの1つの特徴は、それらが実際に実行するコードよりもかなり多くのコードをロードすることである。この点に関してのチャレンジは、単に高速でコードの実行を試みることではない。幾つかのウェブ・サイトでは、最終的に所与のユーザまたは時間に対して実行するのは、ロードしているコードの約15%〜20%のみである。従って、ロードやパースなどのようなプロセスにおける別のボトルネックがあることに起因しており、単にコードを高速で実行することを超えた、別のチャレンジがある。これは、単にJava(登録商標)を高速で実行することとは異なるコンテキストである。なぜなら、ロードおよびパースを最小限にして、使用されない又は使用される可能性の低いコードに対して行われるコード準備の量を低減するという異なる目標が含まれるからである。
【0020】
[0032] 「ホット・スポット」という用語は、実行中のプログラムにおいて多く用いられる関数に関する専門語である。しかし、ここでの実施形態においてここで考慮する問題は、マークアップ・ページを受け取ることからウェブ・ページを呈示することまでのチェーン全体を通じてコード準備を避け、要求された関数を実行すること、例えば、ロードを避ける又は延期する、パースを避ける又は延期する、コンパイルを避ける又は延期する、コード実行の最適化を避ける又は延期することなどにも関係するという点に関して、より広いものである。即ち、主題の開示は、プレゼンテーション・コンテンツにおいて参照された又は受け取られたスクリプト・コード、例えば、限定ではないが、ウェブ・ページ・リクエストに応答してネットワークから受け取ったマークアップ・コンテンツにおいて参照されたスクリプト・コードなどのようなスクリプト・コードの準備を調整して、準備と関連する遅延を低減させてプレゼンテーション・コンテンツをユーザーに対して表示することを可能とすることと関連する。
【0021】
[0033] 従って、本願において示す様々な実施形態において、コードの準備が低減されるが、これは、例えば、マークアップ・ドキュメントと関連するUIを可能な限り速く呈示するために可能な限り少ない量のコードの準備を行うことと、ロード、パース、解釈などを可能な限り延期することとを目標として行われ、この延期では、例えば、きびきびとUIを表示することの妨げとなるアイテムのための様々なコードの準備のステージまたはサブステージを、そのコードが実際に要求されるまで又は特定の条件に遭遇するまで、延期する。
【0022】
[0034] 更に、解釈または実行の間におけるコードの観察を通じて、コードに関して共通の実行パスのケースを決定できる場合、後に詳細を示す様々な実施形態において、ネイティブ・コードの2個のバージョンを維持することができ、その一方は、共通のケースに対して最適化または改善されたものであり、他方のバージョンは、共通ではないケースに対してのみ使用される。これらの概念は、ネイティブ・コードの2個より多くのバージョンと、それらと関連する使用のケースとに対して拡張することができ、その場合において、2個より多くの使用のケースを支持すると効率が良くなり、切り換えのためのコストも大きくはない。
【0023】
[0035] 後に詳細に示す更に別の実施形態では、準備ができている情報に応答して情報の表示を優先する様式で複数のコアを用いることができ、これは、1つのコアまたは一組のコアで情報を呈示するためのUIスレッドを維持し、別のコアまたは一組のコアで上記のコード準備プロセスの最適化および管理をJIT(ジット)すること又は適用することを行うことにより、行われる。これに関して、作業キューなどのようなデータ構造は、変更されたネイティブ・コードを生成する最適化および管理コアと、ユーザに対してのウェブ・サイトの表示を可能なかぎり速く行っているUIコアとの間で情報を共有するために、維持することができる。更に、様々な実施形態において、UIコアには、所与の状況に対して実行するためのコードの代替的ピースが使用可能であるという通知が与えられ、それにより、コードの代替的ピースを、UIコアによる実行に対してスワップ・インすることができるが、その際にUIコアにより現在実行中のコードを妨げない。
【0024】
[0036] 他の実施形態および様々な限定ではない例、シナリオ、および実装を、以下で更に詳細に説明する。
コンテンツの高速プレゼンテーションのための、スクリプト・コードの、延期および最適化されるコード準備
[0037] 先に述べたように、ここで示す様々な実施形態において、コード準備は、低減または延期されるが、これは、例えば、限定ではないが、マークアップ・ドキュメントと関連するUIを可能な限り速く呈示するために可能な限り少ない量のコードの準備を行うことと、ロード、パース、解釈、最適化などを可能な限り延期することとを目標として行われ、この延期では、例えば、きびきびとUIを呈示することの妨げとなるアイテムのための様々なコード準備のステージまたはサブステージを、後のときまで又は実際に要求されるまで、延期する。
【0025】
[0038]
図1は、マルチフェーズ・コード準備プロセスの1以上のフェーズへ適用する作業レベル、例えば、作業無し、部分的パースのみ、パース、割り込み、コードを最適化するためのコードの実行の監視など、を決定するための方法の例を示すフロー図を示す。100において、スクリプト・コードが、コンピューティング・デバイスのスクリプト・エンジンにより受け取られる。スクリプト・コードは、コンピューティング・デバイスのブラウザー・アプリケーションにより受け取られたマークアップ・ドキュメントに含まれているか、またはそのマークアップ・ドキュメントにより参照されている。100において、スクリプト・エンジンによりスクリプト・コードへ適用されるマルチフェーズ・コード準備プロセスの少なくとも1つのフェーズに適用するための作業レベルが、決定される。120において、作業レベルの決定は、マークアップ・ドキュメントの表示と関連してスクリプト・コードの少なくとも一部がブラウザー・アプリケーションによりどれだけ呼び出されるか、についての予測または観察に基づいて作業レベルを決定すること、または、130において、マークアップ・ドキュメントの表示と関連してのブラウザー・アプリケーションによるスクリプト・コードの少なくとも一部の過去の使用において観察されたパターンに基づいて、作業レベルを決定すること、または120と130との双方を行うことを、含むことができる。
【0026】
[0039] 例えば、
図2に示すように、コードを受け取った後の最初のステージとして、そのコードを完全にパースする代わりに、オプションとして、適用する作業を少なくすることができる。例えば、パースを行わないようにすることや、括弧の一致(brace matching)により、単に関数の開始部と終了部とを決定するための部分的パースを行うことができる。例えば、括弧の一致を用いて、スクリプト・エンジンは、コード200を受け取り、ブラウザー・アプリケーションにより呼び出された関数が見つかるまで、部分的にパースされたコード202におけるN個の関数、メソッド1、メソッド2、メソッド3、メソッド4・・・、メソッドNの境界がどこにあるかの決定を行うことができる。例えば、コード202のメソッド4が実際に呼び出された場合、スクリプト・エンジンは、単に、メソッド1、メソッド2、およびメソッド3の開始部と終了部とを決定することにより、メソッド4のパースおよび解釈を開始して、パースされ解釈されたメソッド4 204を得ることができる。即ち、パースおよび解釈はコード準備ステージの例であり、作業レベルに関する特定の決定により示されるように、高優先度のコードは多くのリソースを用いて扱い、低優先度のコードは少ないリソースを用いてまたはリソースを用いずに扱うように、このような作業レベルを決定して適用することができる。
【0027】
[0040] 解釈の間、スクリプト・エンジンはまた、メソッド4の特性を観察して、メソッド4を行うために生成される実行可能コードを改善することができ、その改善は、例えば、メソッド4のメモリ使用の改善や、メソッド4を更に効率的にすることである。例えば、スクリプト・エンジンが、メソッド4内に多く実行されるループがあると判定して、そのループに対して更なる最適化リソースを適用する場合や、スクリプト・エンジンが、コードのピースに対しての特定の変数のタイプが、予想通りにまたは決定論的に、整数であると決定する場合があり、その場合にはより効率的な表現を用いることができる。これに関して、動的プログラムは、ランタイムにおいて異なるタイプを呈する変数を有することができるが、プログラマーは、設計または表現を簡素化するためのパターンを用いるコードを開発する傾向があり、例えば、プログラマーは、一貫して、整数を格納するための変数を用いるか、または、予想通りにまたは決定論的に、ストリングである変数を用いる。これに関して、解釈の間、スクリプト・エンジンは、そのようなパターンを観察し、次に、メソッド4のための実行可能コード206の生成/コンパイルのためのコード準備を簡素化することができる。
【0028】
[0041] 更なる動作として、後に別の実施形態において詳細に説明するが、実行可能コード206の挙動も、コードの実行の間に観察することができ、その場合において、典型的なケースにおいてのコードの実行の仕方について更なる観察を行うことができ、それにより、実行可能コード206に対して、変更された実行可能コード208の形へと更なる変更を行うことを可能にし、次に、将来の実行または将来の実行の幾つかのために、その変更された実行可能コード208により実行可能コード206を置換することができる。従って、様々な実施形態において、コード準備のマルチフェーズ、例えば、パース、解釈、コンパイル、実行、または何れかのフェーズのサブフェーズのうちの何れかにおいて、これらの活動のそれぞれは様々なコード準備ステップへと分割でき、それらのステップに作業レベルを適用できるので、作業レベルを決定することができ、また、作業レベルが、即時リソースを要求しないものである場合、それと関連するコード準備のフェーズまたはサブフェーズを延期することができ、実質的に、ブラウザー・アプリケーションにより実際に要求されているコード準備へ、またはブラウザー・アプリケーションにより実際に多く要求される可能性又は近い将来に呼び出される可能性の高いコード準備へ、即時リソースを割り当てる。
【0029】
[0042] 従って、1つの構成では、コード準備の延期は、コード準備の様々なステージおよびサブステージを通して、またはそれらの中で可能なときに行われる。これは、単に、スクリプト・コードからネイティブ・プロセッサー・コードへの変換を延期するだけではなく、ここで説明する実施形態がパース、解釈、バイトコードの生成などを遅延する、即ち、所与のコードのピースに対して適用される関連する作業レベルに基づいて、コード準備の何れかのステージまたはサブフェーズを延期するという点において、より広く適用可能である。
【0030】
[0043] 上述のように、ここで開示する実施形態は、「ホット・スポット」という用語の典型的な専門的使用よりも広範であり、ホットな関数(例えば、多く実行される関数)を観察し、ランタイムにおいて、コールドな関数よりもホットな関数の準備のために、より多くの作業を行う。これらの実施形態は、コード準備における任意の数Nのフェーズを考慮し、作業レベルは、コードの予測された又は観察された使用に基づいて、各フェーズに対して決定することができる。更に、所与のフェーズの複数のサブフェーズもあり得、それらに対しても異なる作業レベルを適用することができる。
【0031】
[0044] これは
図3のブロック図に示され、
図3は、コード準備の3個のステージ300、310、320を示し、それらは、ぞれぞれ、サブステージの組302、304、306、組312、314、316、組322、324、326を有する。これに関して、例えば、予測されるコード使用や、観察された実際のコード使用に基づいて、異なる作業レベルを異なるステージ/サブステージへ割り当てることができる。例えば、コード最適化ステージ、例えば、ステージ300、310、320のサブステージ・レベルでの最適化技術の例は、ループ不変コード運動分析(loop invariant code motion analysis)、共通自己表現消去(common self expression elimination)、一定伝播(constant propagation)などを含むことができる。
【0032】
[0045]
図3では、それぞれに3個のサブステージを持つ3個のステージが示されているが、代替の実施形態では、任意の階層関係に従って、または他の任意の又はオプションのコード準備プロセスに従って、任意の数のステージおよびサブステージが考慮され、コード準備プロセスの所与の分岐やノードに対して作業レベルを割り当てることができることに、留意されたい。例えば、限定ではない別の例として、スクリプト・エンジンは、「ウォーム(warm)」コードに関してはその合計10個のフェーズのうちの3個のフェーズを実行し、「コールド」コードに関してはその10個のフェーズのうちの1個のみを実行するが、最もホットなコードのサブセットの10個のフェーズの全てを実行することを、決定する。言い換えると、コード準備プロセスの任意の数のフェーズに対して、作業レベルは、実行中のプログラムによりどれだけコードが使用されているかと、そのコードについておよびコードの使用についての情報とに基づいて、時間の関数としてネイティブ・マシン命令の最も有効なシーケンスを出すところに、調節または調整することができる。
【0033】
[0046] 従って、コード準備のフェーズまたはサブフェーズの延期に加えて、ここでの実施形態は、時間が経つ間に、所与の組のコードまたは関数の最適化に対してリソースが使用可能になると又はコミットされると、コードの実行についての予測または実際の観察に基づいて、代替コードを生成することを説明する。例として、New York Times(ニューヨーク・タイムズ)のオンライン・サイトなどのような多く使用されるウェブ・サイトでの平均的なユーザー・エクスペリエンスは約5〜10分であるが、ユーザの観点からは、スクリプト・エンジンによるニューヨーク・タイムズの多くのコア関数の観察、例えば、ページのレイアウトの方法、スタイル情報の取得、データの取得など、に要する時間は僅かである。これに関しては、新たなページのレイアウトのための数百の方法があるわけではなく、従って、スクリプト・エンジンは、ニューヨーク・タイムズの記事を読むための共通コード・パス(1以上)が何であるかを、比較的速く、完全に又は殆ど観察することができ、その後、その記事を読むため又は更なる記事を読むために代替コードの生成を開始することができる。
【0034】
[0047]
図4は、実行における異なる条件に基づいた、コードに対する代替のループ・ボディの生成を示すブロック図である。例えば、実行の条件420に応じて、ループ・ボディ410、ループ・ボディ412、またはループ・ボディ414が、現在の条件に対するアプリケーションに対して、より速いもの又はより効率的なものである。従って、ループ・ボディ410を持つ実行可能コード400、ループ・ボディ412を持つ実行可能コード402、およびループ・ボディ414を持つ実行可能コード404のそれぞれを、予め生成することができ、また、ループ・ボディ410、412、または414を、プレゼンテーション・スレッドによりアドレスされた既存のコードに対してスワップ・イン又はスワップ・アウトして、適切な条件C1、C2、またはC3のそれぞれに対しての代替のボディを実行することができる。従って、単体で又は組み合わせた結果として条件C1、C2、またはC3となる任意の予め定めた設定条件A、B、Cなどに対して、コードの実行の効率を改善する作業における結果として、別のループ・ボディをスワップ・インすることができる。この例では、ループ・ボディの実行は代替に関しても最適化されるが、ここで説明する実施形態は、他の最適化方法や、ループ・ボディ以外のコードやコードの一部のスワップ・インやスワップ・アウトにも適用可能である。
【0035】
[0048] 代替コードの生成の限定ではない更なる例として、コードの使用の予測またはコードの実行の実際の観察の結果として、時間のうちの95%にわたり、整数が、所与のデータ・アイテムに対するものであると決定できるか、又は所与のデータ・アイテムに対して格納されると決定できる場合には、例えば、x86プロセッサーで直接に使用するためのネイティブの整数レジスター・フォーマットを用いる最適化されたネイティブ・コードを生成することができ、従って、殆どの場合に生じるそのようなシナリオに対して、最適化されたネイティブ・コードを使用することができる。次に、希なケースが時間のうちの5%において起きる場合、特別のケースに対してスワップ・インできる別のバージョンのネイティブ・コードを用いて、変数を浮動(またはネイティブの整数レジスター・フォーマットよりも効率が低い何らかのもの)としてタイプ入力することができる。
【0036】
[0049] 動的タイピングに基づく動的なコードの生成および実行の間のコード・スワッピングの別の限定ではない例を示す。これに関して、解釈の間にコード500の特性を観察することにより、または実行の間のコード500の観察の結果として、共通コードのパスまたは一組のパスがあると決定できる場合、ネイティブ・コード502または共通コード・パス(1以上)に適する他の代替物を生成することができ、次に、共通の度合の低いケースに実際に遭遇したとき又は遭遇する場合に、コード504を、その共通の度合の低いケースに関してスワップ・インを行うことができる。最適化されたネイティブ・コードの別バージョンを、ネイティブ・コードの別の使用のケースへ適用するためにスワップ・インすることについてのそのような構成は、以下で更に詳細に説明する。例えば、後に詳細に説明する別の実施形態では、ジャスト・イン・タイム(Just in time)・コンパイラーをコードのピースへ適用するか否かの判断にヒューリスティック(heuristics)が適用され、次に、コードのピースに対しての所与の状況の組の下で、「ジットされた」コードを実行するか、または、単にコードのピースを解釈する。
【0037】
[0050] これに関して、
図4および
図5は、ここで説明される様々な実施形態の別の構成を示す。この構成では、コード生成プロセスは、コード準備のステージおよびサブステージの延期により導かれるだけではなく、解釈または実行の観察を通じてコード自体を考慮する、所有される様々な情報レベルにより通知され、それにより、代替コードが全インスタンスにおけるコードを単に置換できる場合に代替コードを生成するだけではなく、代替的状況に対しての代替コードを生成する(例えば、後に、ブラウザー・アプリケーションによる所与の関数コールに応じて、容易にスワップ・インまたはスワップ・アウトすることができる別のループ・ボディを生成する)。
【0038】
[0051] 従って、上述のように、コードの挙動は推測または観察することができ、異なる状況、例えば共通ケースと非共通ケース、に対する別のコードの生成へと導き、共通ケースに対して代替のものを実行し、それにより、共通点が最も低いケースの制約無しに、全体的性能を改善する。従って、コード生成のインテリジェントな選択を、コードについての情報により通知することができ、例えば、コードが、予想通りにまたは決定論的に、変数を整数のアレイとして定めるように見えることを通知することができ、その場合、ループの先頭で高速の検査を行うコードを生成して、整数のアレイであることを確認し、そのように想定し、その整数のアレイの構成用に調整されたより効率的なループを用いるようにする。
【0039】
[0052]
図6は、ブラウザー・アプリケーション630とスクリプト・エンジン640との間での交換の例を示すフロー図である。ブラウザー・アプリケーション630により受け取られたスクリプト・コード660は、スクリプト・コード660の重要性についての優先度情報無しで、スクリプト・エンジン640へ送られる。600において、スクリプト・エンジン640は、スクリプト・コード660のループ・ボディ、またはループ・ボディの使用を分析する。610において、変更されたループ・ボディを、特定の条件の下での使用のため、例えば、スクリプト・コード660の共通使用ケースのための最適化されたコードでの使用のために、生成することができる。620において、ループ・ボディを、遭遇している条件の組に応答して、変更されたループ・ボディと置換することができ、また、代替的には、ループ・ボディの先頭において検査を行い、共通使用ケースに遭遇したかを確認し、その結果として、ループ・ボディまたは変更されたループ・ボディを実行することができる。対応する実行可能コード670は、実行のためにブラウザー・アプリケーション630へ戻される。
【0040】
[0053] これに関して、低優先度のコードがパースされ、生成され、最適化されることなどを待つことなく、スクリプト・エンジンの限られたコード生成リソースを、ユーザーに情報を高速で呈示するという目標へ向けるための上記の技術の応用を、下記の限定ではない例を参照して更に説明する。
【0041】
[0054] 最初に、HTMLやDTHMLなどのようなマークアップ・ファイルは、スタイル・シートやJavaScript(登録商標)ファイルなどを有するブラウザー・アプリケーションにより受け取られる。ブラウザー・アプリケーションは、マークアップ・ファイルの様々なパートを分割し、次に、同時接続を用いて、そのマークアップで定められたJavaScript(登録商標)または他のファイルを、様々な異なるピースに対して1つ、ダウンロードする。様々な異なるピースが受け取られると、ブラウザー・アプリケーションは、何れのピースの優先度や重要度の情報も無しで、JavaScript(登録商標)ファイルをJavaScript(登録商標)エンジンへ送る。タイミングの問題で、スクリプト・エンジンは、コードの所与のピースを実行する準備を整えることを命令されることもある。しかし、コードの所与のピースを実行する要求は、それをブラウザー・アプリケーションが受信してから1ms内に起こり得るが、更に、対応するコードを生成するために30〜40msを要し、表示のためにUIパスにおいて更に5msを要するなどの場合、これらの遅延は積み重ねられて、ユーザー・エクスペリエンスに対して影響することになり得る。従って、上記のように、コード準備のステージおよびサブステージの延期や回避にインテリジェンスを適用できれば、好都合である。例えば、人間の視覚的および認識的な理解の問題として、100ms以上の遅延は、知覚可能な遅延となる。
【0042】
[0055] 従って、別の例として、コードの所与のピースに関して、スクリプト・エンジンは、代わりに、パースを開始する前に1〜2msを使って関数の境界の場所を捜すことができ、スクリプト・エンジンは、コードへ「parse me later(これを後にパースせよ)」スタブを挿入し、それを僅か1〜2msパス後に戻すように渡すことができる。次に、後に、ブラウザー・アプリケーションが、例えば、コードのピースの関数Fを呼び出したい場合、コードの全ピースをパースすることをなおも避けつつ、追加の1〜2msを使ってコードのピースの関数Fのパースおよび実行を行うことができる。
【0043】
[0056] 上記の別の実施形態に従って、例は更に広がり、スクリプト・エンジンは、コードのピースの関数Fのパースおよび生成の間に、変数Vが、予想通りにまたは決定論的に、整数であるかのように見えることを観察すること、または、Fを数回実行した後に、Vが、予想通りにまたは決定論的に、整数であることを確認することができ、次に、スクリプト・エンジンは、整数としてのVの表現に対しての専用化したコードを生成することができる。これに関して、スクリプト・エンジンは、これまでに起きたことを予測的に観察しつつ、要求されていることに対して可能な限り遅くに応答するように努力して、共通ケース(1以上)において生じる高速で更に効率的なコードを生成するように、更に進展させる。
【0044】
[0057] 本開示の別の構成では、一方での、上記のコード生成の管理および最適化と、他方での、管理および最適化の完了を待たずにユーザーに対してUIを迅速に呈示することとの間でのバランス取りを達成するために、複数のコアが用いられる。従って、様々な実施形態において、最適化および管理は、主なUIスレッド(マウスのクリックなどのような入力に応答し、関連するコードを即座に実行し、例えば、入力に従ってビューを変更する)とは異なるスレッドで行われるが、他のプロセッシング・コアが、上記のインテリジェントなコード生成の実施形態の何れかに基づいて代替コードを同時に生成することもできる。
【0045】
[0058] これに関して、様々な実施形態において、バランス取りプロセスが、マークアップ・ドキュメントのレンダリングを駆動するUIコアと、コードの生成を最適化する最適化/管理コアとの間で適用される。1つの実施形態では、最適化/管理コアは、代替ネイティブ・コードを生成する最適化/管理コアと、ユーザーに対してウェブ・サイトをレンダリングしているUIコアとの間で情報を共有するために、データ構造を管理する。UIコアは、高速での呈示に焦点を合わせており、従って、一般的に、ユーザーと向かい合うので、1つの実施形態では、UIコアと最適化/管理コアとは、共有される機構を含み、それにより、UIコアは、例えば、ウェブ・ページを表示する活動の中へと代替コードをスワップすることを待たず、その活動の速度を落とさずに、コードの所与のピースの代替的なまたは最適化されたバージョンのものを、それが使用可能になったときに、実行する。これに関して、以下の様々な実施形態において説明するように、上書きコードと代替コードとのコードの実行中における関連する問題を避ける機構を提供することができる。
【0046】
[0059] 1つの実施形態において説明したように、バランス取りプロセスに対する非対称設計は、最適化/管理コアが、作業キューのメンテナンスの負荷と、コードのスワップ・インおよびスワップ・アウトの調整と、バックグラウンドでのコードの生成とに対処することとを保証し、それにより、UIコアは、待つことがなく、ユーザーに対して情報を表示するタスクを継続することができる。
【0047】
[0060] 1つの限定ではない実装において、関数毎に実装されるfunction_infoと呼ばれる関数への呼び出しを行うことまたはその関数をチェックすることにより、UIスレッドは、呼び出しのためのネイティブ・エントリー・ポイントがあるか否かを検査することができ、ある場合、UIスレッドは、そのネイティブ・エントリー・ポイントに対して呼び出しを行う。ネイティブ・エントリー・ポイントは、コード生成の様々なフェーズにおけるコードのピースに対してのスタッブとすることができ、例えば、ネイティブ・エントリー・ポイントは、「generated code(生成されたコード)」スタッブや、コードのパースを行わせることへ導く「parse me(これをパースせよ)」スタッブや、「call the interpreter to run the code(コードを実行するためにインタープリターを呼べ)」スタッブであり得る。これに関して、UIスレッドは、スタッブのコンテンツに対してアグノスティック(agnostic)であり、単に、その時そこにあるものを、スタッブ呼び出しに従って、実行する。代替コードを生成できるとき、次の時にUIスレッドはコードを無視し、代替コードは、スタッブのチェックにより、古いコードを置換しているであろう。即ち、次のパスにより、UIスレッドは、新たなアドレスを指す「generated code」スタッブを介して代替コードへジャンプする。
【0048】
[0061] 例えば、コードを、生成されたコードへと漸進的に動かすことの一部として、1つの実施形態において、最初のパスで、重要ではないコードはパースされないが、「parse me」スタッブが挿入され、それにより、次のパスにおいて、またはUIスレッドがコードに次に遭遇したときに、コードがパースされる。コードが次に呼び出されたときに、バイトコードが生成され、次に、インタープリターを呼び出してバイトコードを実行することなどが行われる。UIコアはまた、ロックを取らずに作業アイテムを並べる1つの方法であるロック・フリー・キューを用いて作業アイテムを降ろすことができる。これに関して、これらのキューの編成の方法、コードに対していつ何をするかについての優先順位、パースやコンパイルなどのために行う作業の量、およびそれらの理由のヒューリスティックは、後に詳細に説明する。従って、ユーザーの知識無しで、バックグラウンドにおいて大量の作業が行われており、それは、共通のウェブ・ページおよびアプリケーション・シナリオを認識し、バックグラウンド・コア(最適化/管理コア)のリソースを、それらが最も効率的に作用するところへ向ける。
【0049】
[0062]
図7は、第1のコア又は一組のコアにより処理されるUIスレッド750と、第2のコア又は別の一組のコアにより処理されるJITスレッド760とが、インタープリターにより解釈された解釈済みコード770をいつ実行するか、またはコードをいつ「ジット」して(コードにJITコンパイラーを通過させる)、そのジットしたコード780を実行するかに関しての、上記のバランス取りを達成する実装の例を示す。
【0050】
[0063] 上記で示唆したように、サンク(thunk)などのような、スタッブの使用の例として、この場合、最初に、各サンクにヌル(NULL)値を割り当てることがてき、値がヌルである場合、UIスレッド750は、解釈済みコード770を使用することができるが、フィールドがヌルではない場合(即ち、ジットされたコードを指すアドレスがある場合)、UIスレッド700は、代わりに、ジットされたコード780を用いる。その間に、最適化/管理コアは、リソースと時間とが許す限り更に多くのコードをジットすることを試み続け、それにより、最終的に、すべての作業が完了されるが、その間に、ユーザーは、たとえ全てのコードに対してロード、パース、コンパイル、ジッタなどがまだなされていなくとも、可能な限り速くウェブ・ページを経験する。
【0051】
[0064] この例の限定ではない詳細を更に説明すると、そのような環境においてコードを実行するための2つの方法があり、それらは、コードをインタープリターを介して実行すること(一般的には速い)、またはコードをジットすること(ジッター(jitter)と呼ばれるジャスト・イン・タイム・コンパイラーを介しての実行であり、一般的には遅い)である。コードをジットし、ジッターの完了を待ち、ジットされたコードを実行するよりも、概して、インタープリターを用いての線形的シーケンスのコードの解釈は速い。これに関して、ジッターは、最適化されたコードを形成するために、コードにわたって複数のパスを用いる傾向がある。従って、コードの使用が多くなるであろうと思われる場合、一般に、追加のコード準備時間があるにもかかわらず、ジッターを用いることで性能が向上するが、コードの使用が少ない場合、例えば、一回の場合、一般に、インタープリターを用いてコードを速く実行することで性能が向上する。従って、様々な実施形態において、ジットされたコードと解釈されたコードとの間でのバランスが維持される。
【0052】
[0065] 最初に、UIスレッド上で、インタープリターはコードの解釈を開始し、JITスレッド上で、ジットの対象となる候補が識別される。例えば、ジッティング(jitting)に対して良好に動作を行う関数は、小さい関数であり、コードの殆どはループ(1以上)内にある。従って、それらの関数は、最初に、ラウンド予測ジッティング(round speculative jitting)に従ってジットされ、最上位の候補は、一組のヒューリスティックに基づいて選択される。予測ジッティングでは、呼び出された関数がジットされるのみではなく、幾つかの関数は、呼び出されなくとも、呼び出される見込みがある場合は、ジットされる。そのような関数がジットされると、次に、エントリー・ポイントが、解釈済みコード770からジットされたコード780へと切り換えられる。
【0053】
[0066] これに関して、様々な優先度の複数のキューがバックグラウンド(オプティマイザー/マネージャー)・コアにより維持される。これの例が
図7に示され、
図7では、ロード・スロット700、702、・・・704を持つ最上位の優先度のキューが維持され、ロード・スロット710、712、・・・714を持つ第2レベルの優先度のキュー、ロード・スロット720、722、・・・724を持つ第3レベルの優先度のキュー、・・・、そしてロード・スロット730、732、・・・734を持つ第Nレベルの優先度のキューが維持されている。例えば、1つの実施形態では、高優先度から低優先度までの様々な優先度のキューが選択される。最初のパスの間に、コードが受け取られると、そのコードの特性に従って、作業がスロットに割り当てられるが、最初のパスの間に、後に説明する特定の予測基準に適合する場合、予測ジッティングが行われて作業を低優先度のキューへと指定する。予測ジッティングの後、例えば、作業アイテム714、722、および730がジッティングに対する良い候補となり、従って、最上位レベルの候補の作業ロード・スロット700、702、・・・704に対して、および予測プロセスの間に選択された候補に対して、ジッティングが行われる。
【0054】
[0067] 予測ジッティングのラウンドの後、最上位の優先度のものに関して更なるジッティングが開始され、他の残りのアイテムは、優先度が以下のようにパーコレートして上げられる。これに関して、
図8に示すように、第3の優先度のコードにおけるコード作業アイテム724に関しては、コードが実行される毎に、それは、解釈済みコード770が呼び出される毎に優先度のレベルが上げられる。従って、最初のパスの後、解釈済みコード770が使用される都度、その優先度は、それを最上位の優先度にするまで上げられていく。1つの実装では、作業アイテム710で示されている第2の優先度のコードが最上位の優先度になると、それは、他の全ての作業の前へと移動し、ジッターは、次の機会に、そのパスをそのようなコードにわたって開始する。
【0055】
[0068] 結果として、コードが、多く使用されるものであるが、初期の優先度が低く、予測ラウンドで見逃される場合には、パーコレートして上げられ、即座に最適化される。コードが、多く呼び出されないものである場合には、それほど速く最適化されない。最上位の優先度のアイテムが全てジットされると、ジッターは、第2の優先度のアイテムの最適化および後続のアイテムの最適化を開始することができ、全てのアイテムを消費するまで、UIスレッドは、その間に速度を落とすことなく、最上の最適コードを実行する。
【0056】
[0069] スクリプト・アイテムに対するコードの生成への優先度の付与の方法についてのヒューリスティックに関しては、1つのヒューリスティックは、コードがどれだけルーピー(loopy)であるか、であり、これは、ループである全てを除いたコード・サイズの測定値、即ち、全体のコード・サイズのどれだけかループであるかに対しての全体のコード・サイズの比率、またはその逆の、コード・サイズに対するループの比率である。従って、関数の殆どがループである場合には、ループの少ない関数よりも、最適化に関して優先度が高くなるが、コードの殆どはループではない。
【0057】
[0070] 更に、重い数学演算を行っているコードは、ジットされることにより、ジットされないコードよりも多くの恩恵を受ける。最適化は、多くの数学処理を行うコードに対して良好に働く。なぜなら、プロセッサーのネイティブのレジスターを利用できるからであり、これらは、別のメモリの分離したメモリ構造を設定するコードと比較すると、非常に速い。
【0058】
[0071] 限定ではない別の実施形態では、実行するスクリプトのコール・ツリーが構築され、これは優先順位を知らせる手助けとなる。これに関して、コール・ツリーは、ホットになるであろう関数を予想する手助けとなる。例えば、コードの第1のピースが、予想通りにまたは決定論的に、コードの第2のピースの前に実行されると示された場合、第2のピースよりも第1のピースを優先することは、理にかなっている。また、例えば、ifステートメントの無いグローバル関数がある場合、そのようなコードを実行する機会が大いに見込め、その場合、高優先度となる。仮説的な例を、関数Fooを含むコードのビットとする。
【0059】
[0072]
Foo
{
Bar;
If X,then Y
}
[0073] この場合、Fooが呼び出された場合にBarが呼び出されることが、明らかである。なぜなら、Xではない場合には、Yは呼び出されず、従って、最適化に関してのBarの優先度はYよりも高い。これらのヒューリスティックを入力として用い、相対的な優先度を形成する多くの方法がある。1つの方法は、コードの所与のピースが、選択されたヒューリスティックの組とどれだけ整合するかに応じて0から100の優先度値を割り当て、ほぼ均等に複数のキューへと分割することである。
【0060】
[0074] 上記のように、ジットされた実行可能コードが使用可能になると、そのジットされた実行可能コードが、インタープリター・コード・サンクへ挿入される。インタープリター・コード・サンクがまだ近くにある場合、コード生成が行われたか又は行われているかを判定するための検査を行い、まだである場合、作業アイテムの優先度が上げられる。それがジットされていた場合、サンクは、ジットされたアドレスと置換される。言い換えると、サンクは、ジットされたコードが使用可能になるまで、解釈済みコードを用いるケースを識別する手助けのために存在し、その後、サンクは、消滅するか又は新たなメモリ位置と置換され、それにより、コードは、別のメモリ位置へジャンプしてジットされたコードを実行するように、例えば、UIスレッドを新たなコードへ送る又はジャンプさせるように、動作する。1つの実施形態では、作業アイテムを最上位の優先度のキューの前方へと移動させるときに短いロックを用いて、競合を避けることができるが、これはリストにおけるアイテムの単なる位置変更であるので、非常に速く、ロック時間は最小である。
【0061】
[0075] 上記のように、インタープリターに対して1個、そしてジッターに対して1個のコアが使用されるが、追加の実施形態では、インタープリターに対して1個、高速のジッター(完全というほどではない)に対して1個、低速のジッター(完全)に対して1個のように、3個以上のコアを用いることがてきる。このように、幾らかの完全ではない最適化の恩恵を受ける特定のアイテムに関して、そのようなアイテムは、中間段階として改善される。
【0062】
[0076] 更に、追加のコアを用いて、何れのオブジェクトによってもウェブ・サイトの表示と関連して既に使用も参照もされていない、全てのオブジェクトに対する全てのガベージ・コレクション(garbage collection)を行うことがてき、それにより、他のコアで行われている重要な作業を妨げないようにする。
【0063】
[0077]
図9は、実施形態における置換のために最適化したコードを生成するための、限定ではないプロセスを示すフロー図である。900において、第1プロセッシング・コアを用いて、スクリプト・コードを含む又は参照するマークアップ・ドキュメントが表示され、実行可能コードが生成され、これが、マークアップ・ドキュメントのスクリプト・コードにより表される機能を可能にする。910において、第2プロセッシング・コアを用いて、スクリプト・コードの特性に基づいて、実行可能コードとは異なる代替の実行可能コードを選択的に生成する。920において、第2プロセッシング・コアを用いて、実行可能コードを、第1プロセッシング・コアによるスクリプト・コードの更なる実行のために、代替の実行可能コードと置換する。オプションとして、930において、第3プロセッシング・コアが、ガベージ・コレクションのプロセスを行うことができ、それにより、マークアップ・ドキュメントと関連しているがマークアップ・ドキュメントまたはその機能のためにもはや使用されていないオブジェクトに対するメモリを、取り戻す。
【0064】
[0078]
図10は、様々な実施形態に従った、スクリプト・エンジン1040とブラウザー・アプリケーション1030との間での対話を含む、例示であり限定ではないデバイス1000のブロック図である。示されているように、スクリプト・コード1032を含むマークアップ・ドキュメント1034は、ブラウザー・アプリケーション1030によに受け取られ、ブラウザー・アプリケーション1030は、次に、スクリプト・コード1060を、ここでの1以上の実施形態において説明するように、インテリジェントなコード生成のためにスクリプト・エンジン1040へ送る。これに関して、様々な中間データ構造1050が維持され、それにより、スクリプト・コード1060の所与のピースに対するコード生成の様々なステージの最適化に対して優先度が割り当てられる。これらの構造は、メモリ1010に維持することができ、また、適切な場合にはキャッシュ・メモリ1015に記憶することができる。上述のように、様々な実施形態において、複数のプロセッサー・コア1020が、上記の1以上の実施形態において説明したようにそれらの作業の区分に従って、また、別のコアを用いてユーザー・エクスペリエンスを優先させるために、実行を行う。スクリプト・エンジン1040は、ここで説明する様々な実施形態に従って、最後に、最適化の様々なレベルで、または完了のときに、実行可能コード1070をブラウザー・アプリケーションへ戻すように渡す。その間に、主なコードは、スクリプト・エンジン1040が全ての作業アイテムに対する作業を完了するのを待たずに、そのタスクを終了するとすぐに、マークアップ・ドキュメント1044のレンダリングの処理を行い、実行可能コード1070の出力は、マークアップ・ドキュメント1044の出力1042として表されている。
【0065】
[0079] 様々な実施形態において、インテリジェントなコンパイル技術およびヒューリスティックが可能とされ、それらは、例えば、クライアントとの対話が多い範囲のような特定のウェブ・ページの「ホット・スポット」に対するコードの生成の速度を上げるために、個別のコアを用いることがてきる。ヒューリスティックは、そのウェブに対してカスタム化され、例えば、コード生成の選択についての案内を行うために、データ構造のウェブ・キャッシュを用いること、例えば、所与のウェブ・ページが使用された最後の時についての情報をキャッシュに記憶することができ、その結果として、識別されたホット・スポットに対するコードを速い速度で作ることができる。このように、時間の経過につれて、同じウェブ・サイトが呼び出されることが多くなる傾向があるので、ウェブ・サイトの解釈は、キャッシュに保持される積み重ねた構造を参照して、時間の経過とともに改善される。
【0066】
[0080] 幾つかのパフォーマンスの結果は、上記の様々な実施形態および技術が、ここで説明する様々な実施形態を適用しない以前のウェブ・ページの負荷および対話に対して、40ないし150倍の速度の向上に寄与することを示している。
【0067】
例示的なネットワーク化され分散化された環境
[0081] 当業者は、ここで説明する動的コード生成の様々な実施形態を、任意のコンピューターや他のクライアントまたはサーバー・デバイスと関連して実施でき、任意のコンピューターや他のクライアントまたはサーバー・デバイスは、コンピューター・ネットワークの一部として又は分散型コンピューティング環境において配備でき、任意の種類のデータ・ストアと接続できることを、理解することができる。これに関して、ここで説明する様々な実施形態は、任意の数のメモリまたはストレージ・ユニットと、任意の数のストレージ・ユニットにわたって生じる任意の数のアプリケーションおよびプロセスとを有する任意のコンピューター・システムまたは環境において、実施することができる。これは、ネットワーク環境に配備されるサーバー・コンピューターとクライアント・コンピューターとを持つ環境や、リモート・ストレージやローカル・ストレージを有する分散型コンピューティング環境も含むが、これは限定ではない。
【0068】
[0082] 分散型コンピューティング環境は、コンピューティング・デバイスおよびコンピューティング・システムの間での通信による交換により、コンピューター・リソースおよびサービスを共有できるようにする。これらのリソースおよびサービスは、情報の交換、ファイルなどのようなオブジェクトのためのキャッシュ・ストレージおよびディスク・ストレージを含む。また、これらのリソースおよびサービスは、負荷のバランス取り、リソースの拡張、プロセッシングの特殊化などのための、複数のプロセッシング・ユニットにわたってのプロセッシング・パワーを共有することを含む。分散型コンピューティングは、ネットワークのコネクティビティを利用し、クライアントがそれらの集合的パワーをレバレッジして会社全体に利益をもたらすことを可能とする。これに関して、様々なデバイスは、アプリケーションやオブジェクトやリソースを有することができ、それらは、本開示の様々な実施形態に関して説明した動的コード生成のための機構に参加することができる。
【0069】
[0083]
図11は、例示的なネットワーク型または分散型のコンピューティング環境の概略的な図を提供する。分散型コンピューティング環境は、コンピューティング・オブジェクト1110、1112などと、コンピューティング・オブジェクトまたはデバイス1120、1122、1124、1126、1128などとを含み、これらは、プログラム、メソッド、データ・ストア、プログラマブル・ロジックなどを含むことができ、アプリケーション1130、1132、1134、1138およびデータ・ストア(1以上)1140として表されている。コンピューティング・オブジェクト1110、1112などと、コンピューティング・オブジェクトまたはデバイス1120、1122、1124、1126、1128などとは、様々なデバイス、例えば、パーソナル・デジタル・アシスタント(PDA)、オーディオ/ビデオ・デバイス、モバイル・フォン、MP3プレーヤー、パーソナル・コンピューター、ラップトップなどを含み得ることを、理解することができる。
【0070】
[0084] コンピューティング・オブジェクト1110、1112などと、コンピューティング・オブジェクトまたはデバイス1120、1122、1124、1126、1128などとのそれぞれは、通信ネットワーク1142を用いて、直接的または間接的に、コンピューティング・オブジェクト1110、1112などと、コンピューティング・オブジェクトまたはデバイス1120、1122、1124、1126、1128などとのうちの他の1以上のものと通信することができる。通信ネットワーク1142は、
図11では単一のエレメントとして示されているが、
図11のシステムへサービスを提供する他のコンピューティング・オブジェクトおよびコンピューティング・デバイスを含むものであり得、かつ/または複数の相互接続されたネットワークを表すもので有り得るが、それらは図に示していない。また、コンピューティング・オブジェクト1110、1112など、またはコンピューティング・オブジェクトまたはデバイス1120、1122、1124、1126、1128などのそれぞれは、アプリケーション1130、1132、1134、1136、1138などのようなアプリケーションを含むことができ、アプリケーションは、本開示の様々な実施形態に従って提供される動的コード生成のための技術との通信やインプリメンテーションに適切なAPI、または他のオブジェクト、ソフトウェア、ファームウェア、および/またはハードウェアを使用し得る。
【0071】
[0085] 分散型コンピューティング環境をサポートする様々なシステム、コンポーネント、およびネットワーク構成がある。例えば、複数のコンピューティング・システムは、有線またはワイヤレスのシステムにより、ローカル・ネットワークや広く分散されたネットワークにより、共に接続することができる。現在、多くのネットワークはインターネットと接続されており、インターネットは、広く分散したコンピューティングに対するインフラストラクチャーを提供するものであり、かつ多くの異なるネットワークを含む。なお、任意のネットワーク・インフラストラクチャーを、様々な実施形態において説明した動的コード生成のためのシステムに対して入射するようにされる例示的な通信に、用いることができる。
【0072】
[0086] 即ち、ネットワーク・トポロジーのホストおよびネットワーク・インフラストラクチャー、例えば、クライアント/サーバーや、ピア・ツー・ピアや、ハイブリッドのアーキテクチャーを、用いることができる。「クライアント」は、1つのクラスまたはグループのメンバーであり、この1つのクラスまたはグループのメンバーは、それと関連していない別のクラスまたはグループのサービスを用いる。クライアントは、プロセス、即ち、概略的には1組の命令またはタスクとすることができ、別のプログラムまたはプロセスにより提供されるサービスを要求する。クライアントのプロセスは、要求したサービスを用いるが、他のプログラムやサービス自体の作業の詳細について「知る」必要は無い。
【0073】
[0087] クライアント/サーバーのアーキテクチャー、特にネットワーク型のシステムでは、クライアントは、通常はコンピューターであり、このコンピューターは、例えばサーバーである別のコンピューターにより提供される共有ネットワーク・リソースへ、アクセスする。
図11では、限定ではない例として、コンピューティング・オブジェクトまたはデバイス1120、1122、1124、1126、1128などを、クライアントと考えることができ、コンピューティング・オブジェクト1110、1112などを、サーバーと考えることができ、その場合、サーバーとして動作するコンピューティング・オブジェクト1110、1112などはデータ・サービスを提供し、そのデータ・サービスは、例えば、クライアントであるコンピューティング・オブジェクトまたはデバイス1120、1122、1124、1126、1128などからデータを受け取ること、データを格納すること、データを処理すること、データをクライアントであるコンピューティング・オブジェクトまたはデバイス1120、1122、1124、1126、1128などへ送ることなどである。なお、何れのコンピューターも、状況に応じて、クライアント、サーバー、またはそれら双方と考えることができる。
【0074】
[0088] サーバーは、典型的にはリモート・コンピューター・システムであり、リモートまたはローカルのネットワーク、例えば、インターネットやワイヤレス・ネットワーク・インフラストラクチャーを通じて、アクセス可能である。クライアントのプロセスは、第1のコンピューター・システムでアクティブにすることができ、サーバーのプロセスは、第2のコンピューター・システムでアクティブにすることができ、互いに通信媒体を介して通信し、それにより、分散型の機能を提供し、且つ複数のクライアントがサーバーの情報収集能力の利点を用いることを可能にする。ここで説明した技術に従って用いられる何れのソフトウェア・オブジェクトも、スタンドアローンとして、または複数のコンピューティング・デバイスまたはオブジェクトにわたって分散して、提供することができる。
【0075】
[0089] 通信ネットワーク1142またはバスがインターネットであるネットワーク環境では、例えば、コンピューティング・オブジェクト1110、1112などをウェブ・サーバーとすることができ、そのウェブ・サーバーと、他のコンピューティング・オブジェクトまたはデバイス1120、1122、1124、1126、1128などとが、多数の既知のプロトコルのうちの何れか、例えば、ハイパーテキスト・トランスファー・プロトコル(HTTP)を介して、通信するようにできる。また、分散型コンピューティング環境の特徴であり得るが、サーバーとして動作するコンピューティング・オブジェクト1110、1112などは、例えば、コンピューティング・オブジェクトまたはデバイス1120、1122、1124、1126、1128などのようなクライアントとして働くこともできる。
【0076】
例示的なコンピューティング・デバイス
[0090] 述べたように、好都合なことに、ここで説明した技術は、コンピューティング・システムにおいて動的コード生成を行うことが望ましい任意のデバイスに、適用することができる。従って、手持ち型、ポータブル、および他のコンピューティング・デバイス、および全ての種類のコンピューティング・オブジェクトを、様々な実施形態と関連して、即ち、デバイスのリソース使用を望まれるように最適化するところにおいて、使用することを考えていることが、理解される。従って、
図12における以下で説明する汎用リモート・コンピューターは、コンピューティング・デバイスの単なる一例である。
【0077】
[0091] 実施形態は、部分的に、デバイスまたはオブジェクトに対するサービスの開発者による使用のために、オペレーティング・システムを介して実施することができ、かつ/または、ここで説明した様々な実施形態の1以上の機能的特徴を実施するように動作するアプリケーション・ソフトウェア内に含ませることができる。ソフトウェアは、クライアント・ワークステーションやサーバーや他のデバイスなどのような1以上のコンピューターで実行されるプログラム・モジュールなどのような、コンピューター実行可能命令の一般的なコンテキストで説明することができる。コンピューター・システムは、データの通信に使用できる様々な構成およびプロトコルを有し、従って、特定の構成やプロトコルが限定と考慮されないことを、当業者は理解するであろう。
【0078】
[0092] 従って、
図12は、適切なコンピューティング・システム環境1200の一例を示すものであり、このコンピューター・システム環境において、ここで説明した実施形態の1つまたは態様を実施することができる。なお、上記で明らかにしたが、このコンピューター・システム環境1200は、適切なコンピューティング環境の単なる一例であり、使用や機能の範囲に関する限定を示唆することを意図していない。更に、このコンピューター・システム環境1200は、この例示的なコンピューター・システム環境1200において示されるコンポーネントの何れか又はコンポーネントの組み合わせの何れかと関連する依存性を有するものとして解釈することを、意図していない。
【0079】
[0093]
図12を参照すると、1以上の実施形態を実施するための例示的なリモート・デバイスは、コンピューター1210の形態の汎用コンピューティング・デバイスを含む。コンピューター1210のコンポーネントは、処理ユニット1220、システム・メモリ1230、およびシステム・メモリを含む様々なコンポーネントを処理ユニット1220と結合するシステム・バス1222を含み得るが、これらには限定されない。
【0080】
[0094] コンピューター1210は、典型的には、様々なコンピューター読取可能媒体を含み、それらは、コンピューター1210によりアクセス可能な任意の使用可能な媒体とすることができる。システム・メモリ1230は、リード・オンリー・メモリ(ROM)および/またはランダム・アクセス・メモリ(RAM)などのような揮発性および/または不揮発性のメモリの形態のコンピューター・ストレージ・メモリを含むことができる。限定ではなく例として、システム・メモリ1230はまた、オペレーティング・システム、アプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データを含むことができる。更なる例に従うと、コンピューター1210は、様々な他の媒体(示していない)を含むことができ、それらは、RAM、ROM、EEPROM、フラッシュ・メモリ、または他のメモリ技術、CD−ROM、デジタル・バーサタイル・ディスク(DVD)、または他の光ディスク・ストレージ、磁気カセット、磁気テープ、磁気ディスク記憶装置、または他の磁気記憶装置、または望まれる情報を格納するために使用できる有形の媒体および/または非一時的な媒体を含むことができるが、これは限定ではない。
【0081】
[0095] ユーザーは、入力デバイス1240を通じてコンピューター1210へコマンドおよび情報を入力することができる。また、モニターまたは他のタイプのディスプレイ・デバイスも、出力インターフェース1250などのようなインターフェースを介してシステム・バス1222へ接続される。また、このコンピューターは、モニターに加えて、他の周辺出力デバイス、例えば、スピーカーやプリンターを含むことができ、それらも出力インターフェース1250を通じて接続することができる。
【0082】
[0096] コンピューター1210は、リモート・コンピューター1270などのような1以上の他のリモート・コンピューターへの論理接続、例えば、ネットワーク・インターフェース1260を用いて、ネットワーク型または分散型の環境で動作することができる。リモート・コンピューター1270は、パーソナル・コンピューター、サーバー、ルーター、ネットワークPC、ピア・デバイス、または他のコモン・ネットワーク・ノード(common network node)、または他の任意のリモートの媒体の消費または伝送のためのデバイス(remote media consumption or transmission device)であり得、また、上記でコンピューター1210と関連して説明したエレメントの何れかまたは全てを含み得る。
図12に示す論理接続は、ローカル・エリア・ネットワーク(LAN)やワイド・エリア・ネットワーク(WAN)などのようなネットワーク1272を含むが、他のネットワーク/バスを含むこともできる。そのようなネットワーク環境は、家庭、オフィス、エンタープライズ・ワイド・ネットワーク、イントラネット、およびインターネットにおいて一般的なものである。
【0083】
[0097] 上述のように、様々なコンピューティング・デバイスおよびネットワーク・アーキテクチャーと関連させて例示的な実施形態を説明したが、基礎的な概念は、任意のネットワーク・システムおよび任意のコンピューティング・デバイスまたはシステムに、適用することができる。
【0084】
[0098] また、同じまたは類似の機能を実施するための複数の手法、例えば、適切なAPI、ツール・キット、ドライバー・コード、オペレーティング・システム、コントロール、スタンドアローンまたはダウンロード可能なソフトウェア・オブジェクトなどがあり、これらは、アプリケーションおよびサービスが、ここで提供される技術の利点を得ることを可能にする。即ち、ここでの実施形態は、API(または他のソフトウェア・オブジェクト)の観点から、およびここで説明した1以上の実施形態を実現するソフトウェア・オブジェクトまたはハードウェア・オブジェクトの観点から予期される。即ち、ここで説明した様々な実施形態は、完全にハードウェアの態様、部分的にハードウェアであり部分的にソフトウェアである態様、およびソフトウェアの態様を有することができる。
【0085】
[0099] ここでは、「例示」という単語は、例や、事例や、実例を意味するものとして用いている。疑いをなくすためであるが、ここで開示した主題事項は、そのような例により限定されない。更に、ここで「例示」として説明した何れの態様や設計も、他の態様や設計よりも好適または好都合であると必ずしも解釈されるものではなく、また、当業者に知られた等価の例示的な構成および技術を除外することを意味しない。更に、用語「含む(includes)」、「有する(has)」、「包含する(contains)」、および類似の他の単語が使用される範囲において、疑いをなくすためであるが、それらのような用語は、何れの追加のエレメントや他のエレメントも除外しない、開かれた接続させるための語(open transition word)としての用語「含む(comprising)」と同様の様式で、含むことを意図している。
【0086】
[00100] 上述のように、ここで説明した様々な技術は、ハードウェアまたはソフトウェア、または、適切である場合にはそれらの組み合わせと関連して、実施することができる。ここで使用しているように、用語「コンポーネント」、「システム」、およびそれらと同様のものは、同様に、コンピューター関連エンティティを示すことを意図しており、それは、ハードウェア、ハードウェアとソフトウェアとの組み合わせ、ソフトウェア、または実行中のソフトウェアの何れかである。例えば、コンポーネントは、プロセッサーで実行されるプロセス、プロセッサー、オブジェクト、実行可能ファイル、実行のスレッド、プログラム、および/またはコンピューターであり得るが、これらには限定されない。例として、コンピューターで実行されるアプリケーションとコンピューターとの双方を、1つのコンポーネントとすることができる。1以上のコンポーネントが、1つのプロセスおよび/または実行のスレッドの中に存在することがあり、また、コンポーネントは、1つのコンピューターにローカライズされることも、2以上のコンピューターに分散されることもできる。
【0087】
[00101] 上記のシステムは、幾つかのコンポーネントの間での対話と関連して説明した。そのようなシステムおよびコンポーネントが、上記のものの様々な置換や組み合わせに従って、それらのコンポーネントまたは指定されたサブコンポーネント、指定されたコンポーネントまたはサブコンポーネントのうちの幾つか、および/または追加のコンポーネントを含むことができることは、理解できる。また、サブコンポーネントは、親コンポーネント内に含まれるもの(階層的)としてではなく、他のコンポーネントと通信するように結合されたコンポーネントとして実施することができる。更に、1以上のコンポーネントを、1つのコンポーネントへと組み合わせて統合された機能を提供できること、また、幾つかの個別のサブコンポーネントへと分割できることに、留意されたい。また、そのようなサブコンポーネントへ通信するように結合する任意の1以上の中間層、例えば管理層(management layer)などを提供することにより、統合した機能を提供できることにも、留意されたい。また、ここで説明した何れのコンポーネントも、ここで特に説明していないが当業者には一般に知られている1以上の他のコンポーネントと、対話することができる。
【0088】
[00102] 上記で説明した例示的なシステムを考慮すると、説明した主題事項に従って実施され得る方法も、様々な図のフローチャートを参照して理解することができ。説明を簡素にする目的で、方法は一連のブロックで示されて説明されているが、様々な実施形態はブロックの順序により限定されないことが、理解および認識される。なぜなら、幾つかのブロックは、ここで示されて説明された順とは別の順で生じることや、他のブロックと同時に生じることがあるからである。非順次的な、または分岐した流れをフローチャートにより示す場合において、同じまたは類似の結果が得られる様々な別の分岐、フロー経路、およびブロックの順序を実施できることを、理解することができる。更には、ここで説明した方法を実施するために、例示した全てのブロックを必要としない場合もある。
【0089】
[00103] ここで説明した様々な実施形態に加えて、対応するエレメント(1以上)の機能から逸脱せずに同じまたは等価の機能を行うために、他の類似の実施形態を使用できることや、説明した実施形態(1以上)に対する変更や付加を行えることも、理解される。更に、複数の処理チップや複数のデバイスが、ここで説明した1以上の機能の性能を共有することができ、同様に、ストレージは、複数のデバイスにわたって作用することができる。従って、本発明は、何れの1つの実施形態によっても限定すべきではなく、特許請求の範囲に従った幅、精神、および範囲で解釈すべきである。