JP6329329B2 - コード・キャッシング・システム - Google Patents

コード・キャッシング・システム Download PDF

Info

Publication number
JP6329329B2
JP6329329B2 JP2017551130A JP2017551130A JP6329329B2 JP 6329329 B2 JP6329329 B2 JP 6329329B2 JP 2017551130 A JP2017551130 A JP 2017551130A JP 2017551130 A JP2017551130 A JP 2017551130A JP 6329329 B2 JP6329329 B2 JP 6329329B2
Authority
JP
Japan
Prior art keywords
code
source code
execution
cache
secondary source
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
JP2017551130A
Other languages
English (en)
Other versions
JP2018510428A (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.)
Google LLC
Original Assignee
Google LLC
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 Google LLC filed Critical Google LLC
Publication of JP2018510428A publication Critical patent/JP2018510428A/ja
Application granted granted Critical
Publication of JP6329329B2 publication Critical patent/JP6329329B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/957Browsing optimisation, e.g. caching or content distillation
    • G06F16/9574Browsing optimisation, e.g. caching or content distillation of access to content, e.g. by caching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4434Reducing the memory space required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45529Embedded in an application, e.g. JavaScript in a Web browser
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services
    • H04L67/568Storing data temporarily at an intermediate stage, e.g. caching

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Devices For Executing Special Programs (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Stored Programmes (AREA)

Description

本発明は、実行可能コードをキャッシュすることに関し、特に、コンパイルするためのソース・コードを選択し、実行可能コードをシリアライズおよびキャッシュし、キャッシュされた実行可能コードを実行前にデシリアライズすることに関する。
仮想マシン(VM)は、オンデマンドでのコンパイルに際してソフトウェア・コードを実行するために用いられる。オンデマンドでのコンパイルは、実行時コンパイルとも称され、コードのコンパイルがコードの実行直前に行われるか、コードの一部がオンデマンドに(レイジーに)コンパイルされる。コードがリソース(たとえば、ウェブ・ページ内のリソース)に埋め込まれると、クライアント・デバイス上で動作しているアプリケーション(たとえば、ブラウザ)内でリソースがレンダリングされる速度は、埋め込まれたコードの実行速度によって決まる。クライアント・デバイスのユーザは、同一のワーク・セッション(たとえば、ウェブ・ブラウザ・セッション)内で、または、複数の独立ワーク・セッションにわたって、同一のリソースに繰り返しアクセスし得る。しかしながら、ユーザがリソースにアクセスするたびにコードがコンパイルされる必要がある場合、著しく長い時間が各コンパイルに必要となり得る。
コード・キャッシングが処理され得る例示的ネットワーク環境を示す図。 コード・キャッシングが提供され得るクライアント・デバイスを示す図。 スクリプトのキャッシュ・コードへのシリアライズとキャッシュ・コードの実行可能コードへのデシリアライズとが提供され得るコード・キャッシング・プラットフォームのフロー図。 スクリプトのキャッシュ・コードへのシリアライズが提供され得るプロセスの例を示す図。 スクリプトのキャッシュ・コードへのシリアライズが提供され得るプロセスの例を示す図。 本願の技術のいくつかの実施形態が実装される例示的電子システムを概念的に示す図。
様々な態様において、開示される主題はシステム内において具現化される。前記システムは、1以上のプロセッサを備える。前記システムはさらに、メモリを備える。前記メモリは命令を備え、前記命令は実行されるときに前記1以上のプロセッサに、方法を実装させる。前記命令は、実行を待機している一次ソース・コードの第1表示を受信するためのコードを含む。前記命令は、前記第1表示を受信することに応じて前記一次ソース・コードに対応するキャッシュ・データがあるかリソース・キャッシュを確認するためのコードを含む。前記命令は、前記リソース・キャッシュ内のキャッシュ・ミスに際し、前記一次ソース・コードからコンパイルされた第1実行可能コードを取得するためのコードを含む。前記命令は、前記一次ソース・コード内で参照された二次ソース・コードを選択するためのコードを含む。前記命令は、選択された前記二次ソース・コードからコンパイルされた第2実行可能コードを取得するためのコードを含む。前記命令は、前記第1実行可能コードと前記第2実行可能コードとをシリアライズ・コードにシリアライズするためのコードを含む。前記命令は、前記シリアライズ・コードをキャッシュ・データとして前記リソース・キャッシュ内に記憶するためのコードを含む。
これらの、および、他の実施形態は、以下の特徴のうち1以上を含み得る。前記命令は、第1実行コンテキスト内の前記第1実行可能コードの実行から実行結果を取得するためのコードであって、前記二次ソース・コードは前記実行結果に基づいて選択されるコードを含んでもよい。前記二次ソース・コードは、前記二次ソース・コードのサイズ、前記第2実行可能コードのサイズ、前記一次ソース・コード内で前記二次ソース・コードが参照される予測、前記一次ソース・コード内で前記二次ソース・コードが参照される回数、前記一次ソース・コード内で前記二次ソース・コードが参照される頻度、または前記二次ソース・コードのコンパイル時間のうち1以上に基づいて選択されてもよい。前記命令は、第2実行コンテキスト内で実行を待機している前記一次ソース・コードの第2表示を受信するためのコードを含んでもよくであって、前記第2表示は前記第1表示に続いて受信される。前記命令は、前記第2表示を受信することに応じて前記一次ソース・コードと選択された前記二次ソース・コードとに対応するキャッシュ・データがあるかリソース・キャッシュを確認するためのコードを含んでもよい。前記命令は、前記リソース・キャッシュ内のキャッシュ・ヒットに際し、前記シリアライズ・コードを含む前記キャッシュ・データを前記リソース・キャッシュから取り出すためのコードを含んでもよい。前記命令は、取り出された前記シリアライズ・コードを第3実行可能コードにデシリアライズするためのコードを含んでもよい。前記命令は、前記第2実行コンテキスト内における実行用の前記第3実行可能コードを提供する工程ためのコードを含んでもよい。
これらの、および、他の実施形態は、以下の特徴のうち1以上を含み得る。前記第1実行コンテキストと前記第2実行コンテキストとはコード実行用の2つの異なる仮想マシン環境であってもよい。前記一次ソース・コードはウェブ・ページ内のスクリプトであってもよく、前記第1実行コンテキストと前記第2実行コンテキストとは前記スクリプトが実行されるウェブ・ブラウザ・セッションであってもよい。前記一次ソース・コードはウェブ・ページのトップ・レベル・スクリプトであってもよい。前記第1実行可能コードは、前記第1実行可能コードに埋め込まれたメモリ・アドレスを含む1組の参照を含んでもよい。前記命令は、埋め込まれた前記メモリ・アドレスを抽象アドレスと置き換えるためのコードを含んでもよい。
1つの革新的な態様において、開示される主題はシステム内において具現化される。前記システムは、1以上のプロセッサを含む。前記システムはさらに、メモリを含む。前記メモリは、命令を含み、実行されるときに前記1以上のプロセッサに方法を実装させる。前記命令は実行を待機している一次ソース・コードの第1表示を受信するためのコードを含む。前記命令は、前記第1表示を受信することに応じて前記一次ソース・コードに対応するキャッシュ・データがあるかリソース・キャッシュを確認するためのコードを含む。前記命令は、前記リソース・キャッシュ内のキャッシュ・ミスに際し、前記一次ソース・コードからコンパイルされた第1実行可能コードを取得するためのコードを含む。前記命令は、前記一次ソース・コードのサイズ、所定期間内で前記一次ソース・コードが実行される回数もしくは頻度、または前記一次ソース・コードのコンパイル時間のうち1つ以上に基づいて、前記第1実行可能コードをシリアライズ・コードにシリアライズするためのコードを含む。前記命令は、前記シリアライズ・コードをキャッシュ・データとして前記リソース・キャッシュ内に記憶するためのコードを含む。
これらの、および、他の実施形態は、以下の特徴のうち1以上を含み得る。前記命令は、前記一次ソース・コード内で参照される二次ソース・コードを、少なくとも前記二次ソース・コードのサイズ、第2実行可能コードのサイズ、前記一次ソース・コード内で前記二次ソース・コードが参照される回数、前記一次ソース・コード内で前記二次ソース・コードが参照される頻度、もしくは前記二次ソース・コードのコンパイル時間、またはそれらの組み合わせに基づいて、選択するためのコードを含んでもよい。前記命令は、前記二次ソース・コードからコンパイルされた第2実行可能コードを取得するためのコードを含んでもよい。前記命令は、前記第2実行可能コードを前記シリアライズ・コードにシリアライズするためのコードを含んでもよい。前記命令は、第1実行コンテキスト内の前記第1実行可能コードの実行から実行結果を取得するためのコードを含んでもよい。前記二次ソース・コードは前記実行結果に基づいて選択される。前記命令はさらに、第2実行コンテキスト内で実行を待機している前記一次ソース・コードの第2表示を受信するためのコードを含んでもよい。前記第2表示は前記第1表示に続いて受信される。前記第2表示を受信することに応じて前記一次ソース・コードと選択された前記二次ソース・コードとに対応するキャッシュ・データがあるかリソース・キャッシュを確認するためのコードを含んでもよい。前記命令は前記リソース・キャッシュ内のキャッシュ・ヒットに際し、前記シリアライズ・コードを含む前記キャッシュ・データを前記リソース・キャッシュから取り出すためのコードを含んでもよい。前記命令は取り出された前記シリアライズ・コードを第3実行可能コードにデシリアライズするためのコードを含んでもよい。前記命令は前記第2実行コンテキスト内における実行用の前記第3実行可能コードを提供するためのコードを含んでもよい。
これらの、および、他の実施形態は、以下の特徴のうち1以上を含み得る。前記第1実行コンテキストと前記第2実行コンテキストとはコード実行用の2つの異なる仮想マシン環境であってもよい。前記第1実行可能コードは、前記第1実行可能コードに埋め込まれたメモリ・アドレスを含む1組の参照を含んでもよく、前記第1実行可能コードをシリアライズするだめのコードを含む命令は、埋め込まれた前記メモリ・アドレスを抽象アドレスと置き換えためのコードを含んでもよい。
1つの革新的な態様において、開示される主題はコンピュータ可読媒体内において具現化される。前記コンピュータ可読媒体は、コンピュータによって実行される命令を含む。前記命令はコンピュータに、実行を待機している一次ソース・コードの第1表示を受信させるためのコードを含む。前記命令はコンピュータに、前記第1表示を受信することに応じて前記一次ソース・コードに対応するキャッシュ・データがあるかリソース・キャッシュを確認させるためのコードを含む。前記命令はコンピュータに、前記リソース・キャッシュ内のキャッシュ・ミスに際し、前記一次ソース・コードからコンパイルされた第1実行可能コードを取得させるためのコードを含む。前記命令はコンピュータに、第1実行コンテキスト内の前記第1実行可能コードの実行から実行結果を取得させるためのコードを含む。前記命令はコンピュータに、前記一次ソース・コード内で参照された二次ソース・コードを前記実行に基づいて選択させるためのコードを含む。前記命令はコンピュータに、選択された前記二次ソース・コードからコンパイルされた第2実行可能コードを取得させるためのコードを含む。前記命令はコンピュータに、前記第1実行可能コードと前記第2実行可能コードとをシリアライズ・コードにシリアライズさせるためのコードを含む。前記命令はコンピュータに、前記シリアライズ・コードをキャッシュ・データとして前記リソース・キャッシュ内に記憶させるためのコードを含む。
これらの、および、他の実施形態は、以下の特徴のうち1以上を含み得る。前記第1実行可能コードは、前記第1実行可能コードに埋め込まれたメモリ・アドレスを含む1組の参照を含んでもよく、前記第1実行可能コードをシリアライズすることは、埋め込まれた前記メモリ・アドレスを抽象アドレスと置き換えることを含んでもよい。前記実行結果は、前記一次ソース・コード内で参照された前記二次ソース・コードが前記一次ソース・コードの実行時に実行される回数を示してもよい。前記命令は前記コンピュータに、第2実行コンテキスト内で実行を待機している前記一次ソース・コードの第2表示を受信させるためのコードを含んでもよい。前記第2表示は前記第1表示に続いて受信される。前記第2表示を受信することに応じて前記一次ソース・コードと選択された前記二次ソース・コードとに対応するキャッシュ・データがあるかリソース・キャッシュを確認させるためのコードを含んでもよい。前記命令は前記コンピュータに、前記リソース・キャッシュ内のキャッシュ・ヒットに際し、前記シリアライズ・コードを含む前記キャッシュ・データを前記リソース・キャッシュから取り出させるためのコードを含んでもよい。前記命令は前記コンピュータに、取り出された前記シリアライズ・コードを第3実行可能コードにデシリアライズさせるためのコードを含んでもよい。前記命令は前記コンピュータに、前記第2実行コンテキスト内における実行用の前記第3実行可能コードを提供させるためのコードを含んでもよい。前記第1実行コンテキストと前記第2実行コンテキストとはコード実行用の2つの異なる仮想マシン環境であってもよい。前記命令は前記コンピュータに、前記第1実行可能コードに関連付けられている第1実行プロファイルと前記第2実行可能コードに関連付けられている第2実行プロファイルとを取得させるためのコードを含んでもよい。前記命令は前記コンピュータに、前記第1実行プロファイルと第2実行プロファイルとをシリアライズさせるためのコードを含んでもよい。前記命令は前記コンピュータに、シリアライズされた前記第1実行プロファイルと前記第2実行プロファイルとを前記リソース・キャッシュ内に記憶させるためのコードを含んでもよい。取り出された前記シリアライズ・コードをデシリアライズすることは前記第1実行プロファイルと前記第2実行プロファイルとをデシリアライズさせることを含んでもよい。
本願の技術の様々な構成が例示のために図示および説明される以下の詳細な説明から、当業者によって本願の技術の他の構成が容易に識別されると理解される。以下から分かるように、本願の技術の範囲を逸脱することなく、本願の技術は他の異なる構成が可能であり、そのいくつかの詳細は他の様々な点において変形が可能である。したがって、図面および詳細な説明は、本質的に例示として考えられるべきものであって、限定として考えられるものではない。
本願の技術の特徴は、添付される請求項に示される。しかしながら、説明の便宜上、本願の技術のいくつかの実施形態は、図1〜図5に示されている。
用語解説
抽象化する(抽象化):抽象化とは、オブジェクト(たとえば、コード)および実行コンテキストに特有である他のオブジェクト内にあるメモリ・アドレスへの参照を、オブジェクトが新しい実行コンテキスト内で再生成されるように、参照(例えば、リロケーション・データ)を再生成するための命令に置き換えるプロセスである。
シリアライズする(シリアライズ):シリアライズとは、移送可能な順次データであって、オブジェクトに関する情報(たとえば、オブジェクトのタイプまたはオブジェクト内に記憶されたデータのタイプ)だけでなくオブジェクトのデータを含む順次データとして、オブジェクト(たとえば、コンパイルされた実行可能コード)の表現を生成するプロセスである。
デシリアライズする(デシリアライズ):デシリアライズとは、シリアライズされたオブジェクトの順次データからオブジェクト(たとえば、コンパイルされた実行可能コード)を抽出および生成するプロセスである。
ソース・コード:ソース・コードとは、コンピュータによって行われ、人間可読言語を用いて書かれるアクションを指定するコンピュータ命令の集合である。
実行可能コード:実行可能コードとは、コンピュータによって実行可能であって、ソース・コードをパースおよびコンパイルすることによって生成される、1組のマシン言語命令である。
実行コンテキスト(実行環境):実行コンテキストとは、実行可能コードが実行されるコンピュータ・システムまたはコンピュータ・システム(たとえば、仮想マシン)のソフトウェア・エミュレーションを規定する1組の操作パラメータである。
リロケーション・データ:リロケーション・データとは、現行の実行コンテキスト内のメモリ位置またはオブジェクトに対する抽象化されたコード参照を再記憶するために用いられる命令または情報である。
以下に示す詳細な説明は、本願の技術の様々な構成の説明を意図し、本願の技術が実施される唯一の構成だけを表すことを意図しない。添付される図面は、本明細書に組み込まれ、詳細な説明の一部を構成する。詳細な説明は、本願の技術の十分な理解を提供するための具体的詳細を含む。しかしながら、本願の技術は本明細書に示される具体的詳細には限定されず、これら具体的詳細なしに実施されることは明白である。いくつかの事例においては、本願の技術の概念を曖昧にすることを避けるために、構造および要素はブロック図で示される。
リソースのロード時間は、コンピューティング・デバイスを通じてリソースにアクセスしようとする際のユーザ・エクスピリエンスの重要な要素である。リソースは、コンピューティング・デバイス内のローカル・メモリからロードされるアプリケーション、ファイル、またはドキュメントであってもよいし、ネットワーク・リソース(たとえば、ネットワークからロードされるウェブ・ページ内のファイルまたはドキュメント)であってもよい。しかしながら、動的スクリプト(たとえば、リソース内に埋め込まれているJavaScriptコード)は、実行される前にコンパイルされる必要がある。これによって、リソースをロードするプロセスが低速化する可能性がある。したがって、コンパイル・コードをリソース・キャッシュにキャッシュすること、および、後続のセッション時のリソースへの将来的なアクセス用にキャッシュ・コードを再利用することによって、コンピューティング・デバイス上でリソースをレンダリングする効率性を改善することが望まれている。
ソース・コードは、コンパイラ・プログラムによって、コンピュータによって実行可能なローレベル・マシン・コードに変換され得る。マシン・コードは、その後、実行用に記憶され得る。それに代えて、直接的にオン・ザ・フライでソース・コード・プログラムの結果を分析および実行するために、インタプリタが用いられ得る。アプリケーションまたはドキュメント(たとえば、実行可能コードを生成するためのウェブ・ページ)に埋め込まれたソース・コード(たとえば、JavaScript(登録商標)コード)をパースおよびコンパイルすることは、リソースをロードするためのクリティカル・パス上である。コンピュータ・プロセッサによって実行されるとき、実行可能コードによって、プロセッサは命令に従ってタスクを行う。マシン言語は、コンピュータがハードウェアにおいて実行する1組のネイティブ命令である。ローディング・プロセスを高速化するために、コンパイル・コードがシリアライズおよびキャッシュされる(たとえば、バイナリ・フォーマットにおいて)。実行可能コードがキャッシュされると、スクリプトの後続の実行において、ソース・コードはリパースおよびリコンパイルされる必要がなくなる。そして、実行可能コードはキャッシュからデシリアライズされて実行される。
コンパイル・コードのシリアライズ中、コードの状態は、1つの実行環境から他の実行環境へと移送される形式へと変換される。シリアライズ・プロセスは、データ構造またはオブジェクト状態を、シリアライズ・オブジェクトに埋め込まれた情報に基づいて、同一または別のコンテキスト(たとえば、実行環境)内で再構築されるフォーマットへと変換する。シリアライズは、コンパイル・コードから、たとえば、定数、文字列リテラル、オブジェクト・リテラルを表すデータ構造、オンデマンドでのコンパイルに必要なリロケーション・データを含む機能オブジェクト、共有される部分コード、実行環境(たとえば、VM)への参照など、そのコードの様々なコンポーネントと、そのコードが参照するオブジェクトとについての実行可能コードを提供し得る。
図1は、コード・キャッシングが処理され得る例示的ネットワーク環境100を示す。ネットワーク環境100は、クライアント・デバイス101aおよび101nと、サーバ109aおよび109mとを含む。2つのクライアント・デバイス101aおよび101nと、2つのサーバ109aおよび109mとが図1に示されるが、本願の技術はそれらに限定されず、3つ以上のクライアント・デバイスおよびサーバ、または、たった1つのクライアント・デバイスおよび/またはサーバに適用され得る。クライアント・デバイス101aおよび101nと、サーバ109aおよび109mとは、ネットワーク105を通じて互いに通信可能であり得る。サーバ109aまたは109mは、図示しないクライアント・デバイスおよびコンピュータ可読記憶媒体と類似するコンピューティング・デバイスを含み得る。
クライアント・デバイス101aおよび101nの各々は、様々な形態の処理デバイスを表し得る。例示的処理デバイスは、デスクトップ・コンピュータ、ラップトップ・コンピュータ、ハンドヘルド・コンピュータ、パーソナル・デジタル・アシスタント(PDA)、セルラー式電話機、ネットワーク・アプライアンス、カメラ、スマートフォン、拡張汎用パケット無線システム(EGPRS)モバイル・フォン、メディア・プレイヤ、ナビゲーション・デバイス、電子メール・デバイス、ゲーム機、または、これらのデータ処理デバイスもしくはその他のデータ処理デバイスの任意の組み合わせを含み得る。クライアント・デバイス101aおよび101nとサーバ109aおよび109mとは、それ以外のクライアント・デバイス101aおよび101nとサーバ109aおよび109mとのうちいずれかにおいて実行もしくは記憶されたアプリケーション・ソフトウェアへのアクセスを提供されるか、該アプリケーション・ソフトウェアを受信し得る。
サーバ109aおよび109mは、クライアント・デバイス101aおよび101nにコンテンツを提供するためのプロセッサ、メモリ、および通信能力を有する任意のシステムまたはデバイスであり得る。いくつかの例示的態様において、サーバ109aまたは109mは、1つのコンピューティング・デバイス(たとえば、コンピュータ・サーバ)であり得る。他の実施形態において、サーバ109aまたは109mは、協働してサーバ・コンピュータのアクション(たとえば、クラウド・コンピューティング)を実行する2以上のコンピューティング・デバイスを表し得る。さらに、サーバ109aまたは109mは、様々な形態のサーバを表してもよく、ウェブサーバ、アプリケーション・サーバ、プロキシ・サーバ、ネットワーク・サーバ、またはサーバ・ファームを含むが、これらに限定されない。
いくつかの態様では、クライアント・デバイス101aおよび101nは、図示しない通信インターフェースを通じて無線通信してもよい。通信インターフェースは、必要に応じてデジタル信号処理回路を含み得る。通信インターフェースは、様々なモードまたはプロトコル(たとえば、グローバル・システム・フォー・モバイル・コミュニケーション(GSM(登録商標))ボイス・コール、ショート・メッセージ・サービス(SMS)、拡張メッセージング・サービス(EMS)、あるいは、マルチメディア・メッセージング・サービス(MMS)・メッセージング、符号分割多元接続(CDMA)、時分割多元接続(TDMA)、パーソナル・デジタル・セルラー(PDC)、ワイドバンド符号分割多元接続(WCDMA(登録商標))、CDMA2000、または、汎用パケット無線システム(GPRS)、他の形式またはプロトコル)で通信を提供し得る。たとえば通信は、図示しない無線周波数トランシーバを通じて生じ得る。さらに、狭域通信は、たとえばBLUETOOTH(登録商標)、Wi−Fi(登録商標)、または他のそうしたトランシーバが用いられて生じ得る。
いくつかの態様において、ネットワーク環境100は、複数のネットワーク(たとえば、ネットワーク105)に広がる分散型クライアント/サーバ・システムであり得る。ネットワーク105は、大型のコンピュータ・ネットワーク(たとえば、ローカル・エリア・ネットワーク(LAN)、ワイド・エリア・ネットワーク(WAN)、インターネット、セルラー・ネットワーク、または、任意の数のモバイル・クライアント、固定クライアント、およびサーバを接続するそれらの組み合わせ)であり得る。さらに、ネットワーク105は、バス・ネットワーク、スター・ネットワーク、リング・ネットワーク、メッシュ・ネットワーク、スター−バス・ネットワーク、ツリーまたは階層型ネットワークなどを含むネットワーク・トポロジーのうちの任意の1以上を含むが、これらに限定されない。いくつかの態様において、各クライアント(たとえば、クライアント・デバイス101aおよび101n)とサーバ109aまたは109mとの間の通信は、バーチャル・プライベート・ネットワーク(VPN)、セキュア・シェル(SSH)・トンネル、または他のセキュア・ネットワーク接続を介して生じ得る。いくつかの態様において、ネットワーク105はさらに、コーポレート・ネットワーク(たとえばイントラネット)と、1以上の無線アクセスポイントとを含み得る。
例示的態様において、クライアント・デバイス101aまたは101nはどちらも互いに通信可能であって、ネットワーク・プロトコル(たとえば、ハイパーテキスト・トランスファー・プロトコル(HTTP)プロトコル)を用いてサーバ109aまたは109とはネットワーク105を介して通信可能である。クライアント・デバイス101аまたは101nは、クライアント・デバイス101аまたは101nのユーザ・インタフェース内においてアプリケーション107аまたは107n(たとえば、ウェブ・ブラウザ)用のユーザ入力を受信する。ユーザ入力は、どのコンテンツをロードするのかを指定することができる。たとえば、ユーザ入力は、どのコンテンツがサーバ109aまたは109mからロードされるかを指定するウェブサイトに関連付けられているユニフォーム・リソース・ロケータ(URL)アドレスであり得る。さらにユーザは、入力を行うことで、ユーザがクライアント・デバイス101aまたは101n(図1に示されている)のユーザ・インタフェース(UI)上で、ウェブ・ページのどの部分をユーザが見たいか指定し得る。そのような例示的態様において、クライアント・デバイス101aまたは101nの各々は、ユーザからの要求に基づくキャッシュされた実行可能コード用のキャッシュを確認することができ、クライアント・デバイス101аまたは101n上での実行用にキャッシュされた実行可能コードを提供することができるコード・キャッシング・プラットフォーム103または103nを含み得る。
図2は、コード・キャッシングが提供され得るクライアント・デバイスを示す。クライアント・デバイス200は、図1のクライアント・デバイス101aおよび101nに類似している。図示する通り、クライアント・デバイス200は、プロセッサ201、ネットワーク・インターフェース203、およびメモリ205を含む。プロセッサ201は、コンピュータ可読媒体(たとえば、メモリ205)内に記憶されたコンピュータ命令を実行するよう構成されている。プロセッサ201は、中央処理装置(CPU)であり得る。ネットワーク・インターフェース203は、クライアント・デバイス201がネットワーク105内(たとえば、インターネット、イントラネット、ローカル・エリア・ネットワーク、またはセルラー・ネットワーク)内のデータを送受信可能になるよう構成されている。ネットワーク・インターフェース203は、ネットワーク・インターフェース・カード(NIC)を含み得る。
メモリ05は、データおよび命令を記憶する。図示する通り、メモリ205は、図1のアプリケーション107aおよび107nに類似するアプリケーション207と、図1のコード・キャッシング・プラットフォーム103aおよび103nに類似するコード・キャッシング・プラットフォーム209を有する。アプリケーション207とコード・キャッシング・プラットフォーム209とは、実行環境(たとえば、仮想マシン211)内で機能し得る。
アプリケーション207は、プロセッサ201によってクライアント・デバイス00上で実行されるソフトウェア・アプリケーションであり得る。たとえば、アプリケーション207は、ネットワーク105を通じてサーバ109aまたは109mによって提供されるサービスへのアクセスをクライアント・デバイス200のユーザに対して提供するウェブ・ブラウザであり得る。サーバ109aおよび109mは、ウェブサイトの形式においてクライアント・デバイス200に対してサービスを提供する可能性があり、サーバ109aまたは109mによって提供されるウェブ・ページは、クライアント・デバイス200においてロードされる際にコンパイルおよび実行される複数のソース・コードまたはスクリプト(たとえば、JavaScript)を含み得る。
コード・キャッシング・プラットフォーム209は、アプリケーション207に対するコード・キャッシング・サービスを提供するよう構成され得る。アプリケーション207において、アプリケーション207は、サーバ109aおよび109mによってクライアント・デバイス200に対して提供されるサービスをレンダリングする。いくつかの態様において、コード・キャッシング・プラットフォーム209は、クライアント・デバイス200上での実行を待機するアプリケーション207に埋め込まれたソース・コードの表示を受信する。ソース・コードの表示は、メモリ205中のアプリケーション207内に埋め込まれたソース・コードの位置を指すリンクであり得る。該表示は、ソース・コードに関連付けられている識別子、または、ソース・コードのフル・コンテンツでもあり得る。該表示を受信することに応じて、コード・キャッシング・プラットフォーム209は、ソース・コードに対応するキャッシュされた実行可能コード用のメモリ205内でリソース・キャッシュ213を確認することが可能である。リソース・キャッシュ213は、永続性/不揮発性メモリ内に記憶され得る。
たとえば、ソース・コードまたはソース・コードの一部(たとえば、サブコード、機能、など)は、以前にリソース・キャッシュ213内にコンパイルおよびキャッシュされていた可能性がある。二次ソース・コードとも称されるサブ・コードは、ソース・コード内で参照される(たとえば、呼び出される)機能であり得る。二次ソース・コードは、様々な条件(たとえば、ユーザ入力、他の二次ソース・コードからの出力など)に基づいて、ソース・コード内で参照され得る。さらに、ソース・コードに関連するデータ(たとえば、タイプ情報)は、キャッシュされていた可能性がある。実行可能コードをより効率的に生成するために、キャッシュ・データはコンパイラによって用いられる。たとえば、コード・キャッシング・プラットフォーム209は、ソース・コードを実行可能コードへとコンパイルするためクライアント・デバイス200内のコンパイラ(図2に示されていない)に送ることによって、ソース・コードからコンパイルされた実行可能コードを取得し、クライアント・デバイス200上の実行用に実行可能コードを提供し得る。ソース・コードに対応するキャッシュされた実行可能コードまたはソース・コード内で参照された二次ソース・コードがリソース・キャッシュ213内で発見される場合、コード・キャッシング・プラットフォーム209は、コンパイルされるソース・コード内で参照される二次ソース・コードを選択し得る。コード・キャッシング・プラットフォーム209は、ソース・コードに対応する実行可能コードおよび/または二次ソース・コードに対応する実行可能コードをキャッシュし得る。しかしながら、ソース・コードに対応するキャッシュされた実行可能コードがリソース・キャッシュ213内で発見されると、キャッシュされた実行可能コードは、ソース・キャッシュから取り出され、ソース・コードのコンパイルの必要がなく実行される。
実行可能コードは、1組の参照を含み得る。実行可能コードに含まれる参照は、たとえば、実行可能コードが実行されている実行環境(たとえば、仮想マシン211)に対応する実行可能コードに埋め込まれているメモリ・アドレスであり得る。埋込は、1つの実行環境から別の実行環境へはポーティング不可能である場合がある。しかしながら、埋込アドレスを抽象化することによって生成されたリロケーション・データは、複数の実行コンテキストにわたってである。リロケーション・データは、たとえば、ポーティング後にノン・ポータブル・アドレスを再記憶することによって、実行可能コード内の埋込アドレスの抽象化を実装するために用いられる。ソース・コード用の実行可能コードおよび選択された二次ソース・コードを取得すると、コード・キャッシング・プラットフォーム209は、実行可能コードをシリアライズする。シリアライズすることは、実行コンテキスト(たとえば、仮想マシン211)から実行可能コード内の1組の参照を抽象化することを含む。実行コンテキストは、コンピュータ・システム内の操作環境に対して、実行可能コードを実行するための電力およびメモリへのアクセスを提供する。コード・キャッシング・プラットフォーム209は、実行可能コードに関連付けられているリロケーション・データを生成し、抽象化された参照のさらなる変換が生成されたリロケーション・データに基づいて行われるように、抽象化を反映する。
コード・キャッシング・プラットフォーム209は、ソース・コード用のシリアライズ・コードと、ソース・コード内で参照された選択された二次ソース・コードとを、メモリ205におけるリソース・キャッシュ213内のキャッシュ・データとして記憶する。従来のキャッシュ・マネジメント・ストラテジーは、リソース・キャッシュを管理するために用いられ得る。さらに、キャッシュ・タグは、リソース・キャッシュ内のキャッシュ・データ位置を識別するために用いられ得る。さらに、コード・キャッシング・プラットフォーム209は、仮想マシン211における実行用の実行可能コードを提供できる。いくつかの態様において、仮想マシン211におけるシリアライズ・コードの記憶の後に、コード・キャッシング・プラットフォーム209は、異なる仮想マシン環境において、実行を待機するソース・コードの二次表示を受信し得る。たとえば、上述のような実行可能コードの実行後、クライアント・デバイス200は、再始動または再起動されていた可能性がある。上述の通り、表示に応じて、コード・キャッシング・プラットフォーム209は、ソース・コードに対応するキャッシュされた実行可能コードまたはソース・コード内で参照された二次ソース・コード用のメモリ205内でリソース・キャッシュ213を確認できる。二次ソース・コードが以前にリソース・キャッシュ213内でコンパイルおよびキャッシュされていたので、二次ソース・コードに対応するキャッシュされた実行可能コードは、リソース・キャッシュ213内で発見される。リソース・キャッシュ213内におけるキャッシュ・ヒットの際、コード・キャッシング・プラットフォーム209は、キャッシュ・データをメモリ205内のリソース・キャッシュ213から取り出す。
キャッシュ・コードは、以前のコンパイル時に二次ソース・コードから抽象化された参照に対応するシリアライズ・コードを含む。コード・キャッシング・プラットフォーム209は、取り出されたシリアライズ・コードから、新しい実行可能な二次ソース・コードへとデシリアライズすることができる。デシリアライズ・プロセスは、イニシャル・コードと、イニシャル・コードによって参照されるオブジェクトのタイプと、オブジェクト内に記憶されたデータのタイプとに関するシリアライズ・データを伴って情報(たとえば、リロケーション・データ)を用いて、一連の記憶されたデータからコードを抽出する。デシリアライズを通じて生成される実行可能コードは、イニシャル実行可能コードと類似の構造、特徴、およびビヘイビアを有する。したがって、コンピュータによる実行可能コードと該実行可能コードによって参照されたオブジェクトとの実行によって、イニシャル・コードの実行によって行われるのと同一のタスクが行われる。コードによって参照されたコードとオブジェクトとは両方とも、シリアライズおよびデシリアライズの対象となる。デシリアライズは、取り出されたシリアライズ・コードを用いて、新しい実行可能二次ソース・コード内の各二次ソース・コードからの1組の参照を、該新しい実行可能二次ソース・コードが再始動の際にクライアント・デバイス200上に構築された新しい仮想マシン環境内で実行可能となるように、再記憶することを含み得る。コード・キャッシング・プラットフォーム209は、その後、クライアント・デバイス200上における新しい仮想マシン環境内での実行用の新しい実行可能二次ソース・コードを提供可能である。新しい実行可能二次ソース・コードは、キャッシュされたことがなく、この実行用にコンパイルされているソース・コード内で参照される他の二次ソース・コードとともに実行され得る。コード・キャッシング・プラットフォーム209は、ソース・コードの様々な実行におけるキャッシング用の新しい二次ソース・コードを選択し得る。さらに、コード・キャッシング・プラットフォーム209は、以前選択およびキャッシュされた二次ソース・コードを、ソース・コードの二次ソース・コードの実行履歴に基づいて、他の、たとえば、より頻繁に実行される二次ソース・コードに置き換え得る。
前述の通り、コード・キャッシング・プラットフォーム209によるコード・キャッシングは、ネットワーク105を介してのサーバ109aまたは109bとの通信をせずに、クライアント・デバイス101аまたは101b内で行われる。たとえば、例示的態様において、コード・キャッシング・プラットフォーム209によってシリアライズおよびデシリアライズされているソース・コードは、クライアント・デバイス101аまたは101nのメモリ上で局所的に記憶されたコードであり得る。
図3は、スクリプトのキャッシュ・コードへのシリアライズとキャッシュ・コードの実行可能コードへのデシリアライズとが提供され得るコード・キャッシング・プラットフォームのフロー図である。図3に示す通り、コード・キャッシング・プラットフォーム209は、フロント・エンド303と、シリアライジング・モジュール309と、デシリアライジング・モジュール319とを備える。フロント・エンド303は、確認モジュール305と、圧縮モジュール307とを備える。フロント・エンド303は、ソース・コード301を受信する。ソース・コードを受信すると、確認モジュール305は、ソース・コードに対応するキャッシュされたシリアライズ・コード用のデータ・ストア313を確認する(矢印311で図示)。シリアライズ・コードがデータ・ストア313内で発見されない場合(キャッシュ・ミス)、フロント・エンド303はコンパイラ327にソース・コードを送る(矢印325で図示)。コンパイラ327は、ソース・コードをコンパイルし、実行可能コードおよび参照を記憶する。コンパイラ327は、実行環境331(図3に示さず)に関連付けられているメモリ位置内の実行可能コードおよび参照を記憶し得る。実行可能コードは、実行環境331内での実行のために実行環境331に送られる(矢印329で図示)。実行環境331は、たとえば、ブラウザ・セッション内における図2の仮想マシン211に類似する仮想マシンである。
コンパイラ327は、実行可能コードおよび参照をシリアライズ用にシリアライジング・モジュール309に送る(335に図示)。フロント・エンド303は、たとえば、過去の実行における部分の実行の頻度に基づいて、または、ソース・コード内の該部分を参照する機能呼出の頻度に基づいて、シリアライズ用のソース・コード内で参照された部分(たとえば、二次ソース・コード)を選択し得る。コード・キャッシング・プラットフォーム209は、様々な基準(たとえば、ヒューリスティクス)に基づいて、シリアライズおよび/またはキャッシング用のソース・コード内で参照されたソース・コードまたは二次ソース・コードを選択できる。いくつかの例示的基準は、ソース・コードまたは二次ソース・コードのサイズ、ソース・コードまたは二次ソース・コードの寿命(たとえば、ソース・コードまたは二次ソース・コードの最終改定日または満了日に基づく)、ソース・コードまたは二次ソース・コードの使用頻度(たとえば、n番目のエンカウンタ後にキャッシュする)、リソース・キャッシュ213内でキャッシュ・コードが置き換えられる頻度、二次ソース・コードが一次ソース・コード内で参照される回数、または、二次ソース・コードのコンパイル時間であり得る。コード・キャッシング・プラットフォーム209は、二次ソース・コードがソース・コード内で参照されるという予測に基づいて、シリアライズおよびキャッシング用のソース・コード内で参照された二次ソース・コードを選択し得る。たとえば、コード・キャッシング・プラットフォーム209は、ソース・コードがコンパイルされているとき、二次ソース・コードがソース・コード内で参照されることを予測し得る。ソース・コードからのコンパイル結果は、二次ソース・コードが実行中にソース・コードによって参照されるであろうことを示し得る。
コード・キャッシング・プラットフォーム209は、ソース・コードが閾値Sよりも小さなサイズである場合、ソース・コードをシリアライズし得る。その論理的根拠は、コードの大部分をシリアライズすることは、キャッシュ・データを記憶するためには、長時間を要する可能性があり(たとえば、クライアント・デバイス101a〜101n上の利用可能ディスク・スペースに基づいて判定される)、メモリの高容量を必要とする可能性がある、ということである。
他の例示的基準は、キャッシュ・アクセス・レイテンシ(たとえば、キャッシュ・エントリ・サイズ)、ソース・コードまたはソース・コードの一部のコンパイル時間(たとえば、ソース・コードのイニシャル・コンパイルにどれほど時間がかかるのかを記録し、その時間を判定の考慮に入れる)、リソース・キャッシュ213をホストするクライアント・デバイス101a〜101nのメモリ容量、ソース・コード更新の頻度(たとえば、ソース・コードが頻繁に更新されている場合、ソース・コードをキャッシュすることは有益でない可能性がある)などであり得る。コード・キャッシング・プラットフォーム209は、シリアライズするコードの選択の前に、上記要因間におけるトレード・オフを算出し得る。たとえば、重量要因は、上述の様々な基準の重要性のレベルを判定するために、ソース・コードまたはソース・コードの一部用に規定される。トレード・オフの算出は、たとえば、規定された重量要因に基づいて行われる。たとえば、クライアント・デバイス101a〜101nのコード・サイズとメモリ容量との間におけるトレード・オフにより、コードが頻繁に呼び出されていても、クライアント・デバイス101a〜101n上の大幅なメモリ・スペースを占め得る大きいサイズであるコードの上記キャッシングをもたらし得る。
様々な例において、フロント・エンドは、実行可能コードおよび参照をシリアライズするかどうかに関する判定を下すことができる。たとえば、いくつかの基準は、シリアライズされるソース・コードまたはソース・コードの一部のタイプと、シリアライズされずにコンパイルおよび実行されるタイプに関して、サーバ109aまたは109mによって規定され得る。さらに、ソース・コードの一定のタイプは、セキュリティの目的におけるソース・コードの実行毎の前に照合される必要があり得る。そのような場合、フロント・エンド303は、ソース・コードまたはソース・コードの一部に、シリアライズされるべきでないソース・コードとして、警告を与え得る。
他のコード・キャッシング基準は、所定の回数より多くコンパイルされるコードへのコード・キャッシングの適用も含み得る。たとえば、キャッシュ・ミスが初めて検知されると、ソース・コードはコンパイルされるが、シリアライズまたはキャッシュはされない。ソース・コードは、実行されているコードのシリアライズなしで、「一度コンパイルしたもの」としてマークされる。同様に、ソース・コードは、所定の閾値Cに達するまでにソース・コードがコンパイルされた回数を示すカウンタを伴ってマークされる可能性があり、C番目のキャッシュ・ミスに際し、コード・キャッシング・プラットフォーム209はソース・コードをシリアライズおよびキャッシュすることができる。それに代えて、ジェネリック・マーカでなく、タイムスタンプが1番目のキャッシュ・ミス上に設定されてもよく、1番目のキャッシュ・ミスとC番目のキャッシュ・ミスとの間における時間差を、シリアライズの判定を行う際に用いられてもよい。基準は、たとえば、「コンパイル・コードが少なくとも週にC回実行される場合、コンパイル・コードはキャッシュされる」に変換される。ソース・コードをキャッシュするための判定についての他の基準は、たとえば、コンパイル時間、生成されたコードのサイズ、HTTPキャッシュ・ヘッダ・データなどが考えられる。
コード・キャッシング・プラットフォーム209は、後続の実行でさらにキャッシュされて用いられる二次ソース・コードを選択するために、ソース・コードの実行データを用い得る。実行データは、たとえば、実行されるコードが実行中に参照するコードの他の部分、ソース・コードの実行プロファイル、キャッシングに価値をもたせるべくソース・コードが頻繁に実行されるか(たとえば、所定の回数を超える回数)、実行中に観察されるタイプ(たとえば、ユーザ規定のテータ構造)情報などを含む。さらに、実行データは、該データが実行コンテキスト内でデシリアライズされるようにシリアライズされ得る。デシリアライズ後、実行データがデシリアライズ・コードとともに用いられ得る。たとえば、実行プロファイルは、実行可能コードを最適化する時間を費やすか否かについて判定するために、実行コンテキスト内で用いられ得る。
動的型付け言語(たとえば、JavaScript)は、ソース・コード内に規定されるオブジェクトに関する多数のタイプ情報を提供する。動的型によって、ソース・コードのオブジェクトは、ソース・コードの様々な実行中に様々なタイプを有することができる。しかしながら、ソース・コードの様々な実行を観察することによって、オブジェクトのタイプがどれほど頻繁に変化するかに関する洞察が得られる可能性がある。
特定のオブジェクトOのタイプTは、他のコンテンツに基づいて判定される。しかしながら、ソース・コードがオブジェクトOと対話すると、ソース・コードはタイプ情報へのアクセスを有さない。したがって、オブジェクト・タイプTはソース・コードにとって未知である。結果として、ソース・コードは、オブジェクトOにアクセスする前に、タイプTを判定する必要がある。いくつかの態様において、コード・キャッシング・プラットフォーム209は、オブジェクト・タイプTを判定およびキャッシュする。たとえば、コード・キャッシング・プラットフォーム209は、オブジェクトOが実行環境内(たとえば、ウェブサイト内)でアクセスされるとき、オブジェクトの特定のタイプをソース・コード内で観察し得る。コード・キャッシング・プラットフォーム209は、アクセス・ウェブサイトを、ウェブサイトによってアクセスされたオブジェクトのタイプTに関連付けることができる。タイプTとともに、コード・キャッシング・プラットフォーム209はさらに、アクセス時間において判定された「どのようにアクセスするか」の情報をキャッシュすることができる。その後、同一の実行環境においてソース・コードによってオブジェクトOがアクセスされるとき、予期されるタイプTとオブジェクトOにアクセスするための方法とはキャッシュ・データから既知である。また、コード・キャッシング・プラットフォーム209は、予期されるタイプTが現在のアクセスにおけるオブジェクトのタイプと同一であるかを確認することができる。タイプが合致する場合、キャッシュされたアクセス方法は、必要とされるアクセス方法のさらなる判定なしにオブジェクトOにアクセスするために用いられる。
さらに、オブジェクト・タイプTは、実行環境内のオブジェクトOにアクセスするためのアクセス方法に関する情報を提供することができる。オブジェクトOにアクセスするためのアクセス方法が判定されると、シリアライズ中に、アクセス方法に関する情報はリソース・キャッシュ内にタイプ情報として記憶され、アクセス方法に関連付けられる。記憶されたタイプ情報を用いることで、デシリアライズの際、オブジェクトOへの後続のアクセスを、アクセス方法を判定する必要なしに高速化することができる。
シリアライジング・モジュール309によるシリアライズは、実行可能コード内のアドレスを抽象アドレスと置き換えることによって、実行可能コード内の参照を抽象化することができる。シリアライジング・モジュール309は、実行可能コードに対応するシリアライズ・コードと、フロント・エンド303への実行可能コード内の参照の抽象化に対応するリロケーション・データとを提供する(323に図示)。シリアライズ・コードを提供する際、シリアライジング・モジュール309は、実行可能コードに対応する関連部分および参照と、実行環境331からの参照とを、発見することができる。シリアライジング・モジュール309は、その部分と参照とを、シリアライズ・コードに含まれるよう、実行環境331から独立して隣接バイナリ表現に変換することができる。フロント・エンド303は、シリアライジング・モジュール309によって生成されるシリアライズ・コードをデータ・ストア313内に、キャッシュされたシリアライズ・コードとして記憶することができる。シリアライジング・モジュール309は、抽象化に対応するシリアライズ・コードを、そのコードをシリアライズ・コード内の他のデータ・タイプから差別化するタグを用いて、符号化し得る。
他の例において、シリアライズ・コードは、フロント・エンド303によってデータ・ストア313内およびメタデータ315中のリロケーション・データ内に記憶された後、フロント・エンド303は、異なる実行環境333(たとえば、新しいブラウザ・セッション内の新しいVM)内のソース・コードの実行用に新しい要求を受信し得る。この例において、確認モジュール305は、データ・ストア313内のキャッシュされたシリアライズ・コードを発見することに成功し得る(キャッシュ・ヒット)。キャッシュ・ヒットに際して、フロント・エンド303は、キャッシュされたシリアライズ・コードをデータ・ストア313からロードすることができ(317で図示)、デシリアライジング・モジュール319にロードされたキャッシュされたシリアライズ・コードを送ることができる。キャッシュされたシリアライズ・コードをロードする前に、フロント・エンド303は、キャッシュされたシリアライズ・コードがソース・コードの同一バージョンに対応するかを判定できる。バージョンが合致しない場合、フロント・エンド303は、キャッシュされたシリアライズ・コードをデシリアライズしないことを判定し、コンパイルされるソース・コード用のコンパイラ327に要求を送ることができる。フロント・エンド303はさらに、メモリ・スペースを確保するために、旧式のキャッシュ・コードを退避させ得る。フロント・エンド303は、ネットワーク105(たとえば、ハイパーテキスト・トランスファー・プロトコル(HTTP))内の通信プロトコルによって提供される標準バージョン確認プロセスに基づいて、キャッシュされたシリアライズ・コードとソース・コードとのバージョンを判定し得る。
キャッシュされたシリアライズ・コードをデータ・ストア313から取得すると、デシリアライジング・モジュール319は、キャッシュされたシリアライズ・コードの妥当性を照合して、そのキャッシュされたシリアライズ・コードを、シリアライズ・コード内のリロケーション・データを用いて、実行可能コードおよび参照にデシリアライズする。デシリアライジング・モジュール319は、実行可能コードおよび参照を実行のために実行環境331に送る(321で図示)。シリアライズ・コードがソース・コードの一部に対応する場合、キャッシュされていない該ソース・コードの一部はコンパイラ327によって実行可能コードへとコンパイラされ、実行環境331内で実行される前に、実行可能コードはデシリアライズされた実行可能コードと組み合わされる。
なお、シリアライジング・モジュール309とデシリアライジング・モジュール319とは、異なる実行環境331および333内でアクティベートされ得る。シリアライズ・コードは、(実行可能コードおよび参照が生成および実行される)実行環境331内で生成される。一方、デシリアライジング・モジュール319によって提供される実行可能コードおよび参照は、後続の実行環境333内で生成される。
データ・ストア313内のキャッシュ・データのサイズを削減するために、圧縮モジュール307は、たとえば、データ・ストア313内のシリアライズ・コードを記憶する前に、シリアライズ・コード上の様々な圧縮アルゴリズムを適用することによって、データを圧縮し得る。圧縮モジュール307はさらに、キャッシュされたシリアライズ・コードをデシリアライジング・モジュール319に送る前に、キャッシュされたシリアライズ・コードを解凍し得る。
キャッシュされたシリアライズ・コードは、異なる実行環境において、実行可能コードおよび参照のコンテキスト独立全表現として用いられる。たとえば、実行環境333用の実行可能コードおよび参照を生成しているとき、デシリアライジング・モジュール319は、実行環境331用の実行可能コードおよび参照を生成する際のコンパイラ327のビヘイビアを模倣することができる。したがって、キャッシュされたシリアライズ・コードの実行可能コードおよび参照へのデシリアライズ後、実行環境333内の実行可能コードおよび参照の実行によって、実行環境331内のコンパイラ327によって提供される実行可能コードおよび参照の実行と同等の結果を得ることができる。
デシリアライジング・モジュール319によるデシリアライズのプロセスは、メタデータ315内のリロケーション・データを用いて参照を再記憶することによって、該参照が実行環境331と実行環境333との間における差異を反映することができる。たとえば、上述の通り、シリアライズとデシリアライズとが異なる実行環境(たとえば、VMの例)内で動作し得るため、実行環境331に対応する実行可能コードおよび参照のメモリ・アドレスは、実行環境333内では有効でない可能性がある。しかしながら、シリアライズとデシリアライズとによって、デシリアライズされた実行可能コードおよび参照内のメモリ・アドレスが実行環境333内で有効であることが確実になる。たとえば、実行環境内の機能アドレスへの参照は、デシリアライジング・モジュール319によって文字通りに符号化されない。これは、それらのアドレスが異なる実行環境331および333内では異なるためである。
シリアライジング・モジュール309は、ソース・コード内と実行可能コードおよび参照内との各オブジェクトを精査し、各オブジェクトがどのようにシリアライズされるべきかを判定し得る。たとえば、一定の固有オブジェクト(たとえば、正規不定値)は、抽象インデックス(たとえば、ルート・アレイ)内の実行可能コードおよび参照に含まれ得る。そのような固有オブジェクトがシリアライジング・モジュール309によってシリアライズされると、シリアライジング・モジュール309は、固有抽象インデックスによって該オブジェクトをシリアライズする。デシリアライジング・モジュール319によって固有オブジェクトがデシリアライズされると、該インデックスはオブジェクトを識別するために用いられる。
さらに、ソース・コードは、エレメンタリ・タスクを行う実行可能コードの生成された部分であるビルトイン・コードを含み得る。ビルトイン・コードは、ソース・コード内の複数のオブジェクトによって共有され得るので、実行環境331(または333)内で常に利用可能であるべきである。シリアライジング・モジュール309は、各ビルトイン・コードをビルトイン識別子へとマッピングする可能性があり、該ビルトイン・コードをシリアライズ・コード内のビルトイン・コードの表現としてシリアライズする。デシリアライズの際、フロント・エンド303は、実行環境333内において、同一の識別子とともにビルトイン・コードを発見することができる。
同様に、ソース・コードは、コード・スタブを含み得る。コード・スタブは、オンデマンドで生成され実行環境333上で必ずしも利用可能でないことを除けば、ビルトイン・コードと類似する。シリアライジング・モジュール309は、シリアライズ・コードを生成する際、コード・スタブをコード・スタブ・キーへとマッピング可能である。デシリアライズの際、フロント・エンド303は、実行環境333がコード・スタブを含むか確認し得る。実行環境333がコード・スタブを含まない場合、コード・スタブ・キーに対応するコード・スタブは、デシリアライジング・モジュール319によって生成される。
さらに、ソース・コードは、文字列リテラルを含み得る。固有文字列リテラルは、シリアライジング・モジュール309によって、文字通りにシリアライズされる。デシリアライズの際、フロント・エンド303は、同一の文字列リテラルが実行環境333内に既に存在するかを確認する。固有文字列リテラルが実行環境333内に存在する場合、デシリアライジング・モジュール319は文字列リテラルを既に存在している固有文字列リテラルへと正規化する。正規化プロセスは、2つ以上の表現(たとえば、1つの表現はキャッシュされたシリアライズ・コード内、2番目の表現は実行環境333内)とともに、文字列リテラルを標準または正規の形式へと変換する。
いくつかの例において、シリアライズされたオブジェクトは、ソース・コードのソース文字列への参照を有する。そのような例において、シリアライジング・モジュール309は、オブジェクトを特別な表現に置き換えることができる。デシリアライズの際、デシリアライジング・モジュール319は、特別なコードを、実行環境333内でのデシリアライズ時において個別に提供されるソース文字列への参照に置き換えることができる。
上述のオブジェクト・アドレスのシリアライズに加えて、実行可能コードに埋め込まれたアドレスも実行環境内の一定値のアドレスまたはVMの機能のアドレスであり得る。実行環境内の一定値のアドレスまたはVMの機能のアドレスは、コンパイラとVMとにとって既知である。これらのアドレスは、たとえば、参照識別子として表現され、該参照識別子はデシリアライズ時にアドレスを再記憶するために用いられる。さらに、ソース・コードは、非固有オブジェクトを含み得る。非固有オブジェクトは、コピーとしてシリアライズされる。たとえば、非固有オブジェクトは、データ・フィールドと他のオブジェクトへの参照とで構成され得る。シリアライズ時、データ・フィールドはコピーされ、他のオブジェクトへの参照は、固有である場合、固有オブジェクトに関して前述されたようにシリアライズされる。
以下の例は、コンパイルからサンプル・コードのシリアライズおよびデシリアライズへのコード・キャッシング・プロセスを説明している。サンプルのJavaScriptコード(A)が本例において検討される。
サンプル・コード(A)用の実行可能コードは、たとえば、機能ヘッダ、スタック・オーバーフローに対しての確認命令(呼出スタック・オーバーフロー・ビルトイン)、変数宣言「foo」、内部関数(){return 1;}用のクロージャのインスタンス化、クロージャを「foo」という名称のグローバル・プロパティへ割り当てること、「foo」という名称のグローバル・プロパティをロードすること、ロードされたプロパティを呼び出すこと、不定値に戻ることなどの命令を含む。
さらに、サンプル・コード(A)用の実行可能コードは、リロケーション情報への参照を含み得る。リロケーション情報は、スタック・オーバーフロー・ビルトインはビルトインであること、文字列リテラル「foo」はオンヒープ・オブジェクトであること、(){return 1;}用の機能記述はオンヒープ・オブジェクトであること、機能クロージャ初期化は実行時呼出として実装されて、それ自体が外部参照であるということ、プロパティをロードすることはスタブに対する呼出であること、プロパティを呼び出すことはスタブに対する呼出であること、不定値はオンヒープ・オブジェクト(たとえば、図3に関して上述の固有オブジェクト)であり得ること、を示し得る。
また、サンプル・コード(A)用の実行可能コードは、文字列リテラル「foo」に関連付けられているメタデータ(たとえば、「foo」がマップ・オブジェクトによって示される「内在文字列」というタイプのオブジェクトであること、文字列コンテンツが「foo」であること、文字列の長さが3であること)を含み得る。さらに、サンプル・コード(A)用の実行可能コードは、トップ・レベル機能および内部関数(){return 1;}用の機能記述を含む。機能記述は、マップ・オブジェクトによって示される「共有機能情報」というタイプのオブジェクトであり得る。機能記述は、ソース・コード内の始点と終点とに関する文字位置を含み得る。さらに、機能記述は、サンプル・コード(A)が既にコンパイルされていた場合、コンパイル・コードを指し得る。
当初は、内部関数「foo」はレイジーにコンパイルされる。レイジー・コンパイルとは、内部関数「foo」はトップ・レベル・コードがコンパイルされる際にはコンパイルされず、トップ・レベル・コードのコンパイル中においてのみ内部関数「foo」が生成される。内部関数「foo」が最終的に呼び出されるとき(たとえば、トップ・レベル・コードの実行中)、内部関数「foo」はオンデマンドにコンパイルされる。しかしながら、内部関数「foo」がコンパイルされない限り、内部関数「foo」用の実行可能コードは存在せず、内部関数用の実行可能コードはシリアライズされない。
コード・キャッシング・プラットフォーム209がキャッシュ・データ内の内部関数「foo」用のコンパイル・コードを含むようにする様々な方法がある。コード・キャッシング・プラットフォーム209は、トップ・レベル・コード内で内部関数「foo」が呼び出される(「foo」がサンプル・コード(A)内で規定され、呼び出される)ことを認識し得る。この認識を以て、コード・キャッシング・プラットフォーム209は、トップ・レベル・コードのコンパイルにおいてトップ・レベル・コードをコンパイルすることの一部として内部関数「foo」をしきりにコンパイルする可能性があり、トップ・レベル・コードをコンパイルした後、シリアライズ用のコンパイル・コードを用いた。
シリアライズ・コード内の内部関数「foo」用のコンパイル・コードを含む他の方法は、コード・キャッシング・プラットフォーム209にトップ・レベル・コードを少なくともシリアライズ前に実行させることである。内部関数「foo」はトップ・レベル・コードの実行中に呼び出されるので、「foo」は上述の通りレイジーにコンパイルされ、コンパイル・コードはメモリ内に記憶される。この場合、後になってトップ・レベル・コードをシリアライズする際、「foo」用の内部関数記述(トップ・レベル・コードの初期コンパイルの間に生成される)は、内部関数「foo」のレイジーにコンパイルされたコードを指す。これにより、コード・キャッシング・プラットフォーム209は、トップ・レベル・コードをシリアライズする際、内部関数「foo」をシリアライズできる。
シリアライジング・モジュール309は、オブジェクト・グラフを訪れること、参照をトラバースすること、トップ・レベル・コード用の機能記述において始動することによって、サンプル・コード(A)をシリアライズすることができる。コード・キャッシング・プラットフォーム209は、オブジェクトが2度以上シリアライズされるように、データ・ストア313内で既に訪れられたオブジェクトの履歴を保持する可能性があるか、または、無限ループに陥る可能性もある。既に訪れられてシリアライズされたオブジェクトは、バック参照として表現(符号化)される。オブジェクトは、コンテンツまたは他のオブジェクトへの参照のどちらかを含み得る。オブジェクト・コンテンツは、文字通りにシリアライズされる。しかしながら、他のオブジェクトへの参照は、既知オブジェクトへの参照またはシリアライズされる必要もあるオブジェクトへの参照であってもよい。たとえば、関数記述は、「共有関数情報」マップと機能用のコンパイル・コードとに対する参照を有し得る。さらに、機能関数は、文字通りにシリアライズされる文字位置上の情報を含み得る。シリアライジング・モジュール309によってエンカウンタされるマップ・オブジェクトは、正規オブジェクトおよびルート・リストの一部であり得る。シリアライジング・モジュール309は、ルート・リスト内でマップ・オブジェクトを発見してもよく、オブジェクトを表現するためにルート・リスト・インデックスを用いてもよい。
トップ・レベル関数用のコード・オブジェクトは、そのマップ(コード・オブジェクト用)への参照とリロケーション情報への参照とを除き、文字通りにシリアライズされる。命令ストリームは、リロケーション情報によって記述された埋め込みポインタを含み得る。さらに、これらのポインタはシリアライズ中に訪れられる。ポインタは、デシリアライズに際して更新される必要があるため、文字通りにシリアライズされる前に零(0)の値に置き換えられる。
トップ・レベル関数用のコード・オブジェクトは、内部関数「foo」の関数記述を指す。内部関数「foo」がこの時点で既にコンパイルされていた場合、その関数記述は、シリアライジング・モジュール309がトップ・レベル機能から内部関数「foo」にトラバースできるようになり、トップ・レベルと内部関数との両方のコード・オブジェクトをシリアライズできるようになるように、コンパイル・コードを指す。さらに、コード・スタブはコード・スタブ・キーによって表現され、ビルトインはビルトインIDによって表現される。文字列コンテンツは文字通りにシリアライズされ(文字列マップは除く)、外部参照は外部参照IDにマッピングされる。
デシリアライジング・モジュール319によるデシリアライズのプロセスは、オブジェクト・グラフを訪れることによってシリアライズが行われた順番をリトレースすることを含み得る。このトレーシングは、シリアライズ・コード表現を、デシリアライズ・コードが実行された実行環境333内のコード表現に逆変換するために用いられる。たとえば、シリアライズ中に不定値がルート・リスト・インデックスとして符号化された場合、デシリアライジング・モジュール319は、実行環境333内の不定値を発見するために、ルート・リスト・インデックスを用いることができる。さらに、逆参照は、既にデシリアライズされたオブジェクトへの参照に逆変換される。デシリアライズの結果は、トップ・レベル機能用の機能記述であり得る。
図4Aおよび図4Bは、スクリプトのキャッシュ・コードへのシリアライズが提供され得るプロセスの例を示す。図4Aおよび図4Bは図1、図2および図3を参照して説明されるが、主題の技術はそれらに限られず、他のクライアント・デバイスとシステムとにも適用されてもよい。図4Aは、コードをキャッシュ・コードへとシリアライズするためのプロセスの例である。ブロック401において、フロント・エンド303は、実行を待機する一次ソース・コードの表示(たとえば、リンク、アドレス、URLなど)を受信する。たとえば、一次ソース・コードは、現在のブラウザ・セッション内における実行用のウェブ・ページ内のスクリプトであり得る。図1のコード・キャッシング・プラットフォーム103aまたは103n(または図2のコード・キャッシング・プラットフォーム209)をホストするクライアント・デバイス101aまたは101nのユーザは、現在のブラウザ・セッション内にURLアドレスを入力することによって、一次ソース・コードの実行を要求し得る。URLアドレスは、埋め込まれた一次ソース・コードを含むウェブ・ページをロードするためのリンクを提供し得る。
ウェブ・ページをロードすると、ブラウザは一次ソース・コードの表示をフロント・エンド303に送り得る。第1表示を受信することに応じて、ブロック403において、確認モジュール305は、一次ソース・コードに対応するキャッシュ・データがあるかデータ・ストア313におけるリソース・キャッシュを確認する。たとえば、ウェブ・ページは現在のブラウザ・セッションの前の他のブラウザ・セッションにおいてロードされていた可能性があり、コード・キャッシング・プラットフォーム209は一次ソース・コードに対応する実行可能コードをデータ・ストア313内に記憶した可能性がある。データ・ストア313が一次ソース・コードに対応する実行可能コードを含む場合、ブロック403における確認はキャッシュ・ヒットに戻り得る。しかしながら、ブロック403における確認がヒットを発見しない場合、戻られた結果はキャッシュ・ミスになり得る(ブロック405に図示)。
ブロック407において、リソース・キャッシュ内のキャッシュ・ミスに際し、フロント・エンド303は一次ソース・コードからコンパイルされた実行可能コードを取得し得る。たとえば、フロント・エンド303は、コンパイル用に一次ソース・コードをコンパイラ327に送ることが可能である。
ブロック409において、フロント・エンド303は、一次ソース・コード内で参照されたソース・コードまたは二次ソース・コードの部分を選択することが可能である。たとえば、二次ソース・コードは、一次ソース・コード内で参照される機能であり得る。ソース・コードの部分の選択は、図2および図3に関して説明された様々な要因と基準(ヒューリスティクス)とに基づき得る。ブロック411において、フロント・エンド303は、二次ソース・コードからコンパイルされた実行可能コードを取得し得る。たとえば、コンパイル用に二次ソース・コードをコンパイラ327に送ることが可能である。いくつかの例において、フロント・エンド303は、一次ソース・コード内で参照される一次ソース・コードと1組の二次ソース・コードとを含むソース・コード全体を、その一部を選択せずに、コンパイラに送り得る。たとえば、キャッシュ・ミスを受信に際し、フロント・エンド303は、ソース・コードおよび/または該ソース・コード内で参照される選択された二次ソース・コードをコンパイラ327に送り得る。
コンパイラ327は、受信された一次ソース・コードまたは二次ソース・コードをコンパイルし、実行可能コードをシリアライジング・モジュール309に送る。コンパイラ327は、クライアント・デバイス101aまたは101nのメモリ内に実行可能コードを記憶し得る。実行可能コードは、1組の参照(たとえば、ソース・コードまたは選択された一部内のオブジェクトに対応するアドレスおよび識別子)を含む。実行可能コードに対応する1組の参照は、実行環境331に対応する実行可能コード内に埋め込まれたメモリ・アドレスを含み得る。実行環境331(または333)は、ソース・コードが実行されるウェブ・ブラウザ・セッション内のVMであり得る。参照は、実行環境331(たとえば、実行可能コード用の実行エンジン(図示せず)によって生成されるVM環境)内の実行可能コードを実行するとき、実行可能コード329用の実行データをプロセッサ201に提供する。
コンパイラ327によって実行可能コードを受信すると、ブロック413において、シリアライジング・モジュール309は実行可能コードをシリアライズする。シリアライズすることは、図2および図3に関して上述されたように、実行環境331から実行可能コード内の1組の参照を抽象化することと、抽象化を反映するようにシリアライズ・コードに関連付けられているリロケーション・データを規定することと、を含む。シリアライジング・モジュール309によって実行環境331から1組の参照を抽象化することは、埋め込まれたメモリ・アドレスを抽象アドレスに置き換えることを含み得る。たとえば、埋込アドレスは、VMの機能に対し、所定リストの機能内における特定のインデックスに変換される。いくつかの例において、実行可能コードが同一コードを指すアドレスを含む場合、メモリ・アドレスを実行可能コードに割り当てられたメモリのブロックの開始アドレスからのオフセット・アドレスに置き換えることによって、抽象アドレスが生成される。そして、埋込アドレスは、コードの開始からの関連オフセットに変換され得る。
ブロック415において、フロント・エンド303は、シリアライズ・コードを、実行環境331内の実行用に提供されるキャッシュ・データとしてデータ・ストア313内におけるリソース・キャッシュ内に記憶する。いくつかの例において、シリアライジング・モジュール309によって実行可能コードをシリアライズすることの前に、フロント・エンド303はシリアライズ実行に関するプロセッサ201の利用可能性を判定し得る。そのような例において、プロセッサが利用可能でない場合、フロント・エンド303は、プロセッサが利用可能になるまでシリアライズすることを遅延させ得る。
ソース・コードは、複数の二次ソース・コード(たとえば、機能)への参照を含み得る。そのような場合、実行可能コードは各実行可能二次ソース・コードがソース・コード内で参照される二次ソース・コードに対応するように、複数の二次ソース・コードを含み得る。フロント・エンド303は、シリアライズ用の実行可能二次ソース・コードを選択することができる。さらにフロント・エンド303は、シリアライズ・コード内でシリアライズされないままである実行可能二次ソース・コードを判定し得る。フロント・エンド303は、実行可能コードに関連付けられている参照、リロケーション・データ、二次ソース・コードのタイプ、二次ソース・コードのセキュリティ識別子などに基づいて、二次ソース・コードのデシリアライズを判定し得る。ソース・コードは、アプリケーション207のトップ・レベル・スクリプトであり得る。フロント・エンド303は、たとえば、所定の条件に基づいて、アプリケーション207のトップ・レベル・スクリプトをシリアライズ用にソース・コードとして選択し得る。
いくつかの例において、フロント・エンド303は、実行を待機する一次ソース・コードの表示(たとえば、リンク、アドレス、URLなど)を受信し得る。たとえば、一次ソース・コードは、ウェブ・ページ内のスクリプトであり得る。表示を受信することに応じて、図4Aのブロック403に関して説明されたように、確認モジュール305は、図4Aのブロック409において選択された一次ソース・コードおよび二次ソース・コードに対応するキャッシュ・データがあるかリソース・キャッシュを確認する。データ・ストア313内におけるリソース・キャッシュ内のキャッシュ・ミスに際し、フロント・エンド303は、データ・ストア313内におけるリソース・キャッシュからシリアライズ・コードを含むキャッシュ・データを取り出すことが可能である。
デシリアライジング・モジュール319は、取り出されたキャッシュされたシリアライズ・コードを実行可能コードにデシリアライズすることができる。デシリアライジング・モジュール319によってデシリアライズすることは、取り出されたキャッシュされたシリアライズ・コードを用いて、実行環境333に基づいて実行可能コード内の1組の参照を再記憶することを含み得る。フロント・エンド303は、実行環境333内における実行用の実行可能コードおよび参照を提供することができる。
なお、いくつかの例において、デシリアライジング・モジュール319によってデシリアライズすることは、たとえばデータ破損によって失敗する場合もある。そのような例において、フロント・エンド303は、キャッシュされたシリアライズ・コードをデータ・ストア313から削除することができる。したがって、実行を待機するソース・コードの表示が次に受信される際、確認モジュール305による確認は、図4Aのブロック403に示されるキャッシュ・ミスに戻る可能性があり、図4に従ったシリアライズ・プロセスが行われる。
いくつかの例において、ブロック409の二次ソース・コードの選択は、ブロック407において取得された実行可能コードの実行から取得された実行結果に基づき得る。たとえば、ブロック407において取得された第1実行可能コードは、1回または複数回、二次コードの選択の前に、実行され得る。そのような例において、コード・キャッシング・プラットフォーム209は、第1実行コンテキスト内の第1実行可能コードの実行から実行結果を取得してもよく、実行結果に基づいて二次ソース・コードを選択してもよい。第1実行可能コードの実行の際、コード・キャッシング・プラットフォーム209は、参照および実行される二次ソース・コード(たとえば、機能)を決定するために、実行に関連するデータを収集し得る。
コード・キャッシング・プラットフォーム209は、ソース・コード全体をキャッシュする代わりに、キャッシング用の実行された二次ソース・コードを選択し得る。なぜならば、一次ソース・コードにおける様々な条件、クライアント・デバイス200やユーザ入力等上の実行環境に関連する条件によると、実行され得る二次ソース・コード(たとえば、機能)もあれば、実行され得ないものもあるためである。コード・キャッシング・プラットフォーム209は、クライアント・デバイス200上の一次ソース・コードの複数の実行に関連するデータを収集することによって、実行される二次ソース・コードを判定することができ、他の二次ソース・コードよりも頻繁に実行される二次ソース・コードを判定することができる。コード・キャッシング・プラットフォーム209は、判定に応じて、キャッシング用の二次ソース・コードを選択することができる。さらにコード・キャッシング・プラットフォーム209は、各機能呼出が機能の実行を含む一次ソース・コード内の機能呼出を判定し得る。コード・キャッシング・プラットフォーム209は、機能呼出の実行に関する情報を収集してもよいし、キャッシング用の実行時において実行されている機能を選択してもよい。
コード・キャッシング・プラットフォーム209は、様々な他の要因(たとえば、二次ソース・コードのサイズ、二次実行可能コードのサイズ、一次ソース・コード内で二次ソース・コードが参照される回数、二次ソース・コードのコンパイル時間など)に基づいて二次ソース・コードを選択し得る。
図4Bは、1組の条件に基づいてコードをキャッシュ・コードにシリアライズするためのプロセスの例を示す。ブロック421において、フロント・エンド303は、実行を待機する一次ソース・コードの表示(たとえば、リンク、アドレス、URLなど)を受信する。表示を受信することに応じて、ブロック423において、図4Aに関して上述されたように、確認モジュール305は、一次ソース・コードに対応するキャッシュ・データがあるかデータ・ストア313内におけるリソース・キャッシュを確認する。ブロック423において確認がヒットを発見しない場合、戻された結果はキャッシュ・ミスであり得る(ブロック425に図示)。
ブロック427において、データ・ストア313内のキャッシュ・ミスの際、フロント・エンド303は、一次ソース・コードからコンパイルされた実行可能コードを取得することができる。たとえば、フロント・エンド303は、一次ソース・コードをコンパイル用にコンパイラ327に送ることができる。
ブロック429において、シリアライジング・モジュール309は、一次ソース・コードのサイズ、所定期間内に一次ソース・コードが実行される回数または頻度、一次ソース・コードのコンパイル時間、もしくは、これらの組み合わせに基づいて、実行可能コードをシリアライズ・コードにシリアライズする。たとえば、一次ソース・コードが週に一度、10回未満実行される場合、シリアライジング・モジュール309は一次ソース・コードのシリアライズを行わない可能性がある。しかしながら、それ以上に(たとえば、週に一度、10回以上)実行される一次ソース・コードはシリアライズされ得る。ブロック431において、フロント・エンド303は、シリアライズ・コードを、データ・ストア313内におけるリソース・キャッシュ内に、実行環境331または333内の実行用に提供されるキャッシュ・データとして記憶する。
上述の通り、主題の技術の態様は、異なる実行環境(たとえば、データが1つのウェブ・ブラウザ・セッションにおいてシリアライズされ、別のウェブ・ブラウザ・セッションにおいてデシリアライズされる、ウェブ・ブラウザ)内での実行用の実行可能コードをキャッシュすることの観点で説明されている。しかしながら、本願の技術は、ウェブ・ブラウザ環境に限定されない。主題の技術は、任意の実行環境内で実行可能コードをキャッシュすることに適用されてもよい。さらに、主題の技術は、図1の第1クライアント・デバイス101a〜101n(または図1のサーバ109a〜109m)中のデータをシリアライズおよびキャッシュすることと、図1の第2クライアント・デバイス101a〜101n(または図1のサーバ109a〜109m)中のキャッシュ・データを、第2クライアント・デバイス101a〜101n(またはサーバ109a〜109m)中においてキャッシュ・データがデシリアライズおよび実行されるように、転送することとに適用されてもよい。
上述のフィーチャおよびアプリケーションは、コンピュータ可読記憶媒体(コンピュータ可読媒体とも称される)上に記録される一組の命令として記述されるソフトウェアプロセスとして実装される。これらの命令が1以上の処理ユニット(たとえば、1以上のプロセッサ、プロセッサ・コア、他の処理ユニットを含み得る)によって実行されるとき、これらの命令によって、処理ユニットは当該命令に示されるアクションを行う。コンピュータ可読媒体の例として、CD−ROM、フラッシュ・ドライブ、RAMチップ、ハード・ドライブ、EPROMが含まれるが、コンピュータ可読媒体の例はこれらに限定されない。コンピュータ可読媒体は、無線または有線接続で送出される搬送波および電子信号を含まない。
本明細書においては、用語「ソフトウェア」は、読出専用メモリ内のファームウェア、または、プロセッサによって処理を行うためのメモリに読み込まれる磁気ストレージを含むことが意図されている。また、いくつかの実施形態では、本願の技術の複数のソフトウェア技術は、区別がなされる本願の技術のソフトウェア態様でありつつ、より大きなプログラムの下位区分として実装される。いくつかの実施形態では、複数のソフトウェア技術は別個のプログラムとして実装される。そして、本明細書に記載されるソフトウェア態様を同時に実装する別個のプログラムは、いずれも本願の技術の範囲内にある。いくつかの実施形態では、ソフトウェア・プログラムは、インストールされて電子システムを操作する際、該ソフトウェア・プログラムの操作を実行する特定の機械の実装を規定する。
コンピュータ・プログラム(プログラム、ソフトウェア、ソフトウェア・アプリケーション、スクリプト、またはコードとも称される)は、任意の形式のプログラミング言語(たとえば、コンパイル済みまたはインタプリット済み言語、宣言型言語または手続型言語)で書かれてもよく、どのような形式で配置されてもよい(たとえば、スタンドアロン・プログラム、モジュール、コンポーネント、サブルーチン、オブジェクト、コンピューティング環境においての使用が相応しい他のユニットを含む)。コンピュータ・プログラムは、ファイルシステム内のファイルに対応してもよいが、これに限定されない。プログラムは、他のプログラムやデータを保持するファイルの一部分(マークアップ言語ドキュメントに記憶されるスクリプト)、対象プログラム専用の1つのファイル、または複数の調整ファイル(たとえば、モジュール、サブプログラム、コードを部分的に記憶するファイル)に記憶される。コンピュータ・プログラムは、1つのサイトに位置するか、もしくは複数のサイトに広がり、通信ネットワークによって相互接続される1つのコンピュータまたは複数のコンピュータ上で実行されるように配置される。
図5は、本願の技術のいくつかの実施形態が実装される一例の電子システム500を概念的に示す。電子システム500は、コンピュータ(たとえば、電話機、PDA)であってもよいし、他の任意の電子デバイスであってもよい。このような電子システムは、様々な種類のコンピュータ可読媒体と、他の様々な種類のコンピュータ可読媒体に関するインターフェースとを含む。電子システム500は、バス508、1または複数の処理ユニット512、システム・メモリ504、読出専用メモリ(ROM)510、パーマネント・ストレージ・デバイス502、入力デバイス・インターフェース514、出力デバイス・インターフェース506、およびネットワーク・インターフェース516を含む。
バス508は、電子システム500の多数の内部デバイスを通信可能に接続する全てのシステムと、周辺機器と、チップセットバスとを集合的に表す。たとえば、バス500は、1または複数の処理ユニット512を、ROM510と、システム・メモリ504と、パーマネント・ストレージ・デバイス502とに通信可能に接続する。
1または複数の処理ユニット512は、本開示のプロセスを実行するために、これらの様々なメモリユニットから実行対象の命令と処理対象のデータとを取り出す。1または複数の処理ユニットは、異なる実施形態において、単一のプロセッサであってもよいし、マルチコアプロセッサであってもよい。
ROM510は、1または複数の処理ユニット512と電子システムの他のモジュールとによって必要とされる静的データと命令とを記憶する。一方、パーマネント・ストレージ・デバイス502は、読出/書込メモリデバイスである。このデバイスは、電子システム500がオフであるときでも命令とデータとを記憶する不揮発性メモリユニットである。本開示のいくつかの実施形態では、パーマネント・ストレージ・デバイス502としてマスストレージデバイス(たとえば、磁気または光ディスク、および、対応するディスクドライブ)が用いられる。
他の実施形態では、パーマネント・ストレージ・デバイス502としてリムーバブルストレージデバイス(たとえば、フロッピー(登録商標)・ディスク、フラッシュ・ドライブ、対応するディスクドライブ)が用いられる。システム・メモリ504は、パーマネント・ストレージ・デバイス502と同様に、読出/書込メモリデバイスである。しかしながら、システム・メモリ504は、ストレージ・デバイス502とは異なり、揮発性読出/書込メモリ(たとえば、ランダムアクセスメモリ)である。システム・メモリ504は、ランタイムにおいてプロセッサが必要とする命令とデータとのいくつかを記憶する。いくつかの実施形態においては、本開示のプロセスは、システム・メモリ504、パーマネント・ストレージ・デバイス502、またはROM510に記憶される。たとえば、様々なメモリユニットは、いくつかの実施形態に従ってウェブエレメントを提示するための命令を含む。1または複数の処理ユニット512は、いくつかの実施形態のプロセスを実行するために、これらの様々なメモリユニットから実行予定の命令と処理予定のデータとを取り出す。
さらにバス508は、入力デバイス・インターフェース514と出力デバイス・インターフェース506とに接続する。入力デバイス・インターフェース514によって、ユーザが情報を通信し、電子システムに対するコマンドを選択することが可能になる。入力デバイス・インターフェース514とともに用いられる入力デバイスは、たとえば、英数字キーボード、ポインティングデバイス(「カーソルコントロールデバイス」とも称される)を含む。出力デバイス・インターフェース506によって、たとえば、電子システム500によって生成された画像の表示が可能になる。出力デバイス・インターフェース506とともに用いられる出力デバイスは、たとえば、プリンタ、ディスプレイデバイス(ブラウン管(CRT)または液晶ディスプレイ(LCD)など)を含む。いくつかの実施形態は、入力および出力デバイスの両方として機能するタッチスクリーンなどのデバイスを含む。
最後に、図5に示すように、バス508はさらに電子システム500を、ネットワーク・インターフェース516を介して図示しないネットワークに接続する。このように、コンピュータは、コンピュータのネットワーク(たとえば、ローカル・エリア・ネットワーク(「LAN」)、ワイド・エリア・ネットワーク(「WAN」)、イントラネット)の一部、または、複数のネットワークのうちの1つのネットワーク(たとえば、インターネット)であってもよい。任意の、または、すべての電子システム500の要素が、本開示とともに用いられる。
これら上述の機能は、デジタル電子回路、コンピュータソフトウェア、ファームウェア、またはハードウェアにより実装されることができる。上述の技術は、コンピュータ・プログラム製品を用いて実装される。プログラマブル・プロセッサおよびコンピュータは、モバイルデバイスに含まれてもよいし、モバイルデバイスとしてパッケージされてもよい。プロセスおよびロジック・フローは、プログラマブル・プロセッサとプログラマブル論理回路とによって行われる。汎用および専用のデバイスと、クライアント・デバイスとは、通信ネットワークを通じて相互接続される。
いくつかの実施形態は電子部品(たとえば、機械可読またはコンピュータ可読媒体(あるいは、コンピュータ可読記憶媒体、機械可読媒体、機械可読記憶媒体とも称される)におけるコンピュータ・プログラムの命令を記憶するマイクロプロセッサ、ストレージ、メモリ)を含む。このようなコンピュータ可読媒体のいくつかの例には、RAM、ROM、読出専用コンパクトディスク(CD−ROM)、記録可能コンパクトディスク(CD−R)、書換可能コンパクトディスク(CD−RW)、読出専用デジタル多用途ディスク(たとえば、DVD−ROM、2層DVD−ROM)、種々の記録可能/書換可能DVD(たとえば、DVD−RAM、DVD−RW、DVD+RW)、フラッシュメモリ(たとえば、SDカード、ミニSDカード、マイクロSDカード)、磁気またはソリッド・ステート・ハード・ドライブ、読出専用および記録可能Blu−ray(登録商標)ディスク、超高密度光ディスク、他の任意の光または磁気メディア、フロッピー・ディスクが含まれる。コンピュータ可読媒体は、少なくとも1つの処理ユニットにより実行可能であって、様々な操作を行うための複数組の命令を含むコンピュータ・プログラムを記憶できる。コンピュータ・プログラムまたはコンピュータコードの例には、たとえばコンパイラによって生成される機械コードと、インタプリタを用いてコンピュータ、電子部品、またはマイクロプロセッサによって実行される、より高レベルのコードを含むファイルと、が含まれる。
上記議論はソフトウェアを実行するマイクロプロセッサまたはマルチコアプロセッサを指しているが、いくつかの実施形態は集積回路(たとえば、特定用途向け集積回路(ASIC)またはフィールド・プログラマブル・ゲート・アレイ(FPGA))によって実行される。いくつかの実施形態では、このような集積回路は回路上自体に記憶される命令を実行する。
本明細書および本願の任意の請求項で用いられる通り、用語「コンピュータ」、「サーバ」、「プロセッサ」および「メモリ」はすべて、電子または他の技術分野のデバイスのことを指す。これらの用語から、人または人の集団は除外される。本明細書上では、用語「表示」または「表示する」は、電子デバイス上での表示を意味する。本明細書および本願の任意の請求項で用いられる通り、用語「コンピュータ可読媒体」「複数のコンピュータ可読媒体」は全体として、コンピュータによって読み込まれる形式の情報を記憶する有形の物理的な物体に限定される。これらの用語から、無線信号、有線ダウンロード信号、および他の任意の一時的な信号は除外される。
ユーザとの対話を提供するため、本明細書に記載される主題の実施形態は、ユーザに対して情報を表示するためのディスプレイデバイス(たとえば、CRT(ブラウン管)またはLCD(液晶ディスプレイ)モニタ)と、キーボードと、ユーザがコンピュータに対して入力を提供できるポインティングデバイス(たとえば、マウスまたはトラックボール)と、を有するコンピュータ上で実施可能である。他の種類のデバイスも同様に、ユーザとの対話を提供するために用いられる。たとえば、ユーザに対して提供されるフィードバックは、任意の形式の感覚フィードバック(たとえば、視覚フィードバック、聴覚フィードバック、触覚フィードバックなど)であってよいし、ユーザからの入力は任意の形式(音響、音声または触覚入力を含む)で受信されてよい。さらに、ユーザによって用いられるデバイスに対してドキュメントを送信し、該デバイスからドキュメントを受信することによって(たとえば、ユーザのクライアント・デバイス上でウェブ・ブラウザに対して、該ウェブ・ブラウザから受信したリクエストに応じてウェブ・ページを送信することによって)、コンピュータはユーザとの対話が可能になる。
本明細書に記載される実施形態の主題は、バックエンド・コンポーネント(たとえば、データサーバ)、ミドルウェア・コンポーネント(たとえば、アプリケーション・サーバ)、フロントエンド・コンポーネント(たとえば、ユーザの本明細書に記載される主題の実施形態との対話を可能にするグラフィカル・ユーザ・インターフェースまたはウェブ・ブラウザを有するクライアントコンピュータ)、または、このようなバックエンド、ミドルウェア、およびフロントエンド・コンポーネントのうち任意の組み合わせを含むコンピューティング・システムにおいて実施可能である。該システムのコンポーネントは、デジタルデータ通信の任意の形式または媒体(たとえば、通信ネットワーク)によって相互接続される。通信ネットワークの例には、ローカル・エリア・ネットワーク(「LAN」)、ワイド・エリア・ネットワーク(「WAN」)、インターネットワーク(たとえば、インターネット)、および、ピアツーピアネットワーク(たとえば、アドホック・ピアツーピア・ネットワーク)が含まれる。
コンピューティング・システムには、クライアントおよびサーバが含まれる。クライアントおよびサーバは一般的には互いにリモートであり、通信ネットワークを介して対話し得る。クライアントおよびサーバの関係が生じるのは、各コンピュータ上で起動しており、互いにクライアント/サーバ関係を有するコンピュータ・プログラムを介してである。いくつかの実施形態においては、サーバがデータ(たとえば、HTMLページ)をクライアント・デバイスに対して(たとえば、該クライアント・デバイスとの対話を行うユーザに対してデータを表示する目的、および、該ユーザからユーザ入力を受信する目的で)送信する。クライアント・デバイスにおいて生成されたデータ(たとえば、ユーザ対話の結果)は、サーバにおいてクライアント・デバイスから受信される。
開示されるプロセスにおける工程の任意の特定の順番または階層は例示的アプローチの実例である、と理解される。デザインの嗜好に基づいて、プロセスにおける工程の特定の順番または階層は再配置されてもよい、図示される全ての工程が実行されてもよい、と理解される。いくつかの工程は同時に実行されてもよい。たとえば、ある状況においては、マルチタスキングおよびパラレル・プロセッシングは効果的である。さらに、上述の実施形態における様々なシステム・コンポーネントの分離については、全ての実施形態内においてそのような分離が必須であるとして理解されるべきではない。上述のプログラムコンポーネントおよびシステムは一般的に1つのソフトウェア製品に統合される、または、複数のソフトウェア製品にパッケージされる、と理解されるべきである。
上記記載は、どの当業者でも本明細書に記載されている様々な態様を実施できるようにするために提供される。これらの態様に対する様々な修正形態は当業者によって容易に識別され、本明細書に規定される包括的な原則は他の態様にも適用される。従って、本請求項は、本明細書に示される態様に限定される意図はなく、請求項の文言と一致する全ての範囲が付与され、単数である要素への参照は「1および1のみ」であることを(そのように特定的に記述されている場合を除いて)意味するのではなく、「1以上」を意味する。用語「いくつか」は、(特定的に記述する場合を除いて)1以上を指す。男性の指示代名詞(たとえば、「彼の」)は、女性および中性(たとえば、「彼女の」「その」)を含み、その逆も同様である。見出しおよび小見出しは、それらがある場合にしても、便宜上用いられているだけであって、本開示を限定するものではない。
たとえば「態様」という語句は、その態様が本願の技術に必要不可欠であること、その態様が本願の技術の全ての構成に適用されること、を暗示しない。態様に関する開示は、全ての構成または1以上の構成に適用される。たとえば態様という語句は、1以上の態様を指してもよいし、その逆も同様である。たとえば「構成」という語句は、そのような構成が本願の技術に必要不可欠であること、その態様が本願の技術の全ての構成に適用されること、を暗示しない。態様に関する開示は、全ての構成または1以上の構成に適用される。たとえば構成という語句は、1以上の構成を指してもよいし、その逆も同様である。

Claims (21)

  1. 1以上のプロセッサと、
    命令が記憶されている機械可読媒体と、を備え、前記命令は前記1以上のプロセッサによって実行されるときに前記1以上のプロセッサに、
    実行を待機している一次ソース・コードの第1表示を受信する工程と、
    前記第1表示を受信することに応じて前記一次ソース・コードに対応するキャッシュ・データがあるかリソース・キャッシュを確認する工程と、
    前記リソース・キャッシュ内のキャッシュ・ミスに際し、
    前記一次ソース・コードからコンパイルされた第1実行可能コードを取得する工程と、
    前記一次ソース・コード内で参照された二次ソース・コードを、前記二次ソース・コードのサイズ及び前記二次ソース・コードのコンパイル時間のうちの1以上に基づいて選択する工程と、
    選択された前記二次ソース・コードからコンパイルされた第2実行可能コードを取得する工程と、
    前記第1実行可能コードと前記第2実行可能コードとを、複数の実行コンテキスト内で再構築されるように構成されるシリアライズ・コードにシリアライズする工程と、
    前記シリアライズ・コードと、選択された前記二次ソース・コード内で参照されたオブジェクトと、選択された前記二次ソース・コード内で参照された前記オブジェクトにアクセスするためのアクセス方法と、前記オブジェクトのタイプとをキャッシュ・データとして前記リソース・キャッシュ内に記憶し、前記命令は、キャッシュされた前記オブジェクトについてキャッシュ・ヒットが生じたときであって、前記オブジェクトの前記タイプが、前記キャッシュ・ヒットに関するデータアクセスのオブジェクトのタイプに合致したとき、キャッシュされた前記オブジェクトにアクセスするために前記アクセス方法を前記1以上のプロセッサに用いさせる工程と、
    選択された前記二次ソース・コードの実行履歴を取得する工程と、
    選択された前記二次ソース・コードの前記実行履歴に基づいて、選択された前記二次ソース・コードを、選択された前記二次ソース・コードよりも頻繁に実行されている他の二次ソース・コードに置き換える工程と、
    を含む動作を実行させる、コード・キャッシング・システム。
  2. 前記命令はさらに、前記1以上のプロセッサに、
    第1実行コンテキスト内の前記第1実行可能コードの実行から実行結果を取得する工程であって、選択された前記二次ソース・コードは前記実行結果に基づいて選択される工程を含む動作を実行させる、
    請求項1に記載のシステム。
  3. 選択された前記二次ソース・コードは、さらに、前記第2実行可能コードのサイズ、選択された前記二次ソース・コードが前記一次ソース・コード内で参照される予測、選択された前記二次ソース・コードが前記一次ソース・コード内で参照される回数、または選択された前記二次ソース・コードが前記一次ソース・コード内で参照される頻度のうち1以上に基づいて選択される、
    請求項1に記載のシステム。
  4. 前記命令はさらに、前記1以上のプロセッサに、
    第2実行コンテキスト内で実行を待機している前記一次ソース・コードの第2表示を受信する工程であって、前記第2表示は前記第1表示に続いて受信される工程と、
    前記第2表示を受信することに応じて前記一次ソース・コードと選択された前記二次ソース・コードとに対応するキャッシュ・データがあるかリソース・キャッシュを確認する工程と、
    前記リソース・キャッシュ内のキャッシュ・ヒットに際し、
    前記シリアライズ・コードを含む前記キャッシュ・データを前記リソース・キャッシュから取り出す工程と、
    取り出された前記シリアライズ・コードを第3実行可能コードにデシリアライズする工程と、
    前記第2実行コンテキスト内における実行用の前記第3実行可能コードを提供する工程と、
    を含む動作を実行させる、
    請求項に記載のシステム。
  5. 前記第1実行コンテキストと前記第2実行コンテキストとはコード実行用の2つの異なる仮想マシン環境である、
    請求項4に記載のシステム。
  6. 前記一次ソース・コードはウェブ・ページ内のスクリプトであり、前記第1実行コンテキストと前記第2実行コンテキストとは前記スクリプトが実行されるウェブ・ブラウザ・セッションである、
    請求項5に記載のシステム。
  7. 前記一次ソース・コードはウェブ・ページのトップ・レベル・スクリプトである、
    請求項1に記載のシステム。
  8. 前記第1実行可能コードは、前記第1実行可能コードに埋め込まれたメモリ・アドレスを含む1組の参照を含み、
    前記第1実行可能コードをシリアライズすることは、埋め込まれた前記メモリ・アドレスを抽象アドレスと置き換える工程を含む、
    請求項1に記載のシステム。
  9. 1以上のプロセッサと、
    命令が記憶されている機械可読媒体と、を備え、前記命令は前記1以上のプロセッサによって実行されるときに前記1以上のプロセッサに、
    実行を待機している一次ソース・コードの第1表示を受信する工程と、
    前記第1表示を受信することに応じて前記一次ソース・コードに対応するキャッシュ・データがあるかリソース・キャッシュを確認する工程と、
    前記リソース・キャッシュ内のキャッシュ・ミスに際し、
    前記一次ソース・コードからコンパイルされた第1実行可能コードを取得する工程と、
    前記一次ソース・コード内で参照された二次ソース・コードを、前記二次ソース・コードのサイズ及び前記二次ソース・コードのコンパイル時間のうちの1以上に基づいて選択する工程と、
    選択された前記二次ソース・コードからコンパイルされた第2実行可能コードを取得する工程と、
    前記一次ソース・コードのサイズ、所定期間内で前記一次ソース・コードが実行される回数もしくは頻度、または前記一次ソース・コードのコンパイル時間のうち1つ以上に基づいて、前記第1実行可能コードと前記第2実行可能コードとを、複数の実行コンテキスト内で再構築されるように構成されるシリアライズ・コードにシリアライズする工程と、
    前記シリアライズ・コードと、選択された前記二次ソース・コード内で参照されたオブジェクトと、選択された前記二次ソース・コード内で参照された前記オブジェクトにアクセスするためのアクセス方法と、前記オブジェクトのタイプとをキャッシュ・データとして前記リソース・キャッシュ内に記憶し、前記命令は、キャッシュされた前記オブジェクトについてキャッシュ・ヒットが生じたときであって、前記オブジェクトの前記タイプが、前記キャッシュ・ヒットに関するデータアクセスのオブジェクトのタイプに合致したとき、キャッシュされた前記オブジェクトにアクセスするために前記アクセス方法を前記1以上のプロセッサに用いさせる工程と、
    選択された前記二次ソース・コードの実行履歴を取得する工程と、
    選択された前記二次ソース・コードの前記実行履歴に基づいて、選択された前記二次ソース・コードを、選択された前記二次ソース・コードよりも頻繁に実行されている他の二次ソース・コードに置き換える工程と、
    を含む動作を実行させる、コード・キャッシング・システム。
  10. 選択された前記二次ソース・コードは、さらに、前記第2実行可能コードのサイズ、選択された前記二次ソース・コードが前記一次ソース・コード内で参照される予測、選択された前記二次ソース・コードが前記一次ソース・コード内で参照される回数、または選択された前記二次ソース・コードが前記一次ソース・コード内で参照される頻度のうち1以上に基づいて選される、
    請求項9に記載のシステム。
  11. 前記命令はさらに、前記1以上のプロセッサに、
    第1実行コンテキスト内の前記第1実行可能コードの実行から実行結果を取得する工程であって、選択された前記二次ソース・コードは前記実行結果に基づいて選択される工程を含む動作を実行させる、
    請求項9に記載のシステム。
  12. 前記命令はさらに、前記1以上のプロセッサに、
    第2実行コンテキスト内で実行を待機している前記一次ソース・コードの第2表示を受信する工程であって、前記第2表示は前記第1表示に続いて受信される工程と、
    前記第2表示を受信することに応じて前記一次ソース・コードと選択された前記二次ソース・コードとに対応するキャッシュ・データがあるかリソース・キャッシュを確認する工程と、
    前記リソース・キャッシュ内のキャッシュ・ヒットに際し、
    前記シリアライズ・コードを含む前記キャッシュ・データを前記リソース・キャッシュから取り出す工程と、
    取り出された前記シリアライズ・コードを第3実行可能コードにデシリアライズする工程と、
    前記第2実行コンテキスト内における実行用の前記第3実行可能コードを提供する工程と、
    を含む動作を実行させる、
    請求項11に記載のシステム。
  13. 前記第1実行コンテキストと前記第2実行コンテキストとはコード実行用の2つの異なる仮想マシン環境である、
    請求項12に記載のシステム。
  14. 前記第1実行可能コードは、前記第1実行可能コードに埋め込まれたメモリ・アドレスを含む1組の参照を含み、
    前記第1実行可能コードをシリアライズすることは、埋め込まれた前記メモリ・アドレスを抽象アドレスと置き換える工程を含む、
    請求項9に記載のシステム。
  15. 命令を含むコンピュータ可読媒体であって、前記命令はコンピュータによって実行されるときに前記コンピュータに、
    実行を待機している一次ソース・コードの第1表示を受信させ、
    前記第1表示を受信することに応じて前記一次ソース・コードに対応するキャッシュ・データがあるかリソース・キャッシュを確認させ、
    前記リソース・キャッシュ内のキャッシュ・ミスに際し、
    前記一次ソース・コードからコンパイルされた第1実行可能コードを取得させ、
    第1実行コンテキスト内の前記第1実行可能コードの実行から実行結果を取得させ、
    前記一次ソース・コード内で参照された二次ソース・コードを前記実行結果に基づいて、さらに、前記二次ソース・コードのサイズ及び前記二次ソース・コードのコンパイル時間のうちの1以上に基づいて選択させ、
    選択された前記二次ソース・コードからコンパイルされた第2実行可能コードを取得させ、
    前記第1実行可能コードと前記第2実行可能コードとを、複数の実行コンテキスト内で再構築されるように構成されるシリアライズ・コードにシリアライズさせ、
    前記シリアライズ・コードと、選択された前記二次ソース・コード内で参照されたオブジェクトと、選択された前記二次ソース・コード内で参照された前記オブジェクトにアクセスするためのアクセス方法と、前記オブジェクトのタイプとをキャッシュ・データとして前記リソース・キャッシュ内に記憶させ前記命令は、キャッシュされた前記オブジェクトについてキャッシュ・ヒットが生じたときであって、前記オブジェクトの前記タイプが、前記キャッシュ・ヒットに関するデータアクセスのオブジェクトのタイプに合致したとき、キャッシュされた前記オブジェクトにアクセスするために前記アクセス方法を前記コンピュータに用いさせ、
    選択された前記二次ソース・コードの実行履歴を取得させ、
    選択された前記二次ソース・コードの前記実行履歴に基づいて、選択された前記二次ソース・コードを、選択された前記二次ソース・コードよりも頻繁に実行されている他の二次ソース・コードに置き換えさせる
    コンピュータ可読媒体。
  16. 前記第1実行可能コードは、前記第1実行可能コードに埋め込まれたメモリ・アドレスを含む1組の参照を含み、
    前記第1実行可能コードをシリアライズすることは、埋め込まれた前記メモリ・アドレスを抽象アドレスと置き換えることを含む、
    請求項15に記載のコンピュータ可読媒体。
  17. 前記実行結果は、前記一次ソース・コード内で参照された選択された前記二次ソース・コードが前記一次ソース・コードの実行時に実行される回数を示す、
    請求項15に記載のコンピュータ可読媒体。
  18. 前記命令はさらに、前記コンピュータに、
    第2実行コンテキスト内で実行を待機している前記一次ソース・コードの第2表示を受信させ、前記第2表示は前記第1表示に続いて受信され、
    前記第2表示を受信することに応じて前記一次ソース・コードと選択された前記二次ソース・コードとに対応するキャッシュ・データがあるかリソース・キャッシュを確認させ、
    前記リソース・キャッシュ内のキャッシュ・ヒットに際し、
    前記シリアライズ・コードを含む前記キャッシュ・データを前記リソース・キャッシュから取り出させ、
    取り出された前記シリアライズ・コードを第3実行可能コードにデシリアライズさせ、
    前記第2実行コンテキスト内における実行用の前記第3実行可能コードを提供させる、
    請求項15に記載のコンピュータ可読媒体。
  19. 前記第1実行コンテキストと前記第2実行コンテキストとはコード実行用の2つの異なる仮想マシン環境である、
    請求項18に記載のコンピュータ可読媒体。
  20. 前記命令はさらに、前記コンピュータに、
    前記第1実行可能コードに関連付けられている第1実行プロファイルと前記第2実行可能コードに関連付けられている第2実行プロファイルとを取得させ、
    前記第1実行プロファイルと第2実行プロファイルとをシリアライズさせ、
    シリアライズされた前記第1実行プロファイルと前記第2実行プロファイルとを前記リソース・キャッシュ内に記憶させ、取り出された前記シリアライズ・コードをデシリアライズすることは前記第1実行プロファイルと前記第2実行プロファイルとをデシリアライズさせることを含む、
    請求項18に記載のコンピュータ可読媒体
  21. 命令を含むメモリと、
    1以上のプロセッサと、を備え、該1以上のプロセッサは、
    リソース・キャッシュ内のキャッシュ・ミスに際し、
    実行を待機している一次ソース・コードからコンパイルされた第1実行可能コードを取得することと、
    前記一次ソース・コード内で参照された二次ソース・コードからコンパイルされた第2実行可能コードを取得し、前記二次ソース・コードは、前記二次ソース・コードのサイズ及び前記二次ソース・コードのコンパイル時間のうちの1以上に基づいて選択されることと、
    前記第1実行可能コードと前記第2実行可能コードとを、複数の実行コンテキスト内で再構築されるように構成されるシリアライズ・コードにシリアライズすることと、
    前記シリアライズ・コードと、選択された前記二次ソース・コード内で参照されたオブジェクトと、選択された前記二次ソース・コード内で参照された前記オブジェクトにアクセスするためのアクセス方法と、前記オブジェクトのタイプとをキャッシュ・データとして前記リソース・キャッシュ内に記憶し、前記命令は、キャッシュされた前記オブジェクトについてキャッシュ・ヒットが生じたときであって、前記オブジェクトの前記タイプが、前記キャッシュ・ヒットに関するデータアクセスのオブジェクトのタイプに合致したとき、キャッシュされた前記オブジェクトにアクセスするために前記アクセス方法を前記1以上のプロセッサに用いさせることと、
    選択された前記二次ソース・コードの実行履歴を取得することと、
    選択された前記二次ソース・コードの前記実行履歴に基づいて、選択された前記二次ソース・コードを、選択された前記二次ソース・コードよりも頻繁に実行されている他の二次ソース・コードに置き換えることと、
    を行うように前記命令を実行するように構成されている、コード・キャッシング・システム。
JP2017551130A 2015-05-29 2016-03-29 コード・キャッシング・システム Active JP6329329B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/726,376 2015-05-29
US14/726,376 US9811324B2 (en) 2015-05-29 2015-05-29 Code caching system
PCT/US2016/024791 WO2016195790A1 (en) 2015-05-29 2016-03-29 Code caching system

Publications (2)

Publication Number Publication Date
JP2018510428A JP2018510428A (ja) 2018-04-12
JP6329329B2 true JP6329329B2 (ja) 2018-05-23

Family

ID=57398598

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017551130A Active JP6329329B2 (ja) 2015-05-29 2016-03-29 コード・キャッシング・システム

Country Status (8)

Country Link
US (1) US9811324B2 (ja)
EP (1) EP3304293B1 (ja)
JP (1) JP6329329B2 (ja)
KR (1) KR101851357B1 (ja)
CN (1) CN107408055B (ja)
DE (1) DE112016002416T5 (ja)
GB (1) GB2553444B (ja)
WO (1) WO2016195790A1 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170123760A1 (en) * 2015-10-30 2017-05-04 AppDynamics, Inc. Code Correction During a User Session in a Distributed Business Transaction
US11360750B1 (en) * 2020-12-23 2022-06-14 Sony Interactive Entertainment LLC Systems and methods for converting a legacy code into an updated code
US12017140B2 (en) * 2021-06-07 2024-06-25 Sony Interactive Entertainment LLC Systems and methods for emulation of graphical and audio parameters during a play of a legacy game
CN114328061B (zh) * 2021-12-30 2024-03-29 湖南泛联新安信息科技有限公司 一种用于逻辑仿真系统的高性能信号监视方法

Family Cites Families (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5452457A (en) 1993-01-29 1995-09-19 International Business Machines Corporation Program construct and methods/systems for optimizing assembled code for execution
US5509129A (en) 1993-11-30 1996-04-16 Guttag; Karl M. Long instruction word controlling plural independent processor operations
US6393415B1 (en) * 1999-03-31 2002-05-21 Verizon Laboratories Inc. Adaptive partitioning techniques in performing query requests and request routing
US7761857B1 (en) * 1999-10-13 2010-07-20 Robert Bedichek Method for switching between interpretation and dynamic translation in a processor system based upon code sequence execution counts
US20060206874A1 (en) 2000-08-30 2006-09-14 Klein Dean A System and method for determining the cacheability of code at the time of compiling
US7640153B2 (en) * 2001-06-04 2009-12-29 Hewlett-Packard Development Company, L.P. Networked client-server architecture for transparently transforming and executing applications
KR100503077B1 (ko) * 2002-12-02 2005-07-21 삼성전자주식회사 자바 실행 장치 및 자바 실행 방법
US7805710B2 (en) * 2003-07-15 2010-09-28 International Business Machines Corporation Shared code caching for program code conversion
US7890961B2 (en) * 2003-08-29 2011-02-15 Yahoo! Inc. Method and apparatus for providing desktop application functionality in a client/server architecture
US7818724B2 (en) * 2005-02-08 2010-10-19 Sony Computer Entertainment Inc. Methods and apparatus for instruction set emulation
US8402224B2 (en) 2005-09-20 2013-03-19 Vmware, Inc. Thread-shared software code caches
JP2007233472A (ja) * 2006-02-27 2007-09-13 Canon Inc 情報処理装置、情報処理装置の制御方法および制御プログラム
US8245202B2 (en) * 2007-04-18 2012-08-14 Sony Computer Entertainment Inc. Processor emulation using speculative forward translation
US8286152B2 (en) * 2007-08-22 2012-10-09 International Business Machines Corporation Systems, methods, and computer products for just-in-time compilation for virtual machine environments for fast application startup and maximal run-time performance
US8392881B1 (en) 2008-05-13 2013-03-05 Google Inc. Supporting efficient access to object properties in a dynamic object-oriented programming language
US8321850B2 (en) 2008-06-06 2012-11-27 Vmware, Inc. Sharing and persisting code caches
US8095507B2 (en) 2008-08-08 2012-01-10 Oracle International Corporation Automated topology-based statistics monitoring and performance analysis
US8707161B2 (en) 2009-09-30 2014-04-22 Facebook, Inc. Executing server side script code specified using PHP on a server to generate dynamic web pages
US9003380B2 (en) 2010-01-12 2015-04-07 Qualcomm Incorporated Execution of dynamic languages via metadata extraction
US8479176B2 (en) * 2010-06-14 2013-07-02 Intel Corporation Register mapping techniques for efficient dynamic binary translation
US20110321010A1 (en) 2010-06-24 2011-12-29 Yifei Wang Web application framework based on object oriented class mapping
KR101782995B1 (ko) 2011-01-13 2017-09-29 삼성전자주식회사 자바스크립트 코드 저장 및 최적화를 통한 웹 브라우징 방법 및 장치
US8867337B2 (en) * 2011-04-26 2014-10-21 International Business Machines Corporation Structure-aware caching
WO2012160241A1 (en) * 2011-05-25 2012-11-29 Nokia Corporation Memory caching for browser processes
US9047407B2 (en) 2011-12-16 2015-06-02 Microsoft Technology Licensing, Llc State capture after execution in dependent sequences
US9110751B2 (en) * 2012-02-13 2015-08-18 Microsoft Technology Licensing, Llc Generating and caching software code
US10339069B2 (en) * 2012-09-28 2019-07-02 Oracle International Corporation Caching large objects in a computer system with mixed data warehousing and online transaction processing workload
US20140095778A1 (en) * 2012-09-28 2014-04-03 Jaewoong Chung Methods, systems and apparatus to cache code in non-volatile memory

Also Published As

Publication number Publication date
CN107408055B (zh) 2019-08-16
GB201715440D0 (en) 2017-11-08
EP3304293B1 (en) 2021-09-15
WO2016195790A1 (en) 2016-12-08
US20160350089A1 (en) 2016-12-01
GB2553444A (en) 2018-03-07
CN107408055A (zh) 2017-11-28
DE112016002416T5 (de) 2018-03-08
EP3304293A1 (en) 2018-04-11
US9811324B2 (en) 2017-11-07
KR101851357B1 (ko) 2018-04-24
GB2553444B (en) 2018-09-05
KR20170125398A (ko) 2017-11-14
JP2018510428A (ja) 2018-04-12

Similar Documents

Publication Publication Date Title
EP3876116B1 (en) Method and apparatus for running mini program, electronic device, and storage medium
US8572033B2 (en) Computing environment configuration
US8453049B1 (en) Delayed code parsing for reduced startup latency
JP6329329B2 (ja) コード・キャッシング・システム
US20170323025A1 (en) Browser acceleration method and browser device having accelerator
US10574724B2 (en) Automatic discovery of management nodes and generation of CLI using HA module
CN103678506B (zh) 在浏览器中加载应用程序快捷方式的方法、装置和浏览器
US9781262B2 (en) Methods and apparatus for voice-enabling a web application
MX2014009761A (es) Generacion y guardado en memoria cache de codigo de software.
US20080282233A1 (en) Rapid application innovation utilizing an orthogonal programming component
US10157612B2 (en) Methods and apparatus for voice-enabling a web application
US9053107B1 (en) Determining updates for files based on an organization of the files on different blocks of a storage device
US20140040746A1 (en) Methods and apparatus for voiced-enabling a web application
CN110362968B (zh) 信息检测方法、装置及服务器
US7912924B1 (en) Adding functionality with respect to one or more web pages
US9038033B1 (en) Techniques and mechanisms for web application minification
US9208322B1 (en) Privacy leak detection in .NET framework
US20140040745A1 (en) Methods and apparatus for voiced-enabling a web application
US11689630B2 (en) Request processing method and apparatus, electronic device, and computer storage medium
CN112115056B (zh) 一种项目部署方法和装置、服务器、存储介质
US20160182605A1 (en) Dynamic Content Aggregation
CN114116096B (zh) 一种信息处理方法、装置、设备及存储介质
US20160085523A1 (en) Selectively loading precompiled header(s) and/or portion(s) thereof
US8793663B2 (en) Smart cache for a server test environment in an application development tool
CN110858238A (zh) 一种数据处理的方法和装置

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20171023

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170929

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20171023

A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20180130

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: 20180403

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180419

R150 Certificate of patent or registration of utility model

Ref document number: 6329329

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