JP6054397B2 - スクリプト・コードを有するマークアップ・コンテンツの高速プレゼンテーション - Google Patents

スクリプト・コードを有するマークアップ・コンテンツの高速プレゼンテーション Download PDF

Info

Publication number
JP6054397B2
JP6054397B2 JP2014528481A JP2014528481A JP6054397B2 JP 6054397 B2 JP6054397 B2 JP 6054397B2 JP 2014528481 A JP2014528481 A JP 2014528481A JP 2014528481 A JP2014528481 A JP 2014528481A JP 6054397 B2 JP6054397 B2 JP 6054397B2
Authority
JP
Japan
Prior art keywords
code
script
script code
work
readable storage
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2014528481A
Other languages
English (en)
Other versions
JP2014525632A5 (ja
JP2014525632A (ja
Inventor
ルッコ,スティーヴン
ラフレニエール,ルイス
マン,カーティス・チェン−チェン
レザーズ,ポール・エイドリアン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2014525632A publication Critical patent/JP2014525632A/ja
Publication of JP2014525632A5 publication Critical patent/JP2014525632A5/ja
Application granted granted Critical
Publication of JP6054397B2 publication Critical patent/JP6054397B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/48Incremental compilation

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Description

[0001] ウェブ・ブラウジングのエクスペリエンスは、最小の対話機能を用いての情報の平坦なプレゼンテーションから、クライアント側での多くの対話機能を用いてのアプリケーションやアプレットでの富んだエクスペリエンスへ、より一般的には、情報表示と、表示上のオブジェクトとの豊かな対話機能とのハイブリッドへと、発展してきた。従って、本来はクライアントのネイティブ・コードに基づいての情報の平坦なプレゼンテーションのために最初に設計された古いドキュメント・オブジェクト・モデル(DOM)を、JavaScript(登録商標)オブジェクトなどのようなスクリプト・コードを滑らかに処理するエクスペリエンスへと進化させる、ということに基づいた様々なチャレンジがある。例えば、ユーザー・エクスペリエンスを速いものにすることは、残されているチャレンジである。
[0002] 例えば、過去のフライ・アウト・メナューでは、ウェブ・エクスペリエンスにおいて、サーバーとの通信に基づく遅延によりちらつきが生じた。スクリプトは、小型プログラムに、追加の支援を得るためにサーバーへ戻ることなくオン・ザ・フライでDOMを変更させることを可能にし、これの例は、Asynchronous JavaScript(登録商標)およびExtensible Markup Langage(Ajax)である。開発者や消費者などは、サーバーへ戻ることなくオン・ザ・フライで、より動的なものを望むので、クライアント側でのスクリプト・コードの実行を速くすることが、チャレンジとなっている。
[0003] ユーザー・エクスペリエンスはDOMのスクリプティングを中心としているので、DOMを変更することは、対話応答を徐々に低下させていく。スクリプト・エンジンとネイティブ・クラスのDOMとの対話には、任意のオブジェクトをスクリプト可能にする一組のインターフェース、iDispatch、iAcriveScriptなどを含むOLE自動化を使用していたので、従来は良好ではなかった。更に、今日では、不要であり得る様々なコンポーネント・オブジェクト・モデル(COM)・オブジェクトが乱雑に生成され得るので、性能が低下させられる。
[0004] クライアント側スクリプティングは、クライアントのブラウザーへ入れられたユーザー入力に対するウェブ・ページの応答を、サーバーとの1以上の往復通信を避けることにより向上させるものであり、クライアント側スクリプティングは、一般に、ウェブ上で、サーバー側(ウェブ・サーバー上)ではなく、クライアント側でユーザーのウェブ・ブラウザーにより実行されるクラスのコンピューター・プログラムを参照する。例として、クライアント側スクリプティングは、ダイナミック・ハイパーテキスト・マークアップ・ランゲージ(ダイナミックHTMLまたはDHTML)の一部であり、例えば、JavaScript(登録商標)(クライアント側のJavaScript(登録商標))やVBScriptなどのようなスクリプト言語で、ウェブ・ページがスクリプト化されることを可能として、ユーザー入力や、時刻などのような環境的条件や、他の変数に応じて、異なるおよび変化するコンテンツを有するようにする。
[0005] マークアップ・ドキュメント内に埋め込まれるクライアント側スクリプトは、「埋め込みスクリプト」と呼ばれる場合がある。別のファイルに含まれ、そのファイルを用いるドキュメント(1以上)により参照されるスクリプトは、「外部スクリプト」と呼ばれる場合がある。リクエストに応答して、そのようなスクリプト・ファイルは、そのファイルが存在するウェブ・サーバー(1以上)などのようなネットワーク・コンピューティング・デバイスによりユーザーのコンピューターへ送られる。この点に関して、スクリプトを実行して、そのスクリプトからの可視出力を含むマークアップ・ドキュメントを表示するために、ウェブ・ブラウザーは、スクリプト・エンジンと共に働いて、スクリプト・コードのパース(parse)およびコンパイルを行う。クライアント側スクリプトはまた、ボタンのクリックなどのような特定のユーザー・アクションに応じてブラウザーに従わせる命令を含む。多くの場合、それらの命令に対しては、サーバーとの更なる通信を行わずに、従うようにされる。
[0006] ユーザー・インターフェースの進歩により、傾向として、ウェブ・ブラウザーおよびウェブ・ページは多くのクライアント側スクリプティングを用いる傾向があり、そのようなインターフェースでは、ユーザーは、ウェブ・ページのフレンドリーではない「リフレッシュ」を経験せず、それに代えて、例えば、アニメーション化したグラフィック・インターチェンジ・フォーマット(GIF)・ファイルを表すアイコンを見ることになり、これは、GIFファイルに対してのリクエストが生じたことと、そのページの部分が間もなく更新されることとを表す。JavaScript(登録商標)へ能力を付加することにより、Ajaxは、クライアント・マシンおよびスクリプト化ドキュメントの開発者が、新たなバージョンのページを要求またはレンダリングする必要無しにバックグラウンドで、ウェブ・サーバー(1以上)などのようなネットワーク・コンピューティング・デバイスと通信することを可能にする。
[0007] 一般的に、ユーザー・エクスペリエンスにおける改善へ導くが、これは、クライアント側でのセットアップに長い時間を要するといった他の待機時間をもたらす。例えば、上位100のウェブのプロパティについての場合の傾向のように、ウェブ・サイトにおいて大量のスクリプティングが用いられている場合や、ネットワーク・データ転送レートが遅い場合や、クライアントでのプロセッシングが制限されている場合などには、スクリプト・エンジンは、マークアップ・ドキュメントのコンテンツのプレゼンテーションのための実行可能コードの全てを渡すために長い時間を要し、それによりユーザー・エクスペリエンスが良好ではなくなる。
[0008] この点に関し、従来のウェブのブラウジングは、スクリプト・エンジンによる実行可能コードの生成を非効率的にするような形で、発展してきた。なぜなら、スクリプト・エンジンはスクリプト・コードの生成に関しての区別を行わず、それりより、スクリプト・エンジンがスクリプト化したマークアップ・ドキュメントのプレゼンテーションのための作業を完了するまでの間に、望まれない遅延時間が生じたからである。このような望まれない遅延時間は、特に、対話の開始前に全てのウェブ・サイト機能をロードすることをユーザーが必要としない又は待つことを望まない場合に、ユーザー・エクスペリエンスを大きく低下させる。
[0009] 今日のスクリプト・エンジンおよびコード生成の上記の欠点は、単に、従来のシステムの問題の幾つかの問題の概観を示すことを意図したものであり、網羅的であることを意図していない。現状水準での問題、および限定ではない様々な実施形態のうちの幾つかの実施形態の対応する利点は、以下の詳細な説明を検討することにより、更に明らかになる。
[0010] ここで、より詳細な説明および添付の図面において示す、例示であり限定のためではない実施形態の様々な構成の基礎的又は一般的な理解を可能にする手助けとして、簡素化した概要を提供する。なお、この概要は、詳細な又は網羅的な概観であることを意図していない。この概要の唯一の目的は、下記の様々な実施形態のより詳細な説明の前置きとして、例示であり限定ではない幾つかの実施形態と関連する幾つかの概念を、簡素化した形で示すことである。
[0011] 例示的な実施形態では、方法は、コンピューティング・デバイスのスクリプト・エンジンにより、スクリプト・コードを受け取ることと、スクリプト・コードは、コンピューティング・デバイスのブラウザー・アプリケーションにより受け取られるマークアップ・ドキュメントに含まれるか又はマークアップ・ドキュメントにより参照されるものであることと、スクリプト・エンジンによりスクリプト・コードへ適用されるマルチフェーズ・コード準備プロセスの少なくとも1つのフェーズへ適用する作業レベル(level of effort)を決定することとを含む。作業レベルは、ブラウザー・アプリケーションによるスクリプト・コードの一部の呼び出しの予測または分析に基づいて、またはブラウザー・アプリケーションによるスクリプト・コードの一部の過去の使用において観察されるパターンに基づいて、決定することができる。
[0012] 別の例示的な実施形態では、コンピューティング・デバイスは、スクリプト・コードを含む又は参照するマークアップ・ドキュメントを表示するように構成されるブラウザー・アプリケーションと、スクリプト・エンジン・コンポーネントとを含み、スクリプト・エンジン・コンポーネントは、スクリプト・コードを受け取り、スクリプト・コードの部分を分析するか、またはスクリプト・コードの実行中にその部分の使用を分析し、その部分の性能を、変更された部分の実行により向上させることになる一組の条件を決定するものであり、遭遇している一組の条件に応じて、その部分の代わりに、変更された部分がブラウザー・アプリケーションにより実行される。
[0013] 別の例示的な実施形態では、コンピューター読取可能格納媒体は、コンピューター読取可能命令を含み、コンピューター読取可能命令は、実行に応答して、少なくとも2個のプロセッシング・コアを含むコンピューティング・デバイスに動作を行わせ、この動作は、少なくとも2個のプロセッシング・コアのうちの第1プロセッシング・コアにより、スクリプト・コードを含む又は参照するマークアップ・ドキュメントを処理することを含み、この処理は、第1プロセッシング・コアにより、マークアップ・ドキュメントのスクリプト・コードにより表される関数(機能)を可能にする実行可能コードを生成することを含む。動作は、更に、スクリプト・コードの特性に基づいて、少なくとも2個のプロセッシング・コアのうちの第2プロセッシング・コアにより、実行可能コードとは異なる代替的実行可能コードを選択的に生成し、第1プロセッシング・コアによるスクリプト・コードの更なる実行のために、実行可能コードを代替的実行可能コードと取り替えることを含む。
[0014] 代替的実行可能コードを生成することは、スクリプト・サイズの少なくとも1つのループのサイズとスクリプト・コードの全体サイズとの比率の関数、またはスクリプト・コードの演算強度(computational intensity)の測定値、またはスクリプト・コードに基づいて構築されたコール・ツリー(call tree)の分析に基づいて、代替的実行可能コードを選択的に生成することを、含むことができる。
[0015] 他の実施形態、および限定ではない様々な例、シナリオ、および実装については、後に詳細に説明する。
[0016] 限定ではない様々な実施形態は、添付の図面を参照して説明する。
図1は、マルチフェーズ・コード準備プロセスの1以上のフェーズへ適用する作業レベルを決定するための方法の例を示すフロー図を示す。 図2は、様々な実施形態に従った、コード準備の間にコードに適用され得る様々なステージの例を示す。 図3は、様々な実施形態に従った、作業の様々なレベルを適用できる所与のフェーズの複数のサブレベルがあり得ることを示すブロック図である。 図4は、実施形態における、実行の様々な条件に基づいた、コードに対しての代替的なループ・ボディの生成を示すブロック図である。 図5は、実施形態における、動的タイピングに基づく動的コードの生成および実行の間のコード・スワッピングの別の限定ではない実施形態を示す。 図6は、実施形態における、ブラウザー・アプリケーションとスクリプト・エンジンとの間での交換の例を示すフロー図である。 図7は、実施形態における、解釈したコードを実行するスレッドと最適化したコードを生成するスレッドと対応するデータ構造の組との間のバランスを示すブロック図である。 図8は、実施形態に従った、コード最適化のための作業アイテムの優先度の再付与を示すブロック図である。 図9は、実施形態における、置換のための最適化したコードを生成するための、限定ではないプロセスを示すフロー図である。 図10は、様々な実施形態に従った、スクリプト・エンジンとブラウザー・アプリケーションとの間での対話を含む、例示であり限定ではないデバイスを示すブロック図である。 図11は、ここで説明する様々な実施形態を実施することができる、例示であり限定ではないネットワーク化した環境を表すブロック図である。 図12は、ここで説明する様々な実施形態の1以上の構成を実施することができる、例示であり限定ではないコンピューティング・システムまたは動作環境を示すブロック図である。
概観
[0029] 背景において示したように、DHTMLドキュメントなどのようなマークアップ・ドキュメントにおいて、より多くの埋め込みまたは外部のスクリプト・コード、例えば、JavaScript(登録商標)などを含めるという傾向により、ユーザー・エクスペリエンスは良くないものとなる場合があり得、そのようなユーザー・エクスペリエンスでは、従来のスクリプト・エンジンにより適用される従来の動的コード生成プロセスにより、過度の遅延が生じる。
[0030] この点に関して、動的コード生成では、その特性の幾つかに起因して、幾つかのチャレンジが内在する。例えば、JavaScript(登録商標)などのような動的にタイピングされる言語では、コードが実際に実行されるまで、データの様々なアイテムが呈するタイプを判断することが可能ではないことが多々あり、例えば、動的にタイピングされた変数が整数か浮動かストリングかを、コードが実際に実行されるまで知ることができないことがある。
[0031] 更に、JavaScript(登録商標)がホストされる方法についての広いコンテキストは、別の差を生じさせる。なぜなら、CNN.comの番組などのような、ウェブ・ページの一部になるという目標を有するプログラムに関しては、プログラムを同時に実行しているときに、ネイティブ・コードを使用するためにプログラムを動的にコンパイルする要求が、重要になるからである。例えば、上位100のウェブ・サイトの1つの特徴は、それらが実際に実行するコードよりもかなり多くのコードをロードすることである。この点に関してのチャレンジは、単に高速でコードの実行を試みることではない。幾つかのウェブ・サイトでは、最終的に所与のユーザまたは時間に対して実行するのは、ロードしているコードの約15%〜20%のみである。従って、ロードやパースなどのようなプロセスにおける別のボトルネックがあることに起因しており、単にコードを高速で実行することを超えた、別のチャレンジがある。これは、単にJava(登録商標)を高速で実行することとは異なるコンテキストである。なぜなら、ロードおよびパースを最小限にして、使用されない又は使用される可能性の低いコードに対して行われるコード準備の量を低減するという異なる目標が含まれるからである。
[0032] 「ホット・スポット」という用語は、実行中のプログラムにおいて多く用いられる関数に関する専門語である。しかし、ここでの実施形態においてここで考慮する問題は、マークアップ・ページを受け取ることからウェブ・ページを呈示することまでのチェーン全体を通じてコード準備を避け、要求された関数を実行すること、例えば、ロードを避ける又は延期する、パースを避ける又は延期する、コンパイルを避ける又は延期する、コード実行の最適化を避ける又は延期することなどにも関係するという点に関して、より広いものである。即ち、主題の開示は、プレゼンテーション・コンテンツにおいて参照された又は受け取られたスクリプト・コード、例えば、限定ではないが、ウェブ・ページ・リクエストに応答してネットワークから受け取ったマークアップ・コンテンツにおいて参照されたスクリプト・コードなどのようなスクリプト・コードの準備を調整して、準備と関連する遅延を低減させてプレゼンテーション・コンテンツをユーザーに対して表示することを可能とすることと関連する。
[0033] 従って、本願において示す様々な実施形態において、コードの準備が低減されるが、これは、例えば、マークアップ・ドキュメントと関連するUIを可能な限り速く呈示するために可能な限り少ない量のコードの準備を行うことと、ロード、パース、解釈などを可能な限り延期することとを目標として行われ、この延期では、例えば、きびきびとUIを表示することの妨げとなるアイテムのための様々なコードの準備のステージまたはサブステージを、そのコードが実際に要求されるまで又は特定の条件に遭遇するまで、延期する。
[0034] 更に、解釈または実行の間におけるコードの観察を通じて、コードに関して共通の実行パスのケースを決定できる場合、後に詳細を示す様々な実施形態において、ネイティブ・コードの2個のバージョンを維持することができ、その一方は、共通のケースに対して最適化または改善されたものであり、他方のバージョンは、共通ではないケースに対してのみ使用される。これらの概念は、ネイティブ・コードの2個より多くのバージョンと、それらと関連する使用のケースとに対して拡張することができ、その場合において、2個より多くの使用のケースを支持すると効率が良くなり、切り換えのためのコストも大きくはない。
[0035] 後に詳細に示す更に別の実施形態では、準備ができている情報に応答して情報の表示を優先する様式で複数のコアを用いることができ、これは、1つのコアまたは一組のコアで情報を呈示するためのUIスレッドを維持し、別のコアまたは一組のコアで上記のコード準備プロセスの最適化および管理をJIT(ジット)すること又は適用することを行うことにより、行われる。これに関して、作業キューなどのようなデータ構造は、変更されたネイティブ・コードを生成する最適化および管理コアと、ユーザに対してのウェブ・サイトの表示を可能なかぎり速く行っているUIコアとの間で情報を共有するために、維持することができる。更に、様々な実施形態において、UIコアには、所与の状況に対して実行するためのコードの代替的ピースが使用可能であるという通知が与えられ、それにより、コードの代替的ピースを、UIコアによる実行に対してスワップ・インすることができるが、その際にUIコアにより現在実行中のコードを妨げない。
[0036] 他の実施形態および様々な限定ではない例、シナリオ、および実装を、以下で更に詳細に説明する。
コンテンツの高速プレゼンテーションのための、スクリプト・コードの、延期および最適化されるコード準備
[0037] 先に述べたように、ここで示す様々な実施形態において、コード準備は、低減または延期されるが、これは、例えば、限定ではないが、マークアップ・ドキュメントと関連するUIを可能な限り速く呈示するために可能な限り少ない量のコードの準備を行うことと、ロード、パース、解釈、最適化などを可能な限り延期することとを目標として行われ、この延期では、例えば、きびきびとUIを呈示することの妨げとなるアイテムのための様々なコード準備のステージまたはサブステージを、後のときまで又は実際に要求されるまで、延期する。
[0038] 図1は、マルチフェーズ・コード準備プロセスの1以上のフェーズへ適用する作業レベル、例えば、作業無し、部分的パースのみ、パース、割り込み、コードを最適化するためのコードの実行の監視など、を決定するための方法の例を示すフロー図を示す。100において、スクリプト・コードが、コンピューティング・デバイスのスクリプト・エンジンにより受け取られる。スクリプト・コードは、コンピューティング・デバイスのブラウザー・アプリケーションにより受け取られたマークアップ・ドキュメントに含まれているか、またはそのマークアップ・ドキュメントにより参照されている。100において、スクリプト・エンジンによりスクリプト・コードへ適用されるマルチフェーズ・コード準備プロセスの少なくとも1つのフェーズに適用するための作業レベルが、決定される。120において、作業レベルの決定は、マークアップ・ドキュメントの表示と関連してスクリプト・コードの少なくとも一部がブラウザー・アプリケーションによりどれだけ呼び出されるか、についての予測または観察に基づいて作業レベルを決定すること、または、130において、マークアップ・ドキュメントの表示と関連してのブラウザー・アプリケーションによるスクリプト・コードの少なくとも一部の過去の使用において観察されたパターンに基づいて、作業レベルを決定すること、または120と130との双方を行うことを、含むことができる。
[0039] 例えば、図2に示すように、コードを受け取った後の最初のステージとして、そのコードを完全にパースする代わりに、オプションとして、適用する作業を少なくすることができる。例えば、パースを行わないようにすることや、括弧の一致(brace matching)により、単に関数の開始部と終了部とを決定するための部分的パースを行うことができる。例えば、括弧の一致を用いて、スクリプト・エンジンは、コード200を受け取り、ブラウザー・アプリケーションにより呼び出された関数が見つかるまで、部分的にパースされたコード202におけるN個の関数、メソッド1、メソッド2、メソッド3、メソッド4・・・、メソッドNの境界がどこにあるかの決定を行うことができる。例えば、コード202のメソッド4が実際に呼び出された場合、スクリプト・エンジンは、単に、メソッド1、メソッド2、およびメソッド3の開始部と終了部とを決定することにより、メソッド4のパースおよび解釈を開始して、パースされ解釈されたメソッド4 204を得ることができる。即ち、パースおよび解釈はコード準備ステージの例であり、作業レベルに関する特定の決定により示されるように、高優先度のコードは多くのリソースを用いて扱い、低優先度のコードは少ないリソースを用いてまたはリソースを用いずに扱うように、このような作業レベルを決定して適用することができる。
[0040] 解釈の間、スクリプト・エンジンはまた、メソッド4の特性を観察して、メソッド4を行うために生成される実行可能コードを改善することができ、その改善は、例えば、メソッド4のメモリ使用の改善や、メソッド4を更に効率的にすることである。例えば、スクリプト・エンジンが、メソッド4内に多く実行されるループがあると判定して、そのループに対して更なる最適化リソースを適用する場合や、スクリプト・エンジンが、コードのピースに対しての特定の変数のタイプが、予想通りにまたは決定論的に、整数であると決定する場合があり、その場合にはより効率的な表現を用いることができる。これに関して、動的プログラムは、ランタイムにおいて異なるタイプを呈する変数を有することができるが、プログラマーは、設計または表現を簡素化するためのパターンを用いるコードを開発する傾向があり、例えば、プログラマーは、一貫して、整数を格納するための変数を用いるか、または、予想通りにまたは決定論的に、ストリングである変数を用いる。これに関して、解釈の間、スクリプト・エンジンは、そのようなパターンを観察し、次に、メソッド4のための実行可能コード206の生成/コンパイルのためのコード準備を簡素化することができる。
[0041] 更なる動作として、後に別の実施形態において詳細に説明するが、実行可能コード206の挙動も、コードの実行の間に観察することができ、その場合において、典型的なケースにおいてのコードの実行の仕方について更なる観察を行うことができ、それにより、実行可能コード206に対して、変更された実行可能コード208の形へと更なる変更を行うことを可能にし、次に、将来の実行または将来の実行の幾つかのために、その変更された実行可能コード208により実行可能コード206を置換することができる。従って、様々な実施形態において、コード準備のマルチフェーズ、例えば、パース、解釈、コンパイル、実行、または何れかのフェーズのサブフェーズのうちの何れかにおいて、これらの活動のそれぞれは様々なコード準備ステップへと分割でき、それらのステップに作業レベルを適用できるので、作業レベルを決定することができ、また、作業レベルが、即時リソースを要求しないものである場合、それと関連するコード準備のフェーズまたはサブフェーズを延期することができ、実質的に、ブラウザー・アプリケーションにより実際に要求されているコード準備へ、またはブラウザー・アプリケーションにより実際に多く要求される可能性又は近い将来に呼び出される可能性の高いコード準備へ、即時リソースを割り当てる。
[0042] 従って、1つの構成では、コード準備の延期は、コード準備の様々なステージおよびサブステージを通して、またはそれらの中で可能なときに行われる。これは、単に、スクリプト・コードからネイティブ・プロセッサー・コードへの変換を延期するだけではなく、ここで説明する実施形態がパース、解釈、バイトコードの生成などを遅延する、即ち、所与のコードのピースに対して適用される関連する作業レベルに基づいて、コード準備の何れかのステージまたはサブフェーズを延期するという点において、より広く適用可能である。
[0043] 上述のように、ここで開示する実施形態は、「ホット・スポット」という用語の典型的な専門的使用よりも広範であり、ホットな関数(例えば、多く実行される関数)を観察し、ランタイムにおいて、コールドな関数よりもホットな関数の準備のために、より多くの作業を行う。これらの実施形態は、コード準備における任意の数Nのフェーズを考慮し、作業レベルは、コードの予測された又は観察された使用に基づいて、各フェーズに対して決定することができる。更に、所与のフェーズの複数のサブフェーズもあり得、それらに対しても異なる作業レベルを適用することができる。
[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)などを含むことができる。
[0045] 図3では、それぞれに3個のサブステージを持つ3個のステージが示されているが、代替の実施形態では、任意の階層関係に従って、または他の任意の又はオプションのコード準備プロセスに従って、任意の数のステージおよびサブステージが考慮され、コード準備プロセスの所与の分岐やノードに対して作業レベルを割り当てることができることに、留意されたい。例えば、限定ではない別の例として、スクリプト・エンジンは、「ウォーム(warm)」コードに関してはその合計10個のフェーズのうちの3個のフェーズを実行し、「コールド」コードに関してはその10個のフェーズのうちの1個のみを実行するが、最もホットなコードのサブセットの10個のフェーズの全てを実行することを、決定する。言い換えると、コード準備プロセスの任意の数のフェーズに対して、作業レベルは、実行中のプログラムによりどれだけコードが使用されているかと、そのコードについておよびコードの使用についての情報とに基づいて、時間の関数としてネイティブ・マシン命令の最も有効なシーケンスを出すところに、調節または調整することができる。
[0046] 従って、コード準備のフェーズまたはサブフェーズの延期に加えて、ここでの実施形態は、時間が経つ間に、所与の組のコードまたは関数の最適化に対してリソースが使用可能になると又はコミットされると、コードの実行についての予測または実際の観察に基づいて、代替コードを生成することを説明する。例として、New York Times(ニューヨーク・タイムズ)のオンライン・サイトなどのような多く使用されるウェブ・サイトでの平均的なユーザー・エクスペリエンスは約5〜10分であるが、ユーザの観点からは、スクリプト・エンジンによるニューヨーク・タイムズの多くのコア関数の観察、例えば、ページのレイアウトの方法、スタイル情報の取得、データの取得など、に要する時間は僅かである。これに関しては、新たなページのレイアウトのための数百の方法があるわけではなく、従って、スクリプト・エンジンは、ニューヨーク・タイムズの記事を読むための共通コード・パス(1以上)が何であるかを、比較的速く、完全に又は殆ど観察することができ、その後、その記事を読むため又は更なる記事を読むために代替コードの生成を開始することができる。
[0047] 図4は、実行における異なる条件に基づいた、コードに対する代替のループ・ボディの生成を示すブロック図である。例えば、実行の条件420に応じて、ループ・ボディ410、ループ・ボディ412、またはループ・ボディ414が、現在の条件に対するアプリケーションに対して、より速いもの又はより効率的なものである。従って、ループ・ボディ410を持つ実行可能コード400、ループ・ボディ412を持つ実行可能コード402、およびループ・ボディ414を持つ実行可能コード404のそれぞれを、予め生成することができ、また、ループ・ボディ410、412、または414を、プレゼンテーション・スレッドによりアドレスされた既存のコードに対してスワップ・イン又はスワップ・アウトして、適切な条件C1、C2、またはC3のそれぞれに対しての代替のボディを実行することができる。従って、単体で又は組み合わせた結果として条件C1、C2、またはC3となる任意の予め定めた設定条件A、B、Cなどに対して、コードの実行の効率を改善する作業における結果として、別のループ・ボディをスワップ・インすることができる。この例では、ループ・ボディの実行は代替に関しても最適化されるが、ここで説明する実施形態は、他の最適化方法や、ループ・ボディ以外のコードやコードの一部のスワップ・インやスワップ・アウトにも適用可能である。
[0048] 代替コードの生成の限定ではない更なる例として、コードの使用の予測またはコードの実行の実際の観察の結果として、時間のうちの95%にわたり、整数が、所与のデータ・アイテムに対するものであると決定できるか、又は所与のデータ・アイテムに対して格納されると決定できる場合には、例えば、x86プロセッサーで直接に使用するためのネイティブの整数レジスター・フォーマットを用いる最適化されたネイティブ・コードを生成することができ、従って、殆どの場合に生じるそのようなシナリオに対して、最適化されたネイティブ・コードを使用することができる。次に、希なケースが時間のうちの5%において起きる場合、特別のケースに対してスワップ・インできる別のバージョンのネイティブ・コードを用いて、変数を浮動(またはネイティブの整数レジスター・フォーマットよりも効率が低い何らかのもの)としてタイプ入力することができる。
[0049] 動的タイピングに基づく動的なコードの生成および実行の間のコード・スワッピングの別の限定ではない例を示す。これに関して、解釈の間にコード500の特性を観察することにより、または実行の間のコード500の観察の結果として、共通コードのパスまたは一組のパスがあると決定できる場合、ネイティブ・コード502または共通コード・パス(1以上)に適する他の代替物を生成することができ、次に、共通の度合の低いケースに実際に遭遇したとき又は遭遇する場合に、コード504を、その共通の度合の低いケースに関してスワップ・インを行うことができる。最適化されたネイティブ・コードの別バージョンを、ネイティブ・コードの別の使用のケースへ適用するためにスワップ・インすることについてのそのような構成は、以下で更に詳細に説明する。例えば、後に詳細に説明する別の実施形態では、ジャスト・イン・タイム(Just in time)・コンパイラーをコードのピースへ適用するか否かの判断にヒューリスティック(heuristics)が適用され、次に、コードのピースに対しての所与の状況の組の下で、「ジットされた」コードを実行するか、または、単にコードのピースを解釈する。
[0050] これに関して、図4および図5は、ここで説明される様々な実施形態の別の構成を示す。この構成では、コード生成プロセスは、コード準備のステージおよびサブステージの延期により導かれるだけではなく、解釈または実行の観察を通じてコード自体を考慮する、所有される様々な情報レベルにより通知され、それにより、代替コードが全インスタンスにおけるコードを単に置換できる場合に代替コードを生成するだけではなく、代替的状況に対しての代替コードを生成する(例えば、後に、ブラウザー・アプリケーションによる所与の関数コールに応じて、容易にスワップ・インまたはスワップ・アウトすることができる別のループ・ボディを生成する)。
[0051] 従って、上述のように、コードの挙動は推測または観察することができ、異なる状況、例えば共通ケースと非共通ケース、に対する別のコードの生成へと導き、共通ケースに対して代替のものを実行し、それにより、共通点が最も低いケースの制約無しに、全体的性能を改善する。従って、コード生成のインテリジェントな選択を、コードについての情報により通知することができ、例えば、コードが、予想通りにまたは決定論的に、変数を整数のアレイとして定めるように見えることを通知することができ、その場合、ループの先頭で高速の検査を行うコードを生成して、整数のアレイであることを確認し、そのように想定し、その整数のアレイの構成用に調整されたより効率的なループを用いるようにする。
[0052] 図6は、ブラウザー・アプリケーション630とスクリプト・エンジン640との間での交換の例を示すフロー図である。ブラウザー・アプリケーション630により受け取られたスクリプト・コード660は、スクリプト・コード660の重要性についての優先度情報無しで、スクリプト・エンジン640へ送られる。600において、スクリプト・エンジン640は、スクリプト・コード660のループ・ボディ、またはループ・ボディの使用を分析する。610において、変更されたループ・ボディを、特定の条件の下での使用のため、例えば、スクリプト・コード660の共通使用ケースのための最適化されたコードでの使用のために、生成することができる。620において、ループ・ボディを、遭遇している条件の組に応答して、変更されたループ・ボディと置換することができ、また、代替的には、ループ・ボディの先頭において検査を行い、共通使用ケースに遭遇したかを確認し、その結果として、ループ・ボディまたは変更されたループ・ボディを実行することができる。対応する実行可能コード670は、実行のためにブラウザー・アプリケーション630へ戻される。
[0053] これに関して、低優先度のコードがパースされ、生成され、最適化されることなどを待つことなく、スクリプト・エンジンの限られたコード生成リソースを、ユーザーに情報を高速で呈示するという目標へ向けるための上記の技術の応用を、下記の限定ではない例を参照して更に説明する。
[0054] 最初に、HTMLやDTHMLなどのようなマークアップ・ファイルは、スタイル・シートやJavaScript(登録商標)ファイルなどを有するブラウザー・アプリケーションにより受け取られる。ブラウザー・アプリケーションは、マークアップ・ファイルの様々なパートを分割し、次に、同時接続を用いて、そのマークアップで定められたJavaScript(登録商標)または他のファイルを、様々な異なるピースに対して1つ、ダウンロードする。様々な異なるピースが受け取られると、ブラウザー・アプリケーションは、何れのピースの優先度や重要度の情報も無しで、JavaScript(登録商標)ファイルをJavaScript(登録商標)エンジンへ送る。タイミングの問題で、スクリプト・エンジンは、コードの所与のピースを実行する準備を整えることを命令されることもある。しかし、コードの所与のピースを実行する要求は、それをブラウザー・アプリケーションが受信してから1ms内に起こり得るが、更に、対応するコードを生成するために30〜40msを要し、表示のためにUIパスにおいて更に5msを要するなどの場合、これらの遅延は積み重ねられて、ユーザー・エクスペリエンスに対して影響することになり得る。従って、上記のように、コード準備のステージおよびサブステージの延期や回避にインテリジェンスを適用できれば、好都合である。例えば、人間の視覚的および認識的な理解の問題として、100ms以上の遅延は、知覚可能な遅延となる。
[0055] 従って、別の例として、コードの所与のピースに関して、スクリプト・エンジンは、代わりに、パースを開始する前に1〜2msを使って関数の境界の場所を捜すことができ、スクリプト・エンジンは、コードへ「parse me later(これを後にパースせよ)」スタブを挿入し、それを僅か1〜2msパス後に戻すように渡すことができる。次に、後に、ブラウザー・アプリケーションが、例えば、コードのピースの関数Fを呼び出したい場合、コードの全ピースをパースすることをなおも避けつつ、追加の1〜2msを使ってコードのピースの関数Fのパースおよび実行を行うことができる。
[0056] 上記の別の実施形態に従って、例は更に広がり、スクリプト・エンジンは、コードのピースの関数Fのパースおよび生成の間に、変数Vが、予想通りにまたは決定論的に、整数であるかのように見えることを観察すること、または、Fを数回実行した後に、Vが、予想通りにまたは決定論的に、整数であることを確認することができ、次に、スクリプト・エンジンは、整数としてのVの表現に対しての専用化したコードを生成することができる。これに関して、スクリプト・エンジンは、これまでに起きたことを予測的に観察しつつ、要求されていることに対して可能な限り遅くに応答するように努力して、共通ケース(1以上)において生じる高速で更に効率的なコードを生成するように、更に進展させる。
[0057] 本開示の別の構成では、一方での、上記のコード生成の管理および最適化と、他方での、管理および最適化の完了を待たずにユーザーに対してUIを迅速に呈示することとの間でのバランス取りを達成するために、複数のコアが用いられる。従って、様々な実施形態において、最適化および管理は、主なUIスレッド(マウスのクリックなどのような入力に応答し、関連するコードを即座に実行し、例えば、入力に従ってビューを変更する)とは異なるスレッドで行われるが、他のプロセッシング・コアが、上記のインテリジェントなコード生成の実施形態の何れかに基づいて代替コードを同時に生成することもできる。
[0058] これに関して、様々な実施形態において、バランス取りプロセスが、マークアップ・ドキュメントのレンダリングを駆動するUIコアと、コードの生成を最適化する最適化/管理コアとの間で適用される。1つの実施形態では、最適化/管理コアは、代替ネイティブ・コードを生成する最適化/管理コアと、ユーザーに対してウェブ・サイトをレンダリングしているUIコアとの間で情報を共有するために、データ構造を管理する。UIコアは、高速での呈示に焦点を合わせており、従って、一般的に、ユーザーと向かい合うので、1つの実施形態では、UIコアと最適化/管理コアとは、共有される機構を含み、それにより、UIコアは、例えば、ウェブ・ページを表示する活動の中へと代替コードをスワップすることを待たず、その活動の速度を落とさずに、コードの所与のピースの代替的なまたは最適化されたバージョンのものを、それが使用可能になったときに、実行する。これに関して、以下の様々な実施形態において説明するように、上書きコードと代替コードとのコードの実行中における関連する問題を避ける機構を提供することができる。
[0059] 1つの実施形態において説明したように、バランス取りプロセスに対する非対称設計は、最適化/管理コアが、作業キューのメンテナンスの負荷と、コードのスワップ・インおよびスワップ・アウトの調整と、バックグラウンドでのコードの生成とに対処することとを保証し、それにより、UIコアは、待つことがなく、ユーザーに対して情報を表示するタスクを継続することができる。
[0060] 1つの限定ではない実装において、関数毎に実装されるfunction_infoと呼ばれる関数への呼び出しを行うことまたはその関数をチェックすることにより、UIスレッドは、呼び出しのためのネイティブ・エントリー・ポイントがあるか否かを検査することができ、ある場合、UIスレッドは、そのネイティブ・エントリー・ポイントに対して呼び出しを行う。ネイティブ・エントリー・ポイントは、コード生成の様々なフェーズにおけるコードのピースに対してのスタッブとすることができ、例えば、ネイティブ・エントリー・ポイントは、「generated code(生成されたコード)」スタッブや、コードのパースを行わせることへ導く「parse me(これをパースせよ)」スタッブや、「call the interpreter to run the code(コードを実行するためにインタープリターを呼べ)」スタッブであり得る。これに関して、UIスレッドは、スタッブのコンテンツに対してアグノスティック(agnostic)であり、単に、その時そこにあるものを、スタッブ呼び出しに従って、実行する。代替コードを生成できるとき、次の時にUIスレッドはコードを無視し、代替コードは、スタッブのチェックにより、古いコードを置換しているであろう。即ち、次のパスにより、UIスレッドは、新たなアドレスを指す「generated code」スタッブを介して代替コードへジャンプする。
[0061] 例えば、コードを、生成されたコードへと漸進的に動かすことの一部として、1つの実施形態において、最初のパスで、重要ではないコードはパースされないが、「parse me」スタッブが挿入され、それにより、次のパスにおいて、またはUIスレッドがコードに次に遭遇したときに、コードがパースされる。コードが次に呼び出されたときに、バイトコードが生成され、次に、インタープリターを呼び出してバイトコードを実行することなどが行われる。UIコアはまた、ロックを取らずに作業アイテムを並べる1つの方法であるロック・フリー・キューを用いて作業アイテムを降ろすことができる。これに関して、これらのキューの編成の方法、コードに対していつ何をするかについての優先順位、パースやコンパイルなどのために行う作業の量、およびそれらの理由のヒューリスティックは、後に詳細に説明する。従って、ユーザーの知識無しで、バックグラウンドにおいて大量の作業が行われており、それは、共通のウェブ・ページおよびアプリケーション・シナリオを認識し、バックグラウンド・コア(最適化/管理コア)のリソースを、それらが最も効率的に作用するところへ向ける。
[0062] 図7は、第1のコア又は一組のコアにより処理されるUIスレッド750と、第2のコア又は別の一組のコアにより処理されるJITスレッド760とが、インタープリターにより解釈された解釈済みコード770をいつ実行するか、またはコードをいつ「ジット」して(コードにJITコンパイラーを通過させる)、そのジットしたコード780を実行するかに関しての、上記のバランス取りを達成する実装の例を示す。
[0063] 上記で示唆したように、サンク(thunk)などのような、スタッブの使用の例として、この場合、最初に、各サンクにヌル(NULL)値を割り当てることがてき、値がヌルである場合、UIスレッド750は、解釈済みコード770を使用することができるが、フィールドがヌルではない場合(即ち、ジットされたコードを指すアドレスがある場合)、UIスレッド700は、代わりに、ジットされたコード780を用いる。その間に、最適化/管理コアは、リソースと時間とが許す限り更に多くのコードをジットすることを試み続け、それにより、最終的に、すべての作業が完了されるが、その間に、ユーザーは、たとえ全てのコードに対してロード、パース、コンパイル、ジッタなどがまだなされていなくとも、可能な限り速くウェブ・ページを経験する。
[0064] この例の限定ではない詳細を更に説明すると、そのような環境においてコードを実行するための2つの方法があり、それらは、コードをインタープリターを介して実行すること(一般的には速い)、またはコードをジットすること(ジッター(jitter)と呼ばれるジャスト・イン・タイム・コンパイラーを介しての実行であり、一般的には遅い)である。コードをジットし、ジッターの完了を待ち、ジットされたコードを実行するよりも、概して、インタープリターを用いての線形的シーケンスのコードの解釈は速い。これに関して、ジッターは、最適化されたコードを形成するために、コードにわたって複数のパスを用いる傾向がある。従って、コードの使用が多くなるであろうと思われる場合、一般に、追加のコード準備時間があるにもかかわらず、ジッターを用いることで性能が向上するが、コードの使用が少ない場合、例えば、一回の場合、一般に、インタープリターを用いてコードを速く実行することで性能が向上する。従って、様々な実施形態において、ジットされたコードと解釈されたコードとの間でのバランスが維持される。
[0065] 最初に、UIスレッド上で、インタープリターはコードの解釈を開始し、JITスレッド上で、ジットの対象となる候補が識別される。例えば、ジッティング(jitting)に対して良好に動作を行う関数は、小さい関数であり、コードの殆どはループ(1以上)内にある。従って、それらの関数は、最初に、ラウンド予測ジッティング(round speculative jitting)に従ってジットされ、最上位の候補は、一組のヒューリスティックに基づいて選択される。予測ジッティングでは、呼び出された関数がジットされるのみではなく、幾つかの関数は、呼び出されなくとも、呼び出される見込みがある場合は、ジットされる。そのような関数がジットされると、次に、エントリー・ポイントが、解釈済みコード770からジットされたコード780へと切り換えられる。
[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に対して、および予測プロセスの間に選択された候補に対して、ジッティングが行われる。
[0067] 予測ジッティングのラウンドの後、最上位の優先度のものに関して更なるジッティングが開始され、他の残りのアイテムは、優先度が以下のようにパーコレートして上げられる。これに関して、図8に示すように、第3の優先度のコードにおけるコード作業アイテム724に関しては、コードが実行される毎に、それは、解釈済みコード770が呼び出される毎に優先度のレベルが上げられる。従って、最初のパスの後、解釈済みコード770が使用される都度、その優先度は、それを最上位の優先度にするまで上げられていく。1つの実装では、作業アイテム710で示されている第2の優先度のコードが最上位の優先度になると、それは、他の全ての作業の前へと移動し、ジッターは、次の機会に、そのパスをそのようなコードにわたって開始する。
[0068] 結果として、コードが、多く使用されるものであるが、初期の優先度が低く、予測ラウンドで見逃される場合には、パーコレートして上げられ、即座に最適化される。コードが、多く呼び出されないものである場合には、それほど速く最適化されない。最上位の優先度のアイテムが全てジットされると、ジッターは、第2の優先度のアイテムの最適化および後続のアイテムの最適化を開始することができ、全てのアイテムを消費するまで、UIスレッドは、その間に速度を落とすことなく、最上の最適コードを実行する。
[0069] スクリプト・アイテムに対するコードの生成への優先度の付与の方法についてのヒューリスティックに関しては、1つのヒューリスティックは、コードがどれだけルーピー(loopy)であるか、であり、これは、ループである全てを除いたコード・サイズの測定値、即ち、全体のコード・サイズのどれだけかループであるかに対しての全体のコード・サイズの比率、またはその逆の、コード・サイズに対するループの比率である。従って、関数の殆どがループである場合には、ループの少ない関数よりも、最適化に関して優先度が高くなるが、コードの殆どはループではない。
[0070] 更に、重い数学演算を行っているコードは、ジットされることにより、ジットされないコードよりも多くの恩恵を受ける。最適化は、多くの数学処理を行うコードに対して良好に働く。なぜなら、プロセッサーのネイティブのレジスターを利用できるからであり、これらは、別のメモリの分離したメモリ構造を設定するコードと比較すると、非常に速い。
[0071] 限定ではない別の実施形態では、実行するスクリプトのコール・ツリーが構築され、これは優先順位を知らせる手助けとなる。これに関して、コール・ツリーは、ホットになるであろう関数を予想する手助けとなる。例えば、コードの第1のピースが、予想通りにまたは決定論的に、コードの第2のピースの前に実行されると示された場合、第2のピースよりも第1のピースを優先することは、理にかなっている。また、例えば、ifステートメントの無いグローバル関数がある場合、そのようなコードを実行する機会が大いに見込め、その場合、高優先度となる。仮説的な例を、関数Fooを含むコードのビットとする。
[0072]
Foo

Bar;
If X,then Y

[0073] この場合、Fooが呼び出された場合にBarが呼び出されることが、明らかである。なぜなら、Xではない場合には、Yは呼び出されず、従って、最適化に関してのBarの優先度はYよりも高い。これらのヒューリスティックを入力として用い、相対的な優先度を形成する多くの方法がある。1つの方法は、コードの所与のピースが、選択されたヒューリスティックの組とどれだけ整合するかに応じて0から100の優先度値を割り当て、ほぼ均等に複数のキューへと分割することである。
[0074] 上記のように、ジットされた実行可能コードが使用可能になると、そのジットされた実行可能コードが、インタープリター・コード・サンクへ挿入される。インタープリター・コード・サンクがまだ近くにある場合、コード生成が行われたか又は行われているかを判定するための検査を行い、まだである場合、作業アイテムの優先度が上げられる。それがジットされていた場合、サンクは、ジットされたアドレスと置換される。言い換えると、サンクは、ジットされたコードが使用可能になるまで、解釈済みコードを用いるケースを識別する手助けのために存在し、その後、サンクは、消滅するか又は新たなメモリ位置と置換され、それにより、コードは、別のメモリ位置へジャンプしてジットされたコードを実行するように、例えば、UIスレッドを新たなコードへ送る又はジャンプさせるように、動作する。1つの実施形態では、作業アイテムを最上位の優先度のキューの前方へと移動させるときに短いロックを用いて、競合を避けることができるが、これはリストにおけるアイテムの単なる位置変更であるので、非常に速く、ロック時間は最小である。
[0075] 上記のように、インタープリターに対して1個、そしてジッターに対して1個のコアが使用されるが、追加の実施形態では、インタープリターに対して1個、高速のジッター(完全というほどではない)に対して1個、低速のジッター(完全)に対して1個のように、3個以上のコアを用いることがてきる。このように、幾らかの完全ではない最適化の恩恵を受ける特定のアイテムに関して、そのようなアイテムは、中間段階として改善される。
[0076] 更に、追加のコアを用いて、何れのオブジェクトによってもウェブ・サイトの表示と関連して既に使用も参照もされていない、全てのオブジェクトに対する全てのガベージ・コレクション(garbage collection)を行うことがてき、それにより、他のコアで行われている重要な作業を妨げないようにする。
[0077] 図9は、実施形態における置換のために最適化したコードを生成するための、限定ではないプロセスを示すフロー図である。900において、第1プロセッシング・コアを用いて、スクリプト・コードを含む又は参照するマークアップ・ドキュメントが表示され、実行可能コードが生成され、これが、マークアップ・ドキュメントのスクリプト・コードにより表される機能を可能にする。910において、第2プロセッシング・コアを用いて、スクリプト・コードの特性に基づいて、実行可能コードとは異なる代替の実行可能コードを選択的に生成する。920において、第2プロセッシング・コアを用いて、実行可能コードを、第1プロセッシング・コアによるスクリプト・コードの更なる実行のために、代替の実行可能コードと置換する。オプションとして、930において、第3プロセッシング・コアが、ガベージ・コレクションのプロセスを行うことができ、それにより、マークアップ・ドキュメントと関連しているがマークアップ・ドキュメントまたはその機能のためにもはや使用されていないオブジェクトに対するメモリを、取り戻す。
[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として表されている。
[0079] 様々な実施形態において、インテリジェントなコンパイル技術およびヒューリスティックが可能とされ、それらは、例えば、クライアントとの対話が多い範囲のような特定のウェブ・ページの「ホット・スポット」に対するコードの生成の速度を上げるために、個別のコアを用いることがてきる。ヒューリスティックは、そのウェブに対してカスタム化され、例えば、コード生成の選択についての案内を行うために、データ構造のウェブ・キャッシュを用いること、例えば、所与のウェブ・ページが使用された最後の時についての情報をキャッシュに記憶することができ、その結果として、識別されたホット・スポットに対するコードを速い速度で作ることができる。このように、時間の経過につれて、同じウェブ・サイトが呼び出されることが多くなる傾向があるので、ウェブ・サイトの解釈は、キャッシュに保持される積み重ねた構造を参照して、時間の経過とともに改善される。
[0080] 幾つかのパフォーマンスの結果は、上記の様々な実施形態および技術が、ここで説明する様々な実施形態を適用しない以前のウェブ・ページの負荷および対話に対して、40ないし150倍の速度の向上に寄与することを示している。
例示的なネットワーク化され分散化された環境
[0081] 当業者は、ここで説明する動的コード生成の様々な実施形態を、任意のコンピューターや他のクライアントまたはサーバー・デバイスと関連して実施でき、任意のコンピューターや他のクライアントまたはサーバー・デバイスは、コンピューター・ネットワークの一部として又は分散型コンピューティング環境において配備でき、任意の種類のデータ・ストアと接続できることを、理解することができる。これに関して、ここで説明する様々な実施形態は、任意の数のメモリまたはストレージ・ユニットと、任意の数のストレージ・ユニットにわたって生じる任意の数のアプリケーションおよびプロセスとを有する任意のコンピューター・システムまたは環境において、実施することができる。これは、ネットワーク環境に配備されるサーバー・コンピューターとクライアント・コンピューターとを持つ環境や、リモート・ストレージやローカル・ストレージを有する分散型コンピューティング環境も含むが、これは限定ではない。
[0082] 分散型コンピューティング環境は、コンピューティング・デバイスおよびコンピューティング・システムの間での通信による交換により、コンピューター・リソースおよびサービスを共有できるようにする。これらのリソースおよびサービスは、情報の交換、ファイルなどのようなオブジェクトのためのキャッシュ・ストレージおよびディスク・ストレージを含む。また、これらのリソースおよびサービスは、負荷のバランス取り、リソースの拡張、プロセッシングの特殊化などのための、複数のプロセッシング・ユニットにわたってのプロセッシング・パワーを共有することを含む。分散型コンピューティングは、ネットワークのコネクティビティを利用し、クライアントがそれらの集合的パワーをレバレッジして会社全体に利益をもたらすことを可能とする。これに関して、様々なデバイスは、アプリケーションやオブジェクトやリソースを有することができ、それらは、本開示の様々な実施形態に関して説明した動的コード生成のための機構に参加することができる。
[0083] 図11は、例示的なネットワーク型または分散型のコンピューティング環境の概略的な図を提供する。分散型コンピューティング環境は、コンピューティング・オブジェクト1110、1112などと、コンピューティング・オブジェクトまたはデバイス1120、1122、1124、1126、1128などとを含み、これらは、プログラム、メソッド、データ・ストア、プログラマブル・ロジックなどを含むことができ、アプリケーション1130、1132、1134、1138およびデータ・ストア(1以上)1140として表されている。コンピューティング・オブジェクト1110、1112などと、コンピューティング・オブジェクトまたはデバイス1120、1122、1124、1126、1128などとは、様々なデバイス、例えば、パーソナル・デジタル・アシスタント(PDA)、オーディオ/ビデオ・デバイス、モバイル・フォン、MP3プレーヤー、パーソナル・コンピューター、ラップトップなどを含み得ることを、理解することができる。
[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、または他のオブジェクト、ソフトウェア、ファームウェア、および/またはハードウェアを使用し得る。
[0085] 分散型コンピューティング環境をサポートする様々なシステム、コンポーネント、およびネットワーク構成がある。例えば、複数のコンピューティング・システムは、有線またはワイヤレスのシステムにより、ローカル・ネットワークや広く分散されたネットワークにより、共に接続することができる。現在、多くのネットワークはインターネットと接続されており、インターネットは、広く分散したコンピューティングに対するインフラストラクチャーを提供するものであり、かつ多くの異なるネットワークを含む。なお、任意のネットワーク・インフラストラクチャーを、様々な実施形態において説明した動的コード生成のためのシステムに対して入射するようにされる例示的な通信に、用いることができる。
[0086] 即ち、ネットワーク・トポロジーのホストおよびネットワーク・インフラストラクチャー、例えば、クライアント/サーバーや、ピア・ツー・ピアや、ハイブリッドのアーキテクチャーを、用いることができる。「クライアント」は、1つのクラスまたはグループのメンバーであり、この1つのクラスまたはグループのメンバーは、それと関連していない別のクラスまたはグループのサービスを用いる。クライアントは、プロセス、即ち、概略的には1組の命令またはタスクとすることができ、別のプログラムまたはプロセスにより提供されるサービスを要求する。クライアントのプロセスは、要求したサービスを用いるが、他のプログラムやサービス自体の作業の詳細について「知る」必要は無い。
[0087] クライアント/サーバーのアーキテクチャー、特にネットワーク型のシステムでは、クライアントは、通常はコンピューターであり、このコンピューターは、例えばサーバーである別のコンピューターにより提供される共有ネットワーク・リソースへ、アクセスする。図11では、限定ではない例として、コンピューティング・オブジェクトまたはデバイス1120、1122、1124、1126、1128などを、クライアントと考えることができ、コンピューティング・オブジェクト1110、1112などを、サーバーと考えることができ、その場合、サーバーとして動作するコンピューティング・オブジェクト1110、1112などはデータ・サービスを提供し、そのデータ・サービスは、例えば、クライアントであるコンピューティング・オブジェクトまたはデバイス1120、1122、1124、1126、1128などからデータを受け取ること、データを格納すること、データを処理すること、データをクライアントであるコンピューティング・オブジェクトまたはデバイス1120、1122、1124、1126、1128などへ送ることなどである。なお、何れのコンピューターも、状況に応じて、クライアント、サーバー、またはそれら双方と考えることができる。
[0088] サーバーは、典型的にはリモート・コンピューター・システムであり、リモートまたはローカルのネットワーク、例えば、インターネットやワイヤレス・ネットワーク・インフラストラクチャーを通じて、アクセス可能である。クライアントのプロセスは、第1のコンピューター・システムでアクティブにすることができ、サーバーのプロセスは、第2のコンピューター・システムでアクティブにすることができ、互いに通信媒体を介して通信し、それにより、分散型の機能を提供し、且つ複数のクライアントがサーバーの情報収集能力の利点を用いることを可能にする。ここで説明した技術に従って用いられる何れのソフトウェア・オブジェクトも、スタンドアローンとして、または複数のコンピューティング・デバイスまたはオブジェクトにわたって分散して、提供することができる。
[0089] 通信ネットワーク1142またはバスがインターネットであるネットワーク環境では、例えば、コンピューティング・オブジェクト1110、1112などをウェブ・サーバーとすることができ、そのウェブ・サーバーと、他のコンピューティング・オブジェクトまたはデバイス1120、1122、1124、1126、1128などとが、多数の既知のプロトコルのうちの何れか、例えば、ハイパーテキスト・トランスファー・プロトコル(HTTP)を介して、通信するようにできる。また、分散型コンピューティング環境の特徴であり得るが、サーバーとして動作するコンピューティング・オブジェクト1110、1112などは、例えば、コンピューティング・オブジェクトまたはデバイス1120、1122、1124、1126、1128などのようなクライアントとして働くこともできる。
例示的なコンピューティング・デバイス
[0090] 述べたように、好都合なことに、ここで説明した技術は、コンピューティング・システムにおいて動的コード生成を行うことが望ましい任意のデバイスに、適用することができる。従って、手持ち型、ポータブル、および他のコンピューティング・デバイス、および全ての種類のコンピューティング・オブジェクトを、様々な実施形態と関連して、即ち、デバイスのリソース使用を望まれるように最適化するところにおいて、使用することを考えていることが、理解される。従って、図12における以下で説明する汎用リモート・コンピューターは、コンピューティング・デバイスの単なる一例である。
[0091] 実施形態は、部分的に、デバイスまたはオブジェクトに対するサービスの開発者による使用のために、オペレーティング・システムを介して実施することができ、かつ/または、ここで説明した様々な実施形態の1以上の機能的特徴を実施するように動作するアプリケーション・ソフトウェア内に含ませることができる。ソフトウェアは、クライアント・ワークステーションやサーバーや他のデバイスなどのような1以上のコンピューターで実行されるプログラム・モジュールなどのような、コンピューター実行可能命令の一般的なコンテキストで説明することができる。コンピューター・システムは、データの通信に使用できる様々な構成およびプロトコルを有し、従って、特定の構成やプロトコルが限定と考慮されないことを、当業者は理解するであろう。
[0092] 従って、図12は、適切なコンピューティング・システム環境1200の一例を示すものであり、このコンピューター・システム環境において、ここで説明した実施形態の1つまたは態様を実施することができる。なお、上記で明らかにしたが、このコンピューター・システム環境1200は、適切なコンピューティング環境の単なる一例であり、使用や機能の範囲に関する限定を示唆することを意図していない。更に、このコンピューター・システム環境1200は、この例示的なコンピューター・システム環境1200において示されるコンポーネントの何れか又はコンポーネントの組み合わせの何れかと関連する依存性を有するものとして解釈することを、意図していない。
[0093] 図12を参照すると、1以上の実施形態を実施するための例示的なリモート・デバイスは、コンピューター1210の形態の汎用コンピューティング・デバイスを含む。コンピューター1210のコンポーネントは、処理ユニット1220、システム・メモリ1230、およびシステム・メモリを含む様々なコンポーネントを処理ユニット1220と結合するシステム・バス1222を含み得るが、これらには限定されない。
[0094] コンピューター1210は、典型的には、様々なコンピューター読取可能媒体を含み、それらは、コンピューター1210によりアクセス可能な任意の使用可能な媒体とすることができる。システム・メモリ1230は、リード・オンリー・メモリ(ROM)および/またはランダム・アクセス・メモリ(RAM)などのような揮発性および/または不揮発性のメモリの形態のコンピューター・ストレージ・メモリを含むことができる。限定ではなく例として、システム・メモリ1230はまた、オペレーティング・システム、アプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データを含むことができる。更なる例に従うと、コンピューター1210は、様々な他の媒体(示していない)を含むことができ、それらは、RAM、ROM、EEPROM、フラッシュ・メモリ、または他のメモリ技術、CD−ROM、デジタル・バーサタイル・ディスク(DVD)、または他の光ディスク・ストレージ、磁気カセット、磁気テープ、磁気ディスク記憶装置、または他の磁気記憶装置、または望まれる情報を格納するために使用できる有形の媒体および/または非一時的な媒体を含むことができるが、これは限定ではない。
[0095] ユーザーは、入力デバイス1240を通じてコンピューター1210へコマンドおよび情報を入力することができる。また、モニターまたは他のタイプのディスプレイ・デバイスも、出力インターフェース1250などのようなインターフェースを介してシステム・バス1222へ接続される。また、このコンピューターは、モニターに加えて、他の周辺出力デバイス、例えば、スピーカーやプリンターを含むことができ、それらも出力インターフェース1250を通じて接続することができる。
[0096] コンピューター1210は、リモート・コンピューター1270などのような1以上の他のリモート・コンピューターへの論理接続、例えば、ネットワーク・インターフェース1260を用いて、ネットワーク型または分散型の環境で動作することができる。リモート・コンピューター1270は、パーソナル・コンピューター、サーバー、ルーター、ネットワークPC、ピア・デバイス、または他のコモン・ネットワーク・ノード(common network node)、または他の任意のリモートの媒体の消費または伝送のためのデバイス(remote media consumption or transmission device)であり得、また、上記でコンピューター1210と関連して説明したエレメントの何れかまたは全てを含み得る。図12に示す論理接続は、ローカル・エリア・ネットワーク(LAN)やワイド・エリア・ネットワーク(WAN)などのようなネットワーク1272を含むが、他のネットワーク/バスを含むこともできる。そのようなネットワーク環境は、家庭、オフィス、エンタープライズ・ワイド・ネットワーク、イントラネット、およびインターネットにおいて一般的なものである。
[0097] 上述のように、様々なコンピューティング・デバイスおよびネットワーク・アーキテクチャーと関連させて例示的な実施形態を説明したが、基礎的な概念は、任意のネットワーク・システムおよび任意のコンピューティング・デバイスまたはシステムに、適用することができる。
[0098] また、同じまたは類似の機能を実施するための複数の手法、例えば、適切なAPI、ツール・キット、ドライバー・コード、オペレーティング・システム、コントロール、スタンドアローンまたはダウンロード可能なソフトウェア・オブジェクトなどがあり、これらは、アプリケーションおよびサービスが、ここで提供される技術の利点を得ることを可能にする。即ち、ここでの実施形態は、API(または他のソフトウェア・オブジェクト)の観点から、およびここで説明した1以上の実施形態を実現するソフトウェア・オブジェクトまたはハードウェア・オブジェクトの観点から予期される。即ち、ここで説明した様々な実施形態は、完全にハードウェアの態様、部分的にハードウェアであり部分的にソフトウェアである態様、およびソフトウェアの態様を有することができる。
[0099] ここでは、「例示」という単語は、例や、事例や、実例を意味するものとして用いている。疑いをなくすためであるが、ここで開示した主題事項は、そのような例により限定されない。更に、ここで「例示」として説明した何れの態様や設計も、他の態様や設計よりも好適または好都合であると必ずしも解釈されるものではなく、また、当業者に知られた等価の例示的な構成および技術を除外することを意味しない。更に、用語「含む(includes)」、「有する(has)」、「包含する(contains)」、および類似の他の単語が使用される範囲において、疑いをなくすためであるが、それらのような用語は、何れの追加のエレメントや他のエレメントも除外しない、開かれた接続させるための語(open transition word)としての用語「含む(comprising)」と同様の様式で、含むことを意図している。
[00100] 上述のように、ここで説明した様々な技術は、ハードウェアまたはソフトウェア、または、適切である場合にはそれらの組み合わせと関連して、実施することができる。ここで使用しているように、用語「コンポーネント」、「システム」、およびそれらと同様のものは、同様に、コンピューター関連エンティティを示すことを意図しており、それは、ハードウェア、ハードウェアとソフトウェアとの組み合わせ、ソフトウェア、または実行中のソフトウェアの何れかである。例えば、コンポーネントは、プロセッサーで実行されるプロセス、プロセッサー、オブジェクト、実行可能ファイル、実行のスレッド、プログラム、および/またはコンピューターであり得るが、これらには限定されない。例として、コンピューターで実行されるアプリケーションとコンピューターとの双方を、1つのコンポーネントとすることができる。1以上のコンポーネントが、1つのプロセスおよび/または実行のスレッドの中に存在することがあり、また、コンポーネントは、1つのコンピューターにローカライズされることも、2以上のコンピューターに分散されることもできる。
[00101] 上記のシステムは、幾つかのコンポーネントの間での対話と関連して説明した。そのようなシステムおよびコンポーネントが、上記のものの様々な置換や組み合わせに従って、それらのコンポーネントまたは指定されたサブコンポーネント、指定されたコンポーネントまたはサブコンポーネントのうちの幾つか、および/または追加のコンポーネントを含むことができることは、理解できる。また、サブコンポーネントは、親コンポーネント内に含まれるもの(階層的)としてではなく、他のコンポーネントと通信するように結合されたコンポーネントとして実施することができる。更に、1以上のコンポーネントを、1つのコンポーネントへと組み合わせて統合された機能を提供できること、また、幾つかの個別のサブコンポーネントへと分割できることに、留意されたい。また、そのようなサブコンポーネントへ通信するように結合する任意の1以上の中間層、例えば管理層(management layer)などを提供することにより、統合した機能を提供できることにも、留意されたい。また、ここで説明した何れのコンポーネントも、ここで特に説明していないが当業者には一般に知られている1以上の他のコンポーネントと、対話することができる。
[00102] 上記で説明した例示的なシステムを考慮すると、説明した主題事項に従って実施され得る方法も、様々な図のフローチャートを参照して理解することができ。説明を簡素にする目的で、方法は一連のブロックで示されて説明されているが、様々な実施形態はブロックの順序により限定されないことが、理解および認識される。なぜなら、幾つかのブロックは、ここで示されて説明された順とは別の順で生じることや、他のブロックと同時に生じることがあるからである。非順次的な、または分岐した流れをフローチャートにより示す場合において、同じまたは類似の結果が得られる様々な別の分岐、フロー経路、およびブロックの順序を実施できることを、理解することができる。更には、ここで説明した方法を実施するために、例示した全てのブロックを必要としない場合もある。
[00103] ここで説明した様々な実施形態に加えて、対応するエレメント(1以上)の機能から逸脱せずに同じまたは等価の機能を行うために、他の類似の実施形態を使用できることや、説明した実施形態(1以上)に対する変更や付加を行えることも、理解される。更に、複数の処理チップや複数のデバイスが、ここで説明した1以上の機能の性能を共有することができ、同様に、ストレージは、複数のデバイスにわたって作用することができる。従って、本発明は、何れの1つの実施形態によっても限定すべきではなく、特許請求の範囲に従った幅、精神、および範囲で解釈すべきである。

Claims (20)

  1. 方法であって、
    コンピューティング・デバイスのスクリプト・エンジンによりスクリプト・コードを受け取るステップであって、前記スクリプト・コードは、前記コンピューティング・デバイスのブラウザー・アプリケーションにより受け取られたマークアップ・ドキュメントに含まれる、または前記マークアップ・ドキュメントにより参照される、ステップと、
    ランタイムにおいて、前記スクリプト・エンジンにより前記スクリプト・コードへ適用されるマルチフェーズ・コード準備プロセスの少なくとも1つのフェーズへ適用する作業レベルを決定するステップと、
    前記マルチフェーズ・コード準備プロセスの前記フェーズの適用を低減するか、又は延期するか否かを決定するために前記作業レベルを用いるステップと、
    を含み、
    前記作業レベルは、前記ブラウザー・アプリケーションによる前記スクリプト・コードの少なくとも一部の呼び出しの予測または分析のうちの少なくとも1つに基づき、または前記ブラウザー・アプリケーションによる前記スクリプト・コードの前記少なくとも一部のランタイムにおける使用において観察されたパターンに基づく、
    方法。
  2. 請求項1に記載の方法であって、前記決定するステップは、前記スクリプト・コードをパースすることに対して適用する前記作業レベルを決定することを含む、方法。
  3. 請求項1に記載の方法であって、前記決定するステップは、前記スクリプト・コードに基づいてバイトコードを生成することに対して適用する前記作業レベルを決定することを含む、方法。
  4. 請求項1に記載の方法であって、前記決定するステップは、前記スクリプト・コードを解釈することに対して適用する前記作業レベルを決定することを含む、方法。
  5. 請求項1に記載の方法であって、前記決定するステップは、前記スクリプト・コードのメモリ使用を最適化することに対して適用する前記作業レベルを決定することを含む、方法。
  6. 請求項1に記載の方法であって、前記決定するステップは、前記スクリプト・コードのループ・ボディを最適化することに対して適用する前記作業レベルを決定することを含む、方法。
  7. 請求項1に記載の方法であって、前記決定するステップは、前記スクリプト・コードの変数のタイプを最適化することに対して適用する前記作業レベルを決定することを含む、方法。
  8. 請求項1に記載の方法であって、前記決定するステップは、前記スクリプト・コードを最適化するためのジャスト・イン・タイム・コンパイラーの使用に対して適用する前記作業レベルを決定することを含む、方法。
  9. コンピューティング・デバイスであって、
    コンピューター実行可能なコンポーネントを記録したメモリと、
    前記メモリに通信可能に結合されたプロセッサであって、該プロセッサは前記コンピューター実行可能なコンポーネントの実行を容易にするよう構成されているプロセッサと
    を備え、
    前記コンピューター実行可能なコンポーネントは、
    スクリプト・コードを含む、または前記スクリプト・コードを参照するマークアップ・ドキュメントを表示するよう構成されるブラウザー・アプリケーションと、
    ランタイムにおいて、前記スクリプト・コードの部分を分析するか、またはスクリプト・コードの実行中にその部分の使用を分析し、その部分の性能を、変更された部分の実行により向上させることになる一組の条件を決定するために、前記スクリプト・コードを受け取るよう構成されたスクリプト・エンジン・コンポーネントと
    を備え、
    遭遇している一組の条件に応じて、その部分の代わりに、変更された部分がブラウザー・アプリケーションにより実行される、コンピューティング・デバイス。
  10. 請求項9記載のコンピューティング・デバイスであって、前記部分は実行のために前記ブラウザー・アプリケーションにより前記変更された部分と置換される、コンピューティング・デバイス。
  11. 請求項9記載のコンピューティング・デバイスであって、遭遇している一組の条件に応じて、前記部分は前記ブラウザー・アプリケーションにより実行される、コンピューティング・デバイス。
  12. 請求項9記載のコンピューティング・デバイスであって、前記スクリプト・コードの前記部分は、前記スクリプト・コードのループ・ボディであり、前記スクリプト・コードの変更された部分は、前記スクリプト・コードの変更されたループ・ボディであるコンピューティング・デバイス。
  13. 請求項9記載のコンピューティング・デバイスであって、前記スクリプト・コードの前記部分は前記スクリプト・コードの変数のタイプに関連し、前記スクリプト・コードの前記変更された部分は前記変数のタイプに関し最適化されている、コンピューティング・デバイス。
  14. コンピューター読取可能命令を含むコンピューター読取可能格納媒体であって、前記コンピューター読取可能命令が実行されることにより、少なくとも2個のプロセッシング・コアを含むコンピューティング・デバイスに、
    前記少なくとも2個のプロセッシング・コアのうちの第1プロセッシング・コアにより、スクリプト・コードを含む又はスクリプト・コードを参照するマークアップ・ドキュメントを処理するステップであって、前記第1プロセッシング・コアにより、前記マークアップ・ドキュメントの前記スクリプト・コードにより表される機能を可能にする実行可能コードを生成するステップを含む、ステップと、
    前記スクリプト・コードの特性に基づいて、前記少なくとも2個のプロセッシング・コアのうちの第2プロセッシング・コアにより、選択的に、前記実行可能コードとは異なる代替的実行可能コードを生成するステップと、
    前記第1プロセッシング・コアによる前記スクリプト・コードの更なる実行のために、前記実行可能コードを、前記代替的実行可能コードと置換するステップと
    を含む動作を行わせる、
    コンピューター読取可能格納媒体。
  15. 請求項14に記載のコンピューター読取可能格納媒体であって、置換する前記ステップは、前記第1プロセッシング・コアによる前記実行可能コードの現在の実行を妨げることなく、前記実行可能コードを前記代替的実行可能コードと取り替えるステップを含む、コンピューター読取可能格納媒体。
  16. 請求項14に記載のコンピューター読取可能格納媒体であって、置換する前記ステップは、前記第1プロセッシング・コアによる更なる実行のために前記代替的実行可能コードのアドレスをスワップ・インするステップを含む、コンピューター読取可能格納媒体。
  17. 請求項14に記載のコンピューター読取可能格納媒体であって、代替的実行可能コードを生成する前記ステップは、前記スクリプト・コードへ割り当てられた優先度に基づいて前記代替的実行可能コードを生成するステップを含み、前記優先度は1組の優先作業キューで表され、1組の優先作業キューにおいて前記スクリプト・コードが表される、コンピューター読取可能格納媒体。
  18. 請求項14に記載のコンピューター読取可能格納媒体であって、第1プロセッシング・コアにより前記実行可能コードを生成する前記ステップは、解釈したコードを生成するステップを含み、第2プロセッシング・コアにより代替的実行可能コードを生成する前記ステップは、ジャスト・イン・タイム・コンパイラーを用いる変更されたコードを生成するステップを含む、コンピューター読取可能格納媒体。
  19. 請求項14に記載のコンピューター読取可能格納媒体であって、第2プロセッシング・コアによる、代替的実行可能コードを生成する前記ステップは、前記実行可能コードの実行に適用可能な1組の状況に関して推測または観察することができる、前記実行可能コードの動的変数のタイプに対して変更されるコードを生成するステップを含む、コンピューター読取可能格納媒体。
  20. 請求項14に記載のコンピューター読取可能格納媒体であって、前記少なくとも2個のプロセッシング・コアのうちの第3プロセッシング・コアにより、前記マークアップ・ドキュメントと関連しているが前記マークアップ・ドキュメントの表示には既に使用されていないオブジェクトに対するメモリを取り戻すステップ
    を更に含むコンピューター読取可能格納媒体。
JP2014528481A 2011-09-02 2012-08-26 スクリプト・コードを有するマークアップ・コンテンツの高速プレゼンテーション Active JP6054397B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/225,132 2011-09-02
US13/225,132 US10466989B2 (en) 2011-09-02 2011-09-02 Fast presentation of markup content having script code
PCT/US2012/052414 WO2013032959A1 (en) 2011-09-02 2012-08-26 Fast presentation of markup content having script code

Publications (3)

Publication Number Publication Date
JP2014525632A JP2014525632A (ja) 2014-09-29
JP2014525632A5 JP2014525632A5 (ja) 2015-10-15
JP6054397B2 true JP6054397B2 (ja) 2016-12-27

Family

ID=47574775

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014528481A Active JP6054397B2 (ja) 2011-09-02 2012-08-26 スクリプト・コードを有するマークアップ・コンテンツの高速プレゼンテーション

Country Status (7)

Country Link
US (2) US10466989B2 (ja)
EP (1) EP2751709A4 (ja)
JP (1) JP6054397B2 (ja)
KR (1) KR102006507B1 (ja)
CN (2) CN104866320B (ja)
HK (1) HK1179369A1 (ja)
WO (1) WO2013032959A1 (ja)

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10466989B2 (en) 2011-09-02 2019-11-05 Microsoft Technology Licensing, Llc. Fast presentation of markup content having script code
US9015682B1 (en) 2012-03-28 2015-04-21 Google Inc. Computer code transformations to create synthetic global scopes
US20150205585A1 (en) * 2012-06-04 2015-07-23 Google Inc. Delayed compiling of scripting language code
US20140053064A1 (en) * 2012-08-16 2014-02-20 Qualcomm Incorporated Predicting the usage of document resources
US9569342B2 (en) * 2012-12-20 2017-02-14 Microsoft Technology Licensing, Llc Test strategy for profile-guided code execution optimizers
US8930920B2 (en) * 2012-12-31 2015-01-06 Oracle International Corporation Self-optimizing interpreter and snapshot compilation
US9232016B2 (en) * 2013-03-26 2016-01-05 International Business Machines Corporation Undoing sent communications
US9710789B2 (en) 2013-06-04 2017-07-18 SuccessFactors Multi-dimension analyzer for organizational personnel
US9104434B2 (en) 2013-12-20 2015-08-11 Microsoft Technology Licensing, Llc Property accesses in dynamically typed programming languages
US9207914B2 (en) 2013-12-20 2015-12-08 Microsoft Technology Licensing, Llc Execution guards in dynamic programming
US9639382B2 (en) 2014-05-15 2017-05-02 Microsoft Technology Licensing, Llc. Interactive viewer of intermediate representations of client side code
KR102232085B1 (ko) * 2014-10-10 2021-03-25 주식회사 케이티 웹 페이지를 동적으로 제공하는 방법, 웹 서버 및 컴퓨팅 장치
US10389795B2 (en) 2015-10-09 2019-08-20 Microsoft Technology Licensing, Llc Distributed extension execution in computing systems
US10230712B2 (en) 2016-09-12 2019-03-12 Microsoft Technology Licensing, Llc Binary experimentation on running web servers
US10481876B2 (en) 2017-01-11 2019-11-19 Microsoft Technology Licensing, Llc Methods and systems for application rendering
CN106953765A (zh) * 2017-03-31 2017-07-14 焦点科技股份有限公司 一种互联网路径流量数据生成和展现方法
US11416226B2 (en) 2017-07-07 2022-08-16 Nchain Licensing Ag System and method for compiling high-level language code into a script executable on a blockchain platform
US20200186623A1 (en) * 2018-12-11 2020-06-11 Microsoft Technology Licensing, Llc Performant retrieval and presentation of content
CN110308920B (zh) * 2019-05-31 2023-05-12 北京控制工程研究所 一种不影响正常运行的在轨修改星上产品软件的方法
KR102165928B1 (ko) * 2019-12-04 2020-10-14 서울대학교 산학협력단 전자 장치, 전자 장치의 컴파일링 방법 및 전자 장치의 동작 방법
CN111008019B (zh) * 2019-12-06 2021-07-02 北京百度网讯科技有限公司 小程序的Web化运行方法、装置、设备及介质
US11301218B2 (en) 2020-07-29 2022-04-12 Bank Of America Corporation Graph-based vectorization for software code optimization references
US11256488B1 (en) 2020-07-29 2022-02-22 Bank Of America Corporation Graph-based vectorization for software code optimizations
KR102413994B1 (ko) * 2020-07-30 2022-06-28 홍익대학교세종캠퍼스산학협력단 성능 개선을 위해 소프트웨어 소스 코드 변경한 후 이를 시각적으로 가시화하는 방법 및 그 장치
KR102523329B1 (ko) * 2020-11-17 2023-04-19 홍익대학교세종캠퍼스산학협력단 전력 개선을 위해 소프트웨어 소스 코드 변경하고 성능 개선 요소를 시각적으로 가시화하여 표시하는 방법
CN113986322B (zh) * 2021-12-29 2022-03-11 天津联想协同科技有限公司 一种动态修改页面代码的方法、装置及存储介质

Family Cites Families (44)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7231644B2 (en) 2000-02-04 2007-06-12 Aol Llc, A Delaware Limited Liability Company Optimized delivery of web application code
US6658656B1 (en) 2000-10-31 2003-12-02 Hewlett-Packard Development Company, L.P. Method and apparatus for creating alternative versions of code segments and dynamically substituting execution of the alternative code versions
WO2002065286A2 (en) 2001-02-12 2002-08-22 Lto Limited Client software enabling a client to run a network based application
US6988240B2 (en) 2002-03-29 2006-01-17 Global Knowledge, Inc. Methods and apparatus for low overhead enhancement of web page and markup language presentations
US7499401B2 (en) 2002-10-21 2009-03-03 Alcatel-Lucent Usa Inc. Integrated web cache
US7228500B2 (en) * 2003-06-13 2007-06-05 Microsoft Corporation Web page rendering priority mechanism
US7617490B2 (en) 2003-09-10 2009-11-10 Intel Corporation Methods and apparatus for dynamic best fit compilation of mixed mode instructions
US8103742B1 (en) 2003-11-24 2012-01-24 Amazon Technologies, Inc. Deferred and off-loaded rendering of selected portions of web pages to incorporate late-arriving service data
US20050155022A1 (en) 2004-01-14 2005-07-14 International Business Machines Corporation Method and apparatus for counting instruction execution and data accesses to identify hot spots
US20050223359A1 (en) * 2004-03-30 2005-10-06 Rao Nagaraju Kodalapura N Techniques for multi-core debugging
US8069406B2 (en) 2005-02-11 2011-11-29 Flash Networks, Inc. Method and system for improving user experience while browsing
KR100763177B1 (ko) 2005-04-21 2007-10-04 삼성전자주식회사 자바 가상 머신의 명령어 수행 방법 및 그 장치
CN1855052A (zh) 2005-04-25 2006-11-01 罗迪平 一种从树型结构数据和一组代码片断结构体生成目标源代码的方法
US8239939B2 (en) * 2005-07-15 2012-08-07 Microsoft Corporation Browser protection module
US7945853B2 (en) 2005-09-12 2011-05-17 Microsoft Corporation Script markup
ZA200802227B (en) 2005-09-12 2009-06-24 Microsoft Corp Script markup
US7805670B2 (en) * 2005-12-16 2010-09-28 Microsoft Corporation Partial rendering of web pages
US7945849B2 (en) * 2007-03-20 2011-05-17 Microsoft Corporation Identifying appropriate client-side script references
US7689665B2 (en) 2007-04-27 2010-03-30 Microsoft Corporation Dynamically loading scripts
US8079025B2 (en) 2007-06-08 2011-12-13 Apple Inc. Asynchronous load of source dependencies
US10216854B2 (en) 2007-07-26 2019-02-26 International Business Machines Corporation Optimized page script downloads in a component based architecture
US8286189B2 (en) 2007-09-27 2012-10-09 American Express Travel Related Services Company, Inc. System and method for automatically generating computer code for message flows
US8001469B2 (en) 2007-11-07 2011-08-16 Robert Bosch Gmbh Automatic generation of interactive systems from a formalized description language
US8639743B1 (en) 2007-12-05 2014-01-28 Appcelerator, Inc. System and method for on-the-fly rewriting of JavaScript
JP2009211190A (ja) 2008-02-29 2009-09-17 Hitachi Ltd 情報処理装置
US9405555B2 (en) 2008-05-23 2016-08-02 Microsoft Technology Licensing, Llc Automated code splitting and pre-fetching for improving responsiveness of browser-based applications
US8799884B2 (en) 2008-08-13 2014-08-05 Qualcomm Incorporated Software application performance enhancement
JP5676477B2 (ja) * 2009-01-19 2015-02-25 コーニンクレッカ フィリップス エヌ ヴェ プライバシー保護のためのデュアルスクリプトエンジンをもつブラウザ
CN101706753B (zh) 2009-12-11 2013-04-10 武汉虹信通信技术有限责任公司 一种基于Perl的单元测试装置及方法
US8650426B2 (en) * 2009-12-16 2014-02-11 Qualcomm Incorporated System and method for controlling central processing unit power in a virtualized system
US9003380B2 (en) 2010-01-12 2015-04-07 Qualcomm Incorporated Execution of dynamic languages via metadata extraction
US8495607B2 (en) 2010-03-01 2013-07-23 International Business Machines Corporation Performing aggressive code optimization with an ability to rollback changes made by the aggressive optimizations
US9626197B1 (en) 2010-07-30 2017-04-18 Amazon Technologies, Inc. User interface rendering performance
US8850574B1 (en) * 2011-02-28 2014-09-30 Google Inc. Safe self-modifying code
US8880991B2 (en) * 2011-04-21 2014-11-04 Qualcomm Innovation Center, Inc. Methods and apparatus for improved browsing performance by precompilation of high-priority JavaScripts in a webpage and delaying the removal of corresponding compiled code
US8285808B1 (en) 2011-05-20 2012-10-09 Cloudflare, Inc. Loading of web resources
US10466989B2 (en) 2011-09-02 2019-11-05 Microsoft Technology Licensing, Llc. Fast presentation of markup content having script code
US8819649B2 (en) * 2011-09-09 2014-08-26 Microsoft Corporation Profile guided just-in-time (JIT) compiler and byte code generation
US9037636B2 (en) 2012-01-19 2015-05-19 Microsoft Technology Licensing, Llc Managing script file dependencies and load times
US11233841B2 (en) 2013-03-15 2022-01-25 Yottaa, Inc. Systems and methods for configuration-based optimization by an intermediary
US20150088970A1 (en) 2013-09-20 2015-03-26 Yottaa Inc. Systems and methods for managing loading priority or sequencing of fragments of a web object
US9785452B2 (en) 2013-10-09 2017-10-10 Cisco Technology, Inc. Framework for dependency management and automatic file load in a network environment
CN105094857B (zh) 2014-04-23 2018-09-25 国际商业机器公司 用于应用加载的方法和系统
US10481876B2 (en) 2017-01-11 2019-11-19 Microsoft Technology Licensing, Llc Methods and systems for application rendering

Also Published As

Publication number Publication date
US11288048B2 (en) 2022-03-29
HK1179369A1 (zh) 2013-09-27
US20130061128A1 (en) 2013-03-07
CN104866320B (zh) 2018-02-23
CN104866320A (zh) 2015-08-26
EP2751709A1 (en) 2014-07-09
US20180046442A1 (en) 2018-02-15
JP2014525632A (ja) 2014-09-29
EP2751709A4 (en) 2015-07-15
KR20140063661A (ko) 2014-05-27
CN102902528B (zh) 2016-05-04
US10466989B2 (en) 2019-11-05
KR102006507B1 (ko) 2019-10-01
CN102902528A (zh) 2013-01-30
WO2013032959A1 (en) 2013-03-07

Similar Documents

Publication Publication Date Title
JP6054397B2 (ja) スクリプト・コードを有するマークアップ・コンテンツの高速プレゼンテーション
US8122292B2 (en) Debugging of business flows deployed in production servers
AU2012256399B2 (en) Registration and execution of highly concurrent processing tasks
EP2176763A2 (en) Memory transaction grouping
JP6379654B2 (ja) 処理実行プログラム、処理実行方法、及び情報処理装置
JP7282823B2 (ja) メモリアクセスリクエストスケジューリング方法、装置、電子デバイス、コンピュータ可読記憶媒体及びコンピュータプログラム
CN112764902B (zh) 任务调度方法及系统
Mathew et al. Exploring the cost and performance benefits of AWS step functions using a data processing pipeline
JP2012181578A (ja) 更新制御装置及びプログラム
US9588817B2 (en) Scheduling method and scheduling system for assigning application to processor
US20180059887A1 (en) Direct navigation to modal dialogs
Comai et al. A behavioral model for rich internet applications
US8572585B2 (en) Using compiler-generated tasks to represent programming elements
US20160110170A1 (en) Message inlining
US11513841B2 (en) Method and system for scheduling tasks in a computing system
US9223550B1 (en) Portable handling of primitives for concurrent execution
US7908375B2 (en) Transparently externalizing plug-in computation to cluster
US20240012681A1 (en) Quantum job submission and optimization for end-to-end algorithms
Meijers et al. Unity Advanced
Fernando et al. Concurrency
Wang et al. Research & implementation of uCLinux-based embedded browser
US8943462B2 (en) Type instances
Olsson et al. Asynchronous Methods
US20100225954A1 (en) Job schedule generation
Li et al. Automatic Concurrency Management for distributed applications

Legal Events

Date Code Title Description
A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20150515

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150826

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150826

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20160622

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160803

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160819

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20161101

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20161130

R150 Certificate of patent or registration of utility model

Ref document number: 6054397

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250