(57)【要約】ウェブページを供給する方法は、元のウェブページをサーバ側の実行可能部分およびサーバ側の静的部分に分離するステップを含む。サーバ側の静的部分は、識別子で置換され、次いで、識別子をサーバ側の静的部分で置換する、クライアント側の実行可能プログラムが作成される。クライアント側の実行可能プログラムは、サーバ側の実行可能部分がその元の形式で記憶されるように圧縮され得る。クライアントの要求に応答して、ウェブサーバは、結果として生じるプログラムを実行し、出力を要求しているクライアントに伝送する。クライアントで、応答は必要な場合に解凍され、クライアント側の実行可能プログラムは、サーバ側の静的部分をサーバ側の実行結果に統合するように実行される。
2012529115.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータ可読記憶媒体と通信するコンピュータ上で実装される方法であって、
命令を含む元のソースコードを選択することであって、該命令は、１つ以上のコンピュータによって実行されると、視覚出力を生成する、ことと、
該元のソースコードのサーバ側の実行可能部分および該元のソースコードのサーバ側の静的部分を識別することと、
該元のソースコードのサーバ側の静的部分に識別子を割り当てることと、
該元のソースコードのサーバ側の静的部分から該元のソースコードのサーバ側の実行可能部分を分離することと、
該元のソースコードのサーバ側の実行可能部分を該識別子と組み合わせることにより、中間ソースコードを作成することであって、該識別子は、該元のソースコードのサーバ側の静的部分に置き換わる、ことと、
クライアント側の実行可能プログラムを含むサーバ側の実行可能プログラムを作成することであって、該クライアント側の実行可能プログラムは、該中間ソースコード内の該識別子を該元のソースコードのサーバ側の静的部分で置換するように動作可能であり、該サーバ側の実行可能プログラムは、該中間ソースコードと、該元のソースコードのサーバ側の静的部分とを備え、該サーバ側の実行可能プログラムは、１つ以上のコンピュータによって実行されると、該視覚出力を生成する、ことと、
該サーバ側の実行可能プログラムの表現を含むように、該コンピュータ可読媒体の少なくとも一部を更新することと
を含む、方法。
【請求項２】
前記サーバ側の実行可能プログラムを圧縮することにより、圧縮されたサーバ側の実行可能プログラムを作成することをさらに含み、該圧縮することは、前記中間プログラムを記憶する、請求項１に記載の方法。
【請求項３】
前記圧縮することは、前記中間ソースコードをその元の形式で記憶する、請求項２に記載の方法。
【請求項４】
前記圧縮することは、ｇｚｉｐ圧縮およびｚｌｉｂ圧縮から成る群より選択される１つを使用する、請求項２に記載の方法。
【請求項５】
前記圧縮することは、前記中間ソースコードを最初のデータブロックとして記憶する、請求項２に記載の方法。
【請求項６】
前記圧縮することは、前記中間ソースコードを最後のデータブロックとして記憶する、請求項２に記載の方法。
【請求項７】
前記圧縮することは、前記中間ソースコードを、前記最初のデータブロックでも前記最後のデータブロックでもないデータブロックとして記憶する、請求項２に記載の方法。
【請求項８】
前記圧縮されたサーバ側の実行可能プログラムの中で構文文字の位置を決定することと、
該構文文字を代替文字で置換することと、
置換された構文文字の位置を示すデータを記憶することと
をさらに含む、請求項２に記載の方法。
【請求項９】
前記データは、前記圧縮されたサーバ側の実行可能プログラムの終了に関する位置を符号化する、請求項８に記載の方法。
【請求項１０】
前記圧縮されたサーバ側の実行可能プログラムが実行された後に、前記代替文字を前記構文文字で置換することをさらに含む、請求項８に記載の方法。
【請求項１１】
前記圧縮されたサーバ側の実行可能プログラムの中で構文文字の位置を決定することと、
該構文文字を該構文文字の構文的に正しい表現で置換することと
をさらに含む、請求項２に記載の方法。
【請求項１２】
前記クライアント側の実行可能プログラムは、ＪａｖａＳｃｒｉｐｔプログラム、ＶＢＳｃｒｉｐｔプログラム、Ｆｌａｓｈプログラム、Ｊａｖａ（登録商標）プログラム、Ｊａｖａ（登録商標）アプレット、ＡＪＡＸコンポーネント、ＡＪＡＸプログラム、ＳｉｌｖｅｒＬｉｇｈｔプログラム、ＡｃｔｉｖｅＸプログラム、動的リンクライブラリ、およびキャビネットファイルから成る群より選択される１つである、請求項１に記載の方法。
【請求項１３】
前記作成することは、プログラムテンプレートを使用する、請求項１に記載の方法。
【請求項１４】
前記元のソースコードは、ウェブアプリケーションの一部のためのソースコードである、請求項１に記載の方法。
【請求項１５】
前記元のソースコードは、ウェブページのためのソースコードである、請求項１４に記載の方法。
【請求項１６】
前記識別子は、前記ウェブアプリケーション全体またはウェブサイト全体のいずれかで一意的である、請求項１４に記載の方法。
【請求項１７】
コンピュータ可読記憶媒体と通信するサーバコンピュータを制御する方法であって、
サーバコンピュータで要求を受信することと、
該要求に対応するソースコードを決定することと、
該コンピュータ可読記憶媒体から該ソースコードの最適化バージョンを回収することと、
該サーバコンピュータによって、該ソースコードの最適化バージョンのサーバ側の実行可能部分を実行することにより、サーバ側の実行結果を生成することと、
置換された文字の位置を回収することと、
該サーバ側の実行結果の中の該位置にある第１の文字を第２の文字で置換することと、
該要求に応答して、該位置にある該第２の文字とともに該サーバ側の実行結果を提供することと
を含む、方法。
【請求項１８】
前記応答の内容が圧縮されていることを示すために、応答ヘッダを修正することをさらに含む、請求項１７に記載の方法。
【請求項１９】
前記修正することは、前記内容が、ｇｚｉｐ符号化およびｚｌｉｂ符号化から成る群より選択される１つであることを示すことを含む、請求項１８に記載の方法。
【請求項２０】
前記修正することは、ブロックの長さを示すために、データの該ブロックに対するブロックヘッダを更新することを含む、請求項１８に記載の方法。
【請求項２１】
コンピュータ上で実行可能な命令を含むコンピュータ可読物理媒体を備える装置であって、該命令は、実行されると、
元のソースコードを選択することと、
該元のソースコードのサーバ側の実行可能部分および該元のソースコードのサーバ側の静的部分を識別することと、
該元のソースコードのサーバ側の静的部分に識別子を割り当てることと、
該元のソースコードのサーバ側の静的部分から該元のソースコードのサーバ側の実行可能部分を分離することと、
該元のソースコードのサーバ側の実行可能部分を該識別子と組み合わせることにより、中間ソースコードを作成することであって、該識別子は、該元のソースコードのサーバ側の静的部分に置き換わる、ことと、
クライアント側の実行可能プログラムを作成することであって、該クライアント側の実行可能プログラムは、該中間ソースコード内の該識別子を該元のソースコードのサーバ側の静的部分で置換するように動作可能であり、該クライアント側の実行可能プログラムは、該中間ソースコードと、該元のソースコードのサーバ側の静的部分とを備え、該クライアント側の実行可能プログラムは、１つ以上のコンピュータによって実行されると、該視覚出力を生成する、ことと
を該コンピュータに行わせる、
装置。
【請求項２２】
ネットワークに通信可能に結合されたウェブサーバコンピュータを備え、
該ウェブサーバコンピュータは、
リクエスタからウェブページの要求を受信することと、
該要求を受信することに応答して、
該要求されたウェブページの最適化バージョンを選択することと、
該最適化バージョンの中のサーバ側の実行可能コードを実行することと、
該実行結果が圧縮形式であることを示す応答ヘッダとともに該リクエスタに実行結果を提供することと
を行うように動作可能であり、
該ウェブサーバコンピュータは、該要求に応答することにおいて圧縮するステップを実施しない、
機械。
【請求項２３】
前記最適化バージョンは、ｇｚｉｐ圧縮形式およびｚｌｉｂ圧縮形式から成る群より選択される１つで符号化されたデータのブロックを含む、請求項２２に記載の機械。
【請求項２４】
前記ウェブサーバコンピュータは、カスタマイズされた応答においてどんなデータも圧縮することなく、圧縮形式で、前記リクエスタに該カスタマイズされた応答を提供する、請求項２２に記載の機械。
【請求項２５】
前記ウェブサーバコンピュータは、前記要求を受信した後にどんなデータも圧縮することなく、圧縮形式で、前記リクエスタにカスタマイズされた応答を提供する、請求項２２に記載の機械。
【請求項２６】
前記応答ヘッダは、ＨＴＴＰ応答ヘッダであり、前記ウェブサーバコンピュータは、該ＨＴＴＰ応答ヘッダが前記実行結果が圧縮形式であることを示すように、該ＨＴＴＰ応答ヘッダを修正する、請求項２２に記載の機械。
【請求項２７】
前記ウェブサーバコンピュータは、前記リクエスタに前記実行結果を提供する前に、該実行結果の中の文字をヌル文字で置換することによって、該実行結果を修正する、請求項２２に記載の機械。
【請求項２８】
コンピュータ可読記憶媒体と通信するコンピュータ上で実装される方法であって、
命令を含む元のソースコードを選択することであって、該命令は、１つ以上のコンピュータによって実行されると、視覚出力を生成する、ことと、
該元のソースコードのサーバ側の実行可能部分および該元のソースコードのサーバ側の静的部分を識別することと、
該元のソースコードのサーバ側の実行可能部分に識別子を割り当てることと、
該元のソースコードのサーバ側の実行可能部分から該元のソースコードのサーバ側の静的部分を分離することと、
該元のソースコードのサーバ側の静的部分を該識別子と組み合わせることにより、中間ソースコードを作成することであって、該識別子は、該元のソースコードのサーバ側の実行可能部分に置き換わる、ことと、
クライアント側の実行可能プログラムを含むサーバ側の実行可能プログラムを作成することであって、該クライアント側の実行可能プログラムは、該中間ソースコード内の該識別子を該元のソースコードのサーバ側の実行可能部分で置換するように動作可能であり、該サーバ側の実行可能プログラムは、該中間ソースコードと、該元のソースコードのサーバ側の実行可能部分とを備え、該サーバ側の実行可能プログラムは、１つ以上のコンピュータによって実行されると、該視覚出力を生成する、ことと、
該サーバ側の実行可能プログラムの表現を含むように、該コンピュータ可読媒体の少なくとも一部を更新することと
を含む、方法。
【発明の詳細な説明】
【背景技術】
【０００１】
ワールドワイドウェブは、情報を共有するための便利な基盤を提供する。ウェブサイトを通じて提供される多数のサービスの中には、銀行取引、購買、および電子メールがある。さらに優れたサービスを提供するために、多数の企業は現在、それぞれのビジターにカスタマイズされたウェブページを提供するようになっている。カスタマイズとして、ビジターの位置に基づいて天気予報を提供したり、的を絞った広告を選択したり、ウェブサイトにあるビジターのアカウントへのアクセスを提供したりする等の例が挙げられる。ビジターに送信される各ウェブページがカスタマイズされるので、ウェブサイトをホストしているウェブサーバは、オンデマンドで、つまり、ビジターによって要求される際に、それぞれのカスタマイズされたページを作成しなければならない。このため、カスタマイズされたウェブページを提供することは、ウェブサーバの処理能力に負担がかかる可能性がある。また、ウェブページの需要がますます高まるにつれて、ウェブページを送信および受信するネットワークリソースにかかるトラフィック負荷も高まる。
【発明の概要】
【課題を解決するための手段】
【０００２】
一実施形態において、方法は、元のソースコードを選択することと、元のソースコードのサーバ側の実行可能部分および元のソースコードのサーバ側の静的部分を識別することと、元のソースコードのサーバ側の静的部分に識別子を割り当てることと、中間ソースコードを作成するように、元のソースコードのサーバ側の実行可能部分と識別子を組み合わせることであって、識別子は、元のソースコードのサーバ側の静的部分を置換する、ことと、サーバ側の静的部分および中間ソースを含み、かつ実行される時に中間ソースコードの中の識別子を元のソースコードのサーバ側の静的部分で置換する、クライアント側の実行可能プログラムを作成することとを含む。いくつかの実施形態において、クライアント側の実行可能プログラムは、圧縮によって等、符号化され得る。
【０００３】
別の実施形態において、サーバコンピュータを制御するための方法は、サーバコンピュータで要求を受信することと、要求に応答して、要求に関連する最適化ソースコードを回収することと、最適化ソースコードの一部を実行することと、実行結果の中の文字を置換することと、置換された文字を含む実行結果を提供することとを含む。
【０００４】
また別の実施形態において、機械は、ネットワーク上からウェブページ要求を受信し、要求に応答して、要求されたウェブページの最適化バージョンを選択し、最適化バージョンの中のサーバ側の実行可能コードを実行し、実行結果が圧縮形式であることを示す応答ヘッダを含む実行結果をリクエスタに提供するように結合されたウェブサーバコンピュータを含む。
【０００５】
さらに別の実施形態において、方法は、元のソースコードを選択することと、元のソースコードのサーバ側の実行可能部分および元のソースコードのサーバ側の静的部分を識別することと、元のソースコードのサーバ側の実行可能部分に識別子を割り当てることと、中間ソースコードを作成するように、元のソースコードのサーバ側の静的部分と識別子を組み合わせることであって、識別子は、元のソースコードのサーバ側の実行可能部分を置換する、ことと、サーバ側の実行可能部分および中間ソースを含み、かつ実行される時に中間ソースコードの中の識別子を元のソースコードのサーバ側の実行可能部分で置換する、クライアント側の実行可能プログラムを作成することとを含む。
【図面の簡単な説明】
【０００６】
本開示は、添付の図面を参照して読む時、次の発明を実施する形態から完全に理解される。業界の標準慣行に応じて、多様な特徴は均等に縮尺して描かれていないことを強調する。事実、多様な特徴の寸法は、記載の明確化のために、任意に拡大または縮小され得る。さらに、簡素化のために全ての特徴が全ての図面に示されない場合がある。
【図１】図１は、ウェブページ最適化を実施するためのシステムを図示する。
【図２】図２〜７は、処理される多様な段階の例示的なドキュメントを図示する。
【図３】図２〜７は、処理される多様な段階の例示的なドキュメントを図示する。
【図４】図２〜７は、処理される多様な段階の例示的なドキュメントを図示する。
【図５】図２〜７は、処理される多様な段階の例示的なドキュメントを図示する。
【図６】図２〜７は、処理される多様な段階の例示的なドキュメントを図示する。
【図７】図２〜７は、処理される多様な段階の例示的なドキュメントを図示する。
【図８】図８は、図２〜７に図示される例示的なドキュメントによって生成される内容を表示するウェブブラウザウィンドウを図示する。
【図９】図９は、圧縮されたドキュメントを準備するためのプロセスを図示する。
【図１０】図１０は、最適化ウェブページを供給するためのプロセスを図示する。
【図１１】図１１は、最適化内容を要求し、ウェブサーバから受信するためのプロセスを図示する。
【図１２】図１２〜１３および１５は、最適化ドキュメントを作成するために処理される多様な段階での例示的なドキュメントを図示する。
【図１３】図１２〜１３および１５は、最適化ドキュメントを作成するために処理される多様な段階での例示的なドキュメントを図示する。
【図１４】図１４は、メモリ内に記憶される置換された文字の位置を図示する。
【図１５】図１２〜１３および１５は、最適化ドキュメントを作成するために処理される多様な段階での例示的なドキュメントを図示する。
【図１６】図１６は、圧縮されたウェブページを準備するためのプロセスを図示する。
【図１７】図１７は、圧縮されるウェブページで使用するために好適なウェブページを供給するためのプロセスを図示する。
【図１８】図１８は、内容を要求し、ウェブサーバから受信するためのプロセスを図示する。
【図１９】図１９は、ウェブページの静的およびサーバ側の実行可能部分の内容を記憶するためにＤＩＶタブを使用するドキュメントを図示する。
【図２０】図２０は、最適化ウェブページをテストするためのプロセスを図示する。
【図２１】図２１は、最適化プロセスをテストするための別のプロセスを図示する。
【図２２】図２２は、ウェブサーバコンピュータの供給容量を最適化するためのシステムを図示する。
【図２３】図２３は、ウェブサーバコンピュータの供給能力を最適化するための別のシステムを図示する。
【発明を実施するための形態】
【０００７】
本開示は、概して、ワールドワイドウェブおよびウェブページを改善する方法に関する。しかしながら、以下の開示は、本発明の異なる特徴を実装するための、多種多様な実施形態、または実施例を提供することを理解されたい。本開示を簡素化するために、以下に構成要素および配置の特定の実施例を説明する。言うまでもなく、これらは実施例に過ぎず、限定を目的とするものではない。図１を参照すると、ウェブページの最適化技術を実装するためのシステム１００が図示される。システムは、ウェブページ等のドキュメントへのアクセスを提供する、サーバコンピュータ１０２を含む。サーバコンピュータ１０２は、ウェブページ要求を受信し、ウェブページを伝送することによって要求に応答する、ウェブサーバソフトウェアを実行し得る。例示的なウェブサーバソフトウェアとして、Ｍｉｃｒｏｓｏｆｔから入手可能なＩｎｔｅｒｎｅｔ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｓｅｒｖｅｒ、およびＡｐａｃｈｅ  Ｓｏｆｔｗａｒｅ  Ｆｏｕｎｄａｔｉｏｎから入手可能なＡｐａｃｈｅが挙げられる。要求に応答して、ウェブサーバソフトウェアは、要求されたウェブページを生成するためのソースコードを含むウェブページファイルを選択する。ウェブサーバソフトウェアは、ソースコードの部分を実行し、実行結果をクライアントコンピュータ１０４へ送信する。
【０００８】
クライアントコンピュータ１０４は、ネットワーク１０６を介して、サーバコンピュータ１０２に結合される。クライアントコンピュータ１０４は、例えば、サーバコンピュータ１０２からウェブページを要求し、受信されたウェブページをユーザに表示することによって、ユーザがウェブアプリケーションにアクセスすることを可能にする、ウェブブラウザソフトウェアを実行する。また、ウェブブラウザソフトウェアは、受信されたウェブページの部分を実行し得る。ウェブブラウザソフトウェアの例として、Ｍｉｃｒｏｓｏｆｔ  Ｉｎｔｅｒｎｅｔ  Ｅｘｐｌｏｒｅｒ、Ａｐｐｌｅ  Ｓａｆａｒｉ、Ｍｏｚｉｌｌａ  Ｆｉｒｅｆｏｘ、およびＧｏｏｇｌｅ  Ｃｈｒｏｍｅが挙げられる。ネットワーク１０６は、クライアントコンピュータ１０４とサーバコンピュータ１０２との間の通信経路を提供する。
【０００９】
ネットワーク１０６は、複数の有線または無線接続を含み得、クライアントコンピュータ１０４とサーバコンピュータ１０２との間の通信経路には、ゼロ以上の追加のコンピュータが存在し得る。ネットワーク１０６は、電気的接続、光学的接続、無線周波接続、および他の好適な通信接続、または複数の接続の組み合わせを含み得る。ネットワーク１０６は、スイッチ、ルータ、ハブ、マルチプレクサ、デマルチプレクサ、モジュレータ、デモジュレータ、および他の好適な機器等の機器を含み得る。代替として、ネットワーク１０６は、ウェブブラウザソフトウェアおよびウェブサーバソフトウェアが同じコンピュータハードウェア上で実行することを可能にする、ループバックインターフェースの場合の仮想接続または仮想ソフトウェアであり得る。また、ネットワーク１０６は、図示されていない追加のクライアントおよびサーバを含み得る。ネットワーク１０６の例として、公共インターネット等のインターネット、非公開の企業ネットワーク等のイントラネットが挙げられる。
【００１０】
他の実施形態において、ウェブページ以外のドキュメントは、クライアント１０４およびサーバ１０２によって要求され、伝送され得る。例えば、ドキュメントは、ＸＭＬドキュメントであり得る。
【００１１】
クライアント１０４およびサーバ１０２は、コンピュータ可読媒体にデータを記憶し、コンピュータ可読媒体からデータを回収するための１つ以上のデバイス（図示せず）を含み得る。デバイスは、クライアント１０４および／またはサーバ１０２に組み込まれるか、直接または間接的のいずれかで付設されるか、または、ネットワークまたはデータバス、あるいはこれらの任意の組み合わせからアクセス可能であり得る。例示的なデバイスとして、レジスタ、ランダムアクセスメモリ等の揮発性メモリ、およびハードドライブまたは光ドライブ等の不揮発性メモリが挙げられる。概してバイナリの性質であるデータをこれらのコンピュータ可読媒体のうちのいずれかに記憶することは、物理的項目の状態を変換することが必要であることが理解される。例えば、データビットをレジスタまたはＲＡＭに記憶することは、概して、キャパシタを充電または放電すること、あるいはフリップフロップの状態を設定することが関与する。データビットを磁気媒体に記憶することは、概して、磁気媒体内の１つ以上の粒子の磁化を変化させることが関与する。データビットを光ディスクに記憶することは、概して、有機ダイをスコーチすること、または合金の位相を変化させることが関与する。このように、データビットをコンピュータ可読媒体に記憶することは、記憶されたデータビットの表現を含むように、物理的項目を更新することが関与する。より大型またはより複雑なデータを記憶することは、順次または同時、あるいは両方に関わらず、その構成ビットの全てを記憶することによって達成される。本明細書全体でコンピュータメモリまたは他の記憶装置への言及は、任意の好適なコンピュータ可読媒体を網羅することを意図する。
【００１２】
図２〜７は、例示的なドキュメントの処理に応じた多様な段階を図示する。図２は、サーバコンピュータ１０２上に記憶され得る、例示的なドキュメント２０２を示す。図示されるように、例示的なドキュメント２０２は、ウェブページドキュメントであり、実行される場合に、人間の肉眼に物理的に認識可能である、視覚的に表示可能な出力を生成する、１つ以上のコンピュータのための命令を含む。例えば、例示的ドキュメント２０２は、ウェブサーバによって実行される命令、およびウェブブラウザクライアントによって実行される命令を含む。命令は、表示可能な要素の相互に対する位置、および視覚出力全体の境界に対する位置等、視覚出力の内容およびその体系の両方を決定する。例示的なドキュメント２０２は、ヘッダ部分２０３および本体部分２０４を含む。ヘッダ部分２０３は、例示的なドキュメント２０２を供給する場合に、ウェブサーバに別のドキュメントの内容を組み入れるように指示する、サーバ側のインクルード文２０６を含む。
【００１３】
図３は、第１の処理ステップ後、例示的なドキュメント２０２に対応する例示的なドキュメント３０２を図示する。具体的には、例示的なドキュメント３０２は、サーバ側のインクルード文２０６の中で参照されるドキュメントから挿入される内容３０４を含む。内容３０４は、サーバ側のインクルード文２０６を置換する。
【００１４】
図４は、次の処理ステップ後における、例示的なドキュメント３０２に対応する例示的なドキュメント４０２を図示する。ドキュメント３０２のサーバ側の静的な部分は、識別子４０４および４０６で置換されている。識別子は、元のドキュメントでは発生する可能性が極めて低いように選択される構造を有する。識別子４０４は、「〜〜〜｜０００１：０１］」、つまり、３つのチルダ文字の後にパイプ文字、次いで、４桁のファイル識別子、コロン、および２桁の静的テキスト識別子の値が続く。４桁のファイル識別子は、例示的なドキュメント２０２等のドキュメントを識別する。２桁の静的テキスト識別子は、第１のサーバ側の実行可能部分の前の第１の静的テキストの部分等、ドキュメントの一部を識別する。識別子４０６は類似の構造を有するが、同じドキュメントの異なる部分を識別するので、異なる２桁の静的テキスト識別子を有する。言うまでもなく、識別子４０４および４０６は例に過ぎず、識別子は異なる構造を有し得、これより長くてもまたは短くてもよく、数字、英数文字、バイナリ、または任意の他の好適な形式であり得る。
【００１５】
図４はさらに、識別子４０４および４０６で置換されたドキュメント３０２の部分が現在メモリ４０８に記憶されていることを図示する。置換された部分は、ドキュメント４０２の中の内容から代用された関連識別子からの値を含む、ＸＭＬタグの内側に置かれている。従って、メモリ４０８は、識別子４０４に対応する第１の部分４１０、および識別子４０６に対応する第２の部分４１２を含む。
【００１６】
次いで、メモリ４０８の内容は、圧縮操作を介して、代替の表現に変換される。この圧縮操作を介して、メモリ４０８に符号化された物理的データは、異なる物理的データ符号に変換され、同じメモリ４０８内、または異なるメモリ内に記憶され得る。このように、圧縮符号化データは、メモリ４０８の中にあった元の物理的データを表現する。ＺＩＰ、ＧＺＩＰ、圧縮、ランレングス（ｒｕｎ  ｌｅｎｇｔｈ）符号化、ハフマン（Ｈｕｆｆｍａｎ）符号、レンペルジフ（Ｌｅｍｐｅｌ−Ｚｉｖ）符号、オープンソースのＺＬｉｂライブラリ、または任意の他の圧縮方法等、任意の好適な圧縮方法が使用され得る。いくつかの圧縮方法は、多様な異なるウェブブラウザに含まれる、対応する解凍方法を有する。例えば、多数のウェブブラウザは、ｇｚｉｐ解凍アルゴリズムを含む。このように、ｇｚｉｐ圧縮方法が選択される場合、結果として生じるファイルは、ウェブブラウザへのプラグインあるいは一切の修正または追加なしに、多数のウェブブラウザによって解凍することができる。いくつかの実施形態において、圧縮以外の符号化技法が使用され得る。例えば、内容は暗号化され得る。
【００１７】
多数の圧縮ライブラリに関し、結果として生じる出力は、バイナリ形式であり、構文文字（文字列を含む）を含む。構文文字は、後のステップにおける出力を処理するプログラムにおいて、不正と見なされるか、または特殊な構文意義を有する。このため、圧縮された出力は、いくつかの文字代用を要求し得る。例えば、ヌル文字は、「＼０」等の対応するエスケープコードで置換され得る。別の例として、「＼ｒ」および「＼ｎ」等の改行文字の構文表現は、評価されると元のリテラルテキストを生成する、「＼＼ｒ」および「＼＼ｎ」等のエスケープシーケンスで置換され得る。同様な技法は、「＜％」および「％＞」ならびに「＜！――＃」等のコード区切り文字に適用することができる。代替として、バイナリ出力は、ｕｕｅｎｃｏｄｅまたはＭＩＭＥ等のバイナリからテキストへの符号化を用いてテキストセーフに作成され得る。また別の代替として、文字代用のいくつか、または全てに対する必要性を排除するために、図１９を参照して以下に記載される処理技法が使用され得る。
【００１８】
図５は、次の処理ステップ後における、例示的なドキュメント４０２に対応する例示的なドキュメント５０２を図示する。ドキュメント５０２は、ページ要求に応じて、ウェブブラウザに伝送するために適したＪａｖａＳｃｒｉｐｔウェブページである。ドキュメント４０２の内容は、動的変数に組み込まれる。ドキュメント４０２の中の引用符は、引用符のエスケープコードで置換される。メモリ４０８の圧縮され、テキストセーフな表現は、静的変数に組み込まれる。ドキュメント５０２はまた、ｂｕｉｌｄＰａｇｅ（）という名前の関数を定義する、外部のＪａｖａＳｃｒｉｐｔソースファイル、ｂｕｉｌｄ．ｊｓも参照する。ｂｕｉｌｄＰａｇｅ（）関数は、パラメータとして静的および動的変数を受け取り、必要な処理を実施して、静的データを解凍し、動的変数の中の識別子を解凍された静的変数からの対応する値で置換する。
【００１９】
図６は、サーバ側の実行後における、例示的なドキュメント５０２に対応する例示的なドキュメント６０２を図示する。つまり、図６は、ウェブサーバから要求しているウェブブラウザへ伝送されるであろう状態のドキュメントを図示する。動的変数の中にあったサーバ側の実行可能コードは、コードの結果に置換されている。この例において、コードは、１年の月のリストを生成した。
【００２０】
図７は、ｂｕｉｌｄＰａｇｅ（）関数の実行後における、例示的なドキュメント６０２に対応する例示的なドキュメント７０２を図示する。つまり、図７は、ページ変数に記憶されるであろうドキュメントを図示する。ページの静的および動的部分は、図２および３に図示される元の体系に再び組み合わされているが、サーバ側の実行可能コードが実行され、実行結果に置換されている。つまり、例示的なドキュメント７０２は、ウェブサーバがドキュメント３０２を従来の様式で供給した場合にウェブブラウザに提供したであろう内容と同じ内容を有する。
【００２１】
図８は、例示的なドキュメント７０２によって生成された内容を表示するウェブブラウザウィンドウ８０２を図示する。
【００２２】
図９は、圧縮されたドキュメントを準備するためのプロセス９００を図示する。プロセス９００は、ステップ９０２で、圧縮される１つ以上のターゲットドキュメントを特定するステップを開始する。ドキュメントは、静的内容および実行可能コードの混合を含む、ウェブページまたは他のドキュメントであり得る。ドキュメントは、ドキュメントサーバまたはドキュメント受信者、あるいは両方によって、実行可能なコードを含む、多種多様な実行可能なコードを含み得る。次いでステップ９０４において、ドキュメントの静的部分および実行可能部分が識別される。ほとんどの場合、ドキュメントは静的および実行可能の両方の部分を含むであろうこと、および各タイプの多数の部分を有し得ることが予想されるが、ドキュメントは、静的または実行可能のいずれかの１つの部分だけを含み得ることが可能である。
【００２３】
次にステップ９０６で、静的部分は、ウェブページの実行可能部分から分離される。静的部分には、識別子が割り当てられる。識別子は、ウェブページ内で一意的であることが好ましく、複数のウェブページにわたって、またはウェブサイト全体にわたって一意的であり得る。識別子は、実行可能な部分に対して対応する静的部分の位置をマークするために使用される。代替として、識別子は、実行可能部分に割り当てられ、静的部分に対するそれらの位置をマークするために使用され得る。
【００２４】
次にステップ９０６で、静的部分は収集され、圧縮される。静的部分は、それらの識別子を用いてタグ付けされ得る。代替として、静的部分は連結され、それらの相対的開始点が、対応する識別子と共に記憶され得る。また、部分の長さも記憶され得るが、この情報は、２つの連続部分の開始位置から長さを計算することができるので必要ではない場合がある。ＺＩＰ、ＧＺＩＰ、圧縮、ランレングス（ｒｕｎ  ｌｅｎｇｔｈ）符号化、ハフマン（Ｈｕｆｆｍａｎ）符号、レンペルジフ（Ｌｅｍｐｅｌ−Ｚｉｖ）符号、オープンソースのＺＬｉｂライブラリ、または任意の他の圧縮方法等、任意の好適な圧縮方法が使用され得る。いくつかの実施形態において、圧縮以外の符号化技法が使用され得る。例えば、内容は暗号化され得る。
【００２５】
次いでステップ９０８において、特殊な意味を有する、またはテキスト形式で一般的に許可されない文字を対応するエスケープコードで置換することによって、圧縮された静的部分がテキスト化される。例えば、ヌル文字（バイナリ０ｘ００）は、Ｊａｖａｓｃｒｉｐｔのヌル文字に対するエスケープコードである、「＼０」で置換される。このように、結果として生じる出力は「テキストセーフ」である。内容をテキスト化する別の手法は、ＲＦＣ４６４８に記載されるようなＭＩＭＥで使用されるベース６４符号化およびその派生等、テキスト符号化スキームを使用することである。ステップ９１０を続けると、テキストセーフな圧縮された静的部分は、最適化ウェブページを作成するように、ステップ９０６からの実行可能部分と再び組み合わされる。最適化ウェブページは、圧縮された静的部分を解凍し、それらをサーバ側の実行可能部分と再統合するためのクライアント側の実行可能コードを含む、ＪａｖａＳｃｒｉｐｔウェブページであり得る。
【００２６】
図１０は、プロセス９００によって生成されたウェブページ等の最適化ウェブページを供給するためのプロセス１０００を図示する。プロセス１０００は、例えば、ウェブサーバによって採用され得る。プロセス１０００は、ウェブページに対する要求が受信されるステップ１００２から開始する。次にステップ１００４で、要求されたウェブページの最適化バージョンが回収される。ステップ１００６で、ウェブページの任意のサーバ実行可能部分は、ウェブサーバによって実行される。次にステップ１００８で、サーバ側の結果がテキスト化される。サーバ側の実行可能コードによって生成される出力は、引用符等、最適化ウェブページのクライアント側実行の間にエラーを生じることになる文字に対してスキャンされる。図２〜８に図示された上記の実施例において、サーバ側の実行結果は、ＪａｖａＳｃｒｉｐｔ変数内に記憶され、サーバ側実行によって生成された引用符は、その変数の定義の終了として解釈されることになり、インタプリタのエラーを発生させる。サーバ側コードが引用符を生成する場合、その文字は、その対応するエスケープ文字列、すなわち、前にバックスラッシュを付けた引用符（＼’’）を用いて置換されなければならない。これらの文字をテキスト化することによって、最適化ウェブページを実行するウェブブラウザの中のエラーを防止する。最後にステップ１０１０において、結果として生じるウェブページがリクエスタに伝送される。
【００２７】
図１１は、最適化内容を要求し、それをウェブサーバから受信するためのプロセス１１００を図示する。プロセス１１００は、プロセス１０００との併用に適している。プロセス１１００は、ステップ１１０２でウェブページに対する要求を伝送するステップから開始する。要求は、ＨＴＴＰ  ＧＥＴコマンドであり得る。次にステップ１１０４において、最適化ウェブページが受信される。ステップ１１０６において、最適化ウェブページは、リクエスタによって実行される。前述のように、最適化ウェブページはＪａｖａＳｃｒｉｐｔドキュメントであり得るが、任意の好適なプログラム言語が使用され得る。クライアント側で最適化ウェブページを実行することによって、圧縮されていないウェブページが生成される。次にステップ１１０８で、圧縮されていないウェブページが表示される。圧縮されていないウェブページが、追加のＪａｖａＳｃｒｉｐｔコード等の追加の実行可能コードを含む場合、その追加の実行可能コードも実行され得る。
【００２８】
別の実施形態において、ウェブページ最適化システムは、Ｍｉｃｒｏｓｏｆｔ  Ｉｎｔｅｒｎｅｔ  Ｅｘｐｌｏｒｅｒ、Ｍｏｚｉｌｌａ  Ｆｉｒｅｆｏｘ、Ｇｏｏｇｌｅ  Ｃｈｒｏｍｅ、Ａｐｐｌｅ  Ｓａｆａｒｉ等、多数の一般的なウェブブラウザに組み込まれているｇｚｉｐインフレートルーチンを活用し得る。ｇｚｉｐファイル形式および圧縮標準は、ＲＦＣ１９５１および１９５２に提供され、これらは参照により本明細書に組み入れられる。それらの文献に記載のとおり、ｇｚｉｐファイル形式は、一連のデータブロックから構成される。各データブロックは、デフレート方法および記憶方法を含む、異なる符号化技法を使用することができる。このように、図２〜１１の前述の最適化手法は、依然として圧縮ファイル内のサーバ側コードの実行を可能にする一方で、ｇｚｉｐ解凍を使用するように適合されることができる。
【００２９】
ｇｚｉｐファイル形式を使用してウェブページを最適化するためのプロセスは、図２に示されたドキュメント２０２から開始する。初期の処理は、図３および４を参照した前述と同じである。その後、ファイルは、図１２に示される例示的なドキュメント１２０２を生成するように処理される。例示的なドキュメント１２０２は、例示的なドキュメント４０２からのサーバ側実行可能部分を含む、動的変数を定義するＪａｖａＳｃｒｉｐｔコードを含む。静的変数は、メモリ４０８からのサーバ側の静的部分を含む。前述のように、これらの変数定義は、引用符等のいくつかの文字に対するエスケープコードを追加するように処理されている。例示的なドキュメント１２０２はまた、別のＪａｖａＳｃｒｉｐｔファイルである、ｂｕｉｌｄ２．ｊｓに定義されているＪａｖａＳｃｒｉｐｔ関数ｂｕｉｌｄＰａｇｅ２を参照する。例示的なドキュメント１２０２はまた、ドキュメント２を２つの部分に分割するように、「／／ＥＫＫＯ＿ＥＮＤ＿ＤＹＮ！」値を含むトークン１２０４を含む。第１の部分１２０６は、サーバ側の実行可能部分を含み、第２の部分１２０８は、サーバ側の静的部分だけを含む。
【００３０】
図１３は、次のステップの処理後における、ドキュメント１２０２に対応するドキュメント１３０２を図示する。ドキュメント１３０２は、ｇｚｉｐ対応のファイル形式であり、第１のブロック１３０４および第２のブロック１３０６を含む。第１のブロック１３０４は、ｇｚｉｐファイル形式に準拠するマルチバイトヘッダ１３０８を含む。ヘッダ１３０８は、印刷できない文字を含み得るため、図１３においては、文字「Ｘ」を使用して図示される。ヘッダ１３０８は、第１のブロックが、ｇｚｉｐ「ストア」符号化技法を使用して符号化されることを規定する。つまり、第１の部分１２０６に存在した人間可読内容は、第１のブロック１３０４において人間可読状態のままである。トークン１２０４は、第１のブロック１３０４の終了を決定するために使用され、トークン１２０４は、必要がなくなると第１のブロック１３０４から削除され得る。
【００３１】
第２のブロック１３０６は、ｇｚｉｐファイル形式に準拠するヘッダ１３１０を含む。ヘッダ１３１０は、第２のブロックが、ｇｚｉｐ「デフレート」符号化技法を使用して符号化されることを規定する。つまり、第２の部分１２０８に存在した内容は圧縮され、第２のブロック１３０６において人間可読ではなくなる。
【００３２】
ドキュメント１３０２は、第１のブロック１３０４内のサーバ側の実行可能コードを実行できるように、ウェブサーバに提供されることになる。この時点まで説明されたようにドキュメント１３０２は、ウェブサーバにおいて解釈エラーを生じることになる文字を含み得る。例えば、ヘッダ１３０８および１３１０は、ウェブサーバがファイルの終了をマークすると誤って解釈することになるヌル文字（０ｘ００）を含み得る。同様に、第２のブロック１３０６は、ヌル文字を含み得る。そして、第２のブロック１３０６は、「＜％」または「＜−−」等、サーバがサーバ側の実行可能内容の開始をマークすると解釈することになる文字列を含み得る。これらのエラーを防止するために、ドキュメント１３０２の中の潜在的にエラーを誘発する文字および文字列は、大文字のＸで置換されている。言うまでもなく、Ｘ文字の代わりに、任意の他の好適な置換文字を使用することができる。他のプロセスが発生した後に、ドキュメント１３０２の中のこれらの文字を復元できるように、置換に関する情報が記憶される。
【００３３】
図１２および１３の表現の代替として、第１のブロックがサーバ側の静的部分を含み、一方で第２のブロックがサーバ側の実行可能部分を含むように、第１のブロックおよび第２のブロックの内容を入れ替えることができる。言うまでもなく、ドキュメントは複数のブロックを含む可能性があり、したがって、圧縮されたままのサーバ側の実行可能部分は、第１のブロック、最後のブロック、または中間のブロックに位置し得ることが理解される。
【００３４】
図１４は、メモリ１４０２に記憶された置換された文字の位置を図示する。メモリ１４０２は、位置１４０４を記録するエントリおよび置換されている文字の値１４０６を含むアレイである。位置１４０４は、ドキュメント１３０２の開始から、ドキュメント１３０２の終了から、または任意の他の好適な位置から測定され得る。ドキュメント１３０２の終了から位置を測定する１つの利点は、サーバ側の実行可能コードがその後ウェブサーバによって実行される時に第１のブロック１３０４の長さが変化する場合に、位置１４０４は、ドキュメント１３０２の終了に対して変化しないことである。位置１４０４がドキュメント１３０２の開始に対して測定される場合、第１のブロック１３０４のサイズまたは長さにおける任意の以降の変更を考慮するように更新されなければならない。第１のブロックヘッダ１３０８は、その後サーバ側の実行可能コードが実行される時に更新されなければならないため、メモリ１４０２は、このヘッダの中で置換された文字に対する一切のエントリを含まない場合がある。メモリ１４０２は、アレイとして図示されるが、リンク付けされたリストまたは動的アレイ等、任意の好適なメモリ構造が使用され得る。代替として、複数のメモリ構造を使用することができる。例えば、１つのメモリ構造がヌル文字の位置を記憶し、一方で第２のメモリ構造が、パーセント符号等、別の文字の位置を記憶する。このように、可能性として、文字値は、明示的ではなく暗示的に記憶され得る。
【００３５】
図１５は、次の処理ステップ後における、ドキュメント１３０２に対応するドキュメント１５０２を図示する。具体的には、ドキュメント１５０２は、ウェブサーバが、ドキュメント１３０２の第１のブロック１３０４の中のサーバ側の実行可能コードを実行した結果を示す。ドキュメント１５０２は、サーバ側の実行可能コードが実行結果で置換されている第１のブロック１５０４を含む。図示された実施例において、実行結果は１年の月のリストであるが、言うまでもなく、サーバの結果は任意の好適な出力であり得る。図示された実行結果は、エスケープコードを必要とする文字を一切含まない。他の場合、実行結果は、引用符文字等のエスケープコードを必要とする文字を含み得る。これらの場合、実行結果は、文字をそれぞれのエスケープコードで置換するように処理される。例えば、引用符（’’）は、バックスラッシュの後に引用符（＼’’）で置換され得る。この処理が完了した後、第１のブロックヘッダ１５０８を対応するブロック長で更新できるように、第１のブロック１５０４の長さが決定される。最後に、メモリ１４０２に以前に記憶された情報を使用して、構文文字がドキュメント１５０２に戻される。次いで、結果として生じるドキュメントを、要求しているウェブブラウザへ伝送することができる。
【００３６】
サーバ側のコードを実行すると、サーバ側のコード自体よりも小さい、大きい、または同じサイズの実行結果を提供する可能性があることが認識されるであろう。つまり、第１のブロック１５０４は、単一のデータブロックに対して可能なｇｚｉｐファイル形式よりも大きい場合がある。概して、ｇｚｉｐファイル形式は、６４キロバイトまでの個々のデータブロックをサポートする。サーバ側の実行結果が１つのｇｚｉｐデータブロックに記憶できるよりも大きい状況を処理するために、第１のブロック１５０４は、２つ以上のｇｚｉｐデータブロックに分割され得る。第１のブロック１５０４は、適切なブロック境界に１つ以上の適切なｇｚｉｐブロックヘッダを挿入することだけによって、複数のブロックに容易に分割することができる。このように、サーバ側の実行結果が７０キロバイトのサイズである場合、第１のブロック１５０４は、６４キロバイトの第１のブロックおよび６キロバイトの第２のブロックという２つのブロックに分割される。第２のブロックは、第１のブロックヘッダ１５０８に類似のブロックヘッダを必要とする。ｇｚｉｐブロックヘッダは、長さが５バイトであるので、第１のブロック１５０４を２つのブロックに分割すると、ドキュメント１５０２全体のサイズに５バイトが追加される。ドキュメント１５０２のサイズを増加すると、プログラムに関するレベルでは、ドキュメント１５０２を保持するために新しいより大きいメモリ空間を割り当てることが必要となる場合があるため、いくつかの実施形態においては、ドキュメント１３０２および１５０２は、第１のブロック１５０４と第２のブロック１５０６との間に１つ以上のダミーブロックヘッダを含み得る。ダミーブロックヘッダは、その関連データ長がゼロであることを規定する。ドキュメント１３０２にダミーブロックヘッダを含めることによって、ドキュメント１５０２は、ドキュメント１５０２のサイズの増加を要求することなく、第１のブロック１５０４が単一のｇｚｉｐブロックに記憶できるよりも大きい状況を処理するために必要なダミーブロックヘッダを含むことになる。ダミーヘッダブロックが必要とされない場合、それはドキュメント１５０２に残されるか、または消去されることができる。ドキュメント１５０２に残された場合、ダミーヘッダブロックは、その関連ブロック長がゼロであることを規定するため、ｇｚｉｐファイル形式を解凍するウェブブラウザまたは他のプログラムにエラーを発生させることはない。このように、ウェブブラウザまたは他のプログラムは、次のヘッダブロックを予想する前に、ブロック１５０６のヘッダ等のヘッダを処理し、ゼロバイトを読み出すことになる。
【００３７】
第１のブロック１３０４の中のサーバ側の実行可能コードが、６４キロバイト、またはｇｚｉｐファイル形式によって課される任意の他のサイズ制限を超えるかどうかは、開示されるプロセスに関する限定ではないことが特筆される。これは基本的には、ドキュメント１３０２は、ｇｚｉｐファイルハンドラによって解釈されないので、完全に適切に形成されたｇｚｉｐファイルでなくてもよいためである。そうではなく、ドキュメント１３０２は、サーバ側の実行可能なコードの実行のためにウェブサーバに渡される。ウェブサーバは、ファイルのｇｚｉｐの側面を解釈しようとはせず、サーバ側の実行可能なコードを実行するだけである。つまり、第１のブロック１３０４が、ｇｚｉｐファイル形式の下で可能なブロックサイズを超えるかどうかは問題とならない。ドキュメント１３０２が実行され（ドキュメント１５０２に変換された）後に初めて、ブロックサイズは検討事項となる。
【００３８】
図１６は、圧縮されたウェブページを準備するためのプロセス１６００を図示する。プロセス１６００は、圧縮される１つ以上のターゲットウェブページを識別するステップ１６０２から開始する。ウェブページは、静的内容および実行可能コードの混合を含む場合があり、実行可能なコードは、ウェブサーバによって実行可能なコードおよびウェブブラウザによって実行可能なコードを含む、多様な種類であり得る。次いで、ステップ１６０４で、ウェブページの静的部分およびサーバ側の実行可能な部分が識別される。ほとんどの場合、ウェブページは、静的およびサーバ側実行可能の両方の部分を含み、それぞれの種類の多数の部分を有し得ることが予想されるが、ウェブページは、静的またはサーバ側実行可能のいずれかの１つの部分だけを含むことができる。
【００３９】
次にステップ１６０６で、静的部分は、ウェブページのサーバ側の実行可能な部分から分離される。静的部分には識別子が割り当てられる。識別子は、ウェブページ内で一意的であることが好ましく、複数のウェブページにわたって、またはウェブサイト全体にわたって一意的であり得る。識別子は、サーバ側の実行可能な部分に対して対応する静的部分の位置をマークするために使用される。代替として、識別子は、サーバ側の実行可能部分に割り当てられ、静的部分に対するそれらの位置をマークするために使用され得る。
【００４０】
次にステップ１６０８で、静的部分およびサーバ側の実行可能部分は、ＪａｖａＳｃｒｉｐｔテンプレート等のウェブブラウザ実行可能プログラムのテンプレートを使用して再び組み合わされる。ＪａｖａＳｃｒｉｐｔテンプレートは、実行される時にウェブブラウザに、ステップ１６０２において識別されたターゲットのウェブページにおいて本来持っていた順番および体系に静的部分およびサーバ側実行可能部分を統合させる、ウェブブラウザによって実行可能なコードを含む。ＪａｖａＳｃｒｉｐｔテンプレートはまた、サーバ側の実行可能な部分を含む部分の終了をマークするようにトークンを含む。
【００４１】
テンプレートは、代替としてＪａｖａＳｃｒｉｐｔ以外のプログラムであり得る。他の種類のテンプレートの例として、ＶＢＳｃｒｉｐｔプログラム、Ｆｌａｓｈプログラム、Ｊａｖａ（登録商標）プログラム、Ｊａｖａ（登録商標）  Ａｐｐｌｅｔ、ＡＪＡＸコンポーネント、ＡＪＡＸプログラム、Ｍｉｃｒｏｓｏｆｔ  ＳｉｌｖｅｒＬｉｇｈｔプログラム、Ｍｉｃｒｏｓｏｆｔ  ＡｃｔｉｖｅＸプログラム、動的リンクライブラリ（ＤＬＬ）およびキャビネット（ＣＡＢ）ファイルが挙げられる。プロセス１６００を続けると、ステップ１６１０において、ＪａｖａＳｃｒｉｐｔプログラムは、修正されたｇｚｉｐ符号化を使用して圧縮される。ＪａｖａＳｃｒｉｐｔプログラムのサーバ側実行可能コードを含む部分は、ｇｚｉｐ  ＳＴＯＲＥ技法を使用して符号化され、ＪａｖａＳｃｒｉｐｔプログラムの他の部分は、ｇｚｉｐ  ＤＥＦＬＡＴＥ技法を使用して符号化される。次いでステップ１６１２において、圧縮されたＪａｖａＳｃｒｉｐｔプログラムはテキスト化される。テキスト化プロセスは、ヌル文字を文字Ｘ等の置換文字で置換することを含む。また、テキスト化は、「＜％」等のサーバ側実行可能コードの開始を示すために使用されるマーカの部分または全てを置換することを含む。また、置換された文字の位置も、後で文字を元の値に復元できるように、記憶される。ウェブサーバソフトウェアの能力に応じて、これらのテキスト化のステップのうちのいくつか、または全てが不要な場合がある。例えば、ウェブサーバソフトウェアがエラーを発生させずに処理する場合、ヌル文字をテキスト化することは不要である。
【００４２】
図１７は、プロセス１６００を使用して圧縮されたウェブページで使用するために好適である、ウェブページを供給するためのプロセス１７００である。プロセス１７００は、例えば、ウェブサーバによって採用され得る。プロセス１７００は、ウェブページに対する要求が受信されるステップ１７０２から開始する。要求の例として、ＨＴＴＰ  ＧＥＴまたはＰＯＳＴメッセージが挙げられる。次にステップ１７０４において、要求されたウェブページの最適化バージョンが回収される。最適化バージョンは、プロセス１６００等の最適化プロセスを使用して作成されたウェブページのバージョンである。ウェブページの最適化バージョンは、例えば、最適化バージョンが作成されてから、ウェブページの最適化されていないバージョンが修正されているかどうかを決定するために、ウェブページの最適化されていないバージョンと比較され得る。最適化されていないバージョンが更新されていた場合、最適化バージョンは、プロセス１６００のステップを実行する等によって、更新され得る。
【００４３】
ステップ１７０６において、最適化ウェブページの中のサーバ側の実行可能コードが実行される。これは、最適化ウェブページをウェブサーバ実行エンジンに提供することによって達成され得る。最適化ウェブページを実行すると、サーバ側の実行コードが実行結果によって置換される。次にステップ１７０８において、サーバ側の結果がテキスト化される。サーバ側の実行可能コードによって生成された出力は、引用符等、最適化ウェブページのクライアント側実行の間にエラーを発生することになる文字に対して、スキャンされる。図１２〜１５において上記で図示された実施例において、サーバ側の実行結果は、ＪａｖａＳｃｒｉｐｔ変数内に記憶され、サーバ側の実行によって生成された引用符は、その変数の定義の終了として解釈されることになり、インタプリタのエラーを発生させる。サーバ側のコードが引用符を生成する場合、その文字は、その対応するエスケープ文字列、つまり、前にバックスラッシュを付けた引用符（＼’’）で置換されなければならない。これらの文字をテキスト化することによって、最適化ウェブページを実行するウェブブラウザ内のエラーを防止する。次いでステップ１７１０において、前に置換された文字が記憶される。簡潔に言うと、このステップは、プロセス１６００におけるテキスト化ステップ１６１２の効果を元に戻すことが関与する。つまり、ヌル文字およびパーセント文字は、メモリ１４００等のメモリに保存されていた位置に復元される。ステップ１７１２において、ＨＴＴＰ応答ヘッダは、応答内容がｇｚｉｐを使用して符号化されていることを示すように修正される。最後にステップ１７１４において、最適化ウェブページは、リクエスタに伝送される。
【００４４】
図１８は、ウェブサーバからの内容を要求し、それを受信するためのプロセス１８００を図示する。プロセス１８００は、プロセス１７００と併用するために適している。プロセス１８００は、ステップ１８０２において、ウェブページに対する要求を伝送することから開始する。要求は、ＨＴＴＰ  ＧＥＴコマンド、ＨＴＴＰ  ＰＯＳＴコマンド、または任意の他の好適な要求であり得る。次にステップ１８０４において、最適化ウェブページが受信される。ステップ１８０６において、最適化ウェブページは、ｇｚｉｐインフレート方法を使用する等によって、解凍される。この際、圧縮ステップは、多数のウェブブラウザソフトウェアプログラムに内蔵されている解凍ルーチンを利用し得、これらは、概して、ＪａｖａＳｃｒｉｐｔに作成されているルーチン等よりも解釈付き解凍をより迅速に実行する。次にステップ１８０８において、解凍されたウェブページが実行される。前述のように、最適化ウェブページは、ＪａｖａＳｃｒｉｐｔドキュメントであり得るが、任意の好適なプログラム言語が使用され得る。最適化ウェブページをクライアント側で実行すると、ウェブページ結果が生成される。最後にステップ１８１０において、ウェブページ結果が表示される。ウェブページ結果が、追加のＪａｖａＳｃｒｉｐｔコード等、追加の実行可能コードを含む場合、その追加の実行可能コードも実行される。
【００４５】
上記の技法は、ウェブサーバに提供される最適化ウェブページを再構成するために、およびいくつかの事例においては解凍するために、ウェブブラウザによって実行されるＪａｖａＳｃｒｉｐｔプログラムを使用する。前述のように、元のウェブページの静的および動的部分は分離され、図５および１２に記載される静的および動的変数等のＪａｖａＳｃｒｉｐｔ変数内に置かれる。これらのウェブページ部分をＪａｖａＳｃｒｉｐｔ変数内に置くためには、ＪａｖａＳｃｒｉｐｔプログラムが実行される時のインタプリタエラーを防止するために、引用符等の一定の文字を「エスケープ」することが必要である。この要件によって、エスケープ文字シーケンスが置換する文字よりも長いので、最適化ウェブページを準備するために必要な処理が追加され、結果として生じるファイルサイズが増大する。ＪａｖａＳｃｒｉｐｔ変数に静的および動的部分を置く代替として、それらは、ＨＴＭＬ  ＤＩＶ部分に置かれ得る。この変形は、図１９に図示される。
【００４６】
図１９は、ウェブページの静的部分およびサーバ側の実行可能部分の内容を記憶するためにＤＩＶタブを使用するドキュメント１９０２を図示する。ドキュメント１９０２は、サーバ側の実行可能部分を提供する第１のＤＩＶ部分１９０４を含む。第２のＤＩＶ部分１９０６は、サーバ側の静的部分を提供する。第３の部分１９０８の中のＪａｖａＳｃｒｉｐｔページ構築コードは、それぞれ、第１および第２のＤＩＶセクション１９０４および１９０６の内容と共に、ｄｙｎおよびｓｔａｔの２つの変数をロードする。ｄｙｎおよびｓｔａｔ変数の内容はＤＩＶ部分からロードされるため、ＤＩＶ部分内では引用符等の文字をエスケープコードする必要がない。言うまでもなく、図１９の技法は、ヌル文字等のいくつかの構文文字を処理する必要性を完全に排除しない場合があることが理解される。概して、上述の技法を使用して最適化ウェブページを受信するウェブブラウザは、ウェブブラウザが最適化ウェブページの全体を受信するまで、ユーザに対して、解凍され、再構築されたウェブページの描画または表示を開始することができない。例えば、ウェブページ６０２を受信するウェブブラウザは、ウェブページ６０２の全てまたはほぼ全てが受信された後にのみ、ウェブページ７０２の構築を開始する。ウェブブラウザがウェブページ７０２を構築すると、その次に、ウェブブラウザウィンドウ８０２に示されるような、ユーザのための最終出力を生成するために、ウェブページ７０２を解釈しなければならない。最適化ウェブページ全体がウェブブラウザによって受信される前に、ウェブブラウザが最適化ウェブページを解凍、再構築、および再表示を開始できるように、最適化ウェブページは、個別に再構築できる２つ以上の塊に分割され得る。つまり、ウェブブラウザは、第２の塊のダウンロードを継続しながら、第１の塊の再構築および表示を開始できる。
【００４７】
（最適化結果の検証）
概して、上記の最適化技法を使用して提供されるウェブページの表示は、対応する元のウェブページの表示とは、視覚的に区別不可能であることが好まれる。すなわち、最適化プロセスは、ディスプレイ上、プリンタを介して、または他の場合も、ウェブブラウザから出力されるウェブページを修正しないことが好まれる。最適化プロセスがウェブページに悪影響を与えていないことを確実にするために、テストするステップが使用され得る。
【００４８】
図２０は、最適化ウェブページをテストするためのプロセス２０００を図示する。プロセス２０００は、ステップ２００２において、最適化ウェブページのカスタムバージョンを生成することから開始する。カスタムバージョンは、上記に類似のプロセスを使用して作成されるが、ＪａｖａＳｃｒｉｐｔラッパがわずかに修正される点が異なる。具体的には、ラッパは、コンピュータ可読媒体上に、ファイルとして、圧縮されていないウェブページの内容を保存するための文を含む。この保存は、圧縮されていないウェブページを表示するためのコマンドに対する追加、またはその代わりであり得る。例えば、ＪａｖａＳｃｒｉｐｔラッパは、ｄｏｃ．ｗｒｉｔｅ（）への呼び出しをｆｉｌｅ．ｗｒｉｔｅ（）への呼び出しで補完（または置換）し得る。
【００４９】
プロセスは、ステップ２００６に続き、元のウェブページを回収する。このステップは、ウェブサーバ上で最適化プロセスを一時的に無効にすることによって、または上記の最適化技法を実装しないウェブサーバからウェブページを要求することによって実行され得る。結果として生じるウェブページは、例えば、多数のウェブブラウザで使用可能な「Ｓａｖｅ  Ａｓ．．．」（名前を付けて保存）コマンドを介して、ファイルに保存され得る。
【００５０】
次のステップ２００８において、元のウェブページの結果は、圧縮されていないウェブページの結果と比較される。比較によって２つの結果の間に不一致が識別された場合、最適化ウェブページがエンドユーザに異なる表示を提供している可能性があることを示唆し得る。他の場合、不一致は、無関係である場合がある。例えば、不一致は、ウェブページの空白、コメント、または他の機能以外の側面に関与し得る。ステップ２００８において使用される比較プロセスは、所定の種類の機能以外の内容によって発生していると認識される不一致の報告を抑制し得る。比較ステップ２００８が、元のウェブページ結果と圧縮されていないウェブページ結果との間に全く不一致を特定しない場合、いずれも同じウェブページ表示をエンドユーザに生成し、最適化プロセスは、ウェブページ内容に影響を与えていないと確定される。
【００５１】
図２１は、最適化プロセスをテストするための別のプロセス２１００を図示する。プロセス２１００は、最適化ウェブページが回収されるステップ２１０２から開始する。次にステップ２１０４において、最適化ウェブページは、ウェブブラウザのレンダリングエンジンを使用して描画される。レンダリングエンジンの出力は、ウェブブラウザがエンドユーザに表示することになる内容を含む第１の画像である。次いでステップ２１０６において、最適化ウェブページに対応する、元のウェブページが回収される。そしてステップ２１０８において、ウェブブラウザのレンダリングエンジンは、元のウェブページを第２の画像として描画する。次にステップ２１１０において、第１の画像は第２の画像に比較される。この比較は、画像のピクセル毎の比較であり得る。つまり、比較は、元のウェブページおよび最適化ウェブページの視覚的表現を生成することが関与し、物理的出力であり得る。第１の画像が第２の画像と同一である場合、プロセスはステップ２１１２に続き、最適化プロセスがウェブページ内容に影響を与えていないと確定される。比較によって第１の画像と第２の画像との間に１つ以上の不一致が識別された場合、プロセスはステップ２１１４に続き、差が報告される。代替として、比較ステップは、ピクセルの数または全画像領域のパーセント等、一定の閾値を満たす不一致だけを報告し得る。ステップ２１１４で、ステップ２１１０の比較によって検出された差は、任意の好適な様式で報告され得る。例えば、プロセスは、画像の差が検出された部分へ注意を引くための矢印、円、または他の技法を介する等、検出された差の位置を強調する第３の画像を作成し得る。代替または追加として、ステップ２１１４は、検出された差の位置を識別するテキスト報告書を作成することが関与し得る。プロセスは次いで、差の原因が検証され、解決されるステップ２１１６に続き得る。
【００５２】
動的内容を有するウェブページの場合、ウェブページのレンダリングエンジンに対して異なる設定を使用してプロセス１６００を繰り返すことが望ましい場合がある。例えば、ウェブページは、マウスカーソルの位置に基づいて動的に調整する内容を組み入れる場合がある（例えば、ウェブページは「マウスオーバ」内容を有する）。ウェブページのレンダリングエンジンは、マウスカーソルの位置に依存して異なる出力を生成する。このため、プロセス２１００は、マウスカーソル位置に基づくその動的動作を含めて、最適化ウェブページ結果が元のウェブページ結果に一致することを確実にするよう、いくつかの異なるマウスカーソル位置に対して繰り返され得る。テストされるマウスカーソルの位置は、無作為に選択されることが選択され得、またはウェブページの所定の部分に的を絞るようにテスト実施者によって選択され得る。代替として、プロセス２１００は、あらゆる可能なマウスの位置に対して実行され得る。
【００５３】
図２０および２１に記載される比較方法の両方は、それぞれの利点を有する。図２１の画像比較方法は、描画されたウェブページ内容の画像を使用し、このため、いずれもエンドユーザに提示されるであろう形式において、最適化ウェブページ結果を元のウェブページ結果に比較する。つまり、図２１の方法は、ウェブページの視覚結果をより直接的に比較する。一方、図２０の方法は、ウェブページを生成するために使用される基礎をなすコードを比較する。つまり、図２０の方法は、ウェブブラウザの視覚出力における不一致を発生させ得るコードを識別する。さらに図２０の方法は基礎をなすコード全てを比較するため、最初は視覚的に明白ではない場合がある差を識別することができる。例えば、図２０の方法は、単にマウスカーソルの位置にとどまらず、依存する動的内容に関与する差を識別し得る。
【００５４】
容易に理解できるように、図２０および２１両方の方法は相互に補完する。例えば、視覚的差は、図２１の方法によって検出され得る。視覚的差の根本的な原因を識別する際に支援するように、ウェブページの視覚的差が検出された部分に対するコードの差を強調するために、図２０の方法が使用され得る。
【００５５】
ここで図２２を参照すると、ウェブサーバコンピュータ２２０２の供給能力を最適化するためのシステム２２００が図示される。システム２２００は、ソフトウェア、ハードウェア、または両方の組み合わせを使用して実装され得る。ウェブサーバ最適化フィルタ２２０４は、ネットワーク２２０６からウェブページの要求を受信する。ネットワーク２２０６は、公共インターネット、企業または家庭ネットワーク等の非公開イントラネット、または任意の他の種類のネットワークであり得る。フィルタ２２０４は、要求されたウェブページの最適化バージョンが存在するかどうかを決定する。最適化バージョンが存在する場合、フィルタ２２０４は、最適化バージョンが作成されて以降、ウェブページの元の最適化されていないバージョンが更新されているかどうかを決定する。必要な場合、フィルタ２２０４は、ウェブページの最適化バージョンを再作成する。代替として、フィルタ２２０４は、ウェブページの最適化されていないバージョンを使用して受信された要求を処理し、再作成が必要と最適化バージョンをマークし得る。次いで、最適化バージョンはその後、スレッドまたはプロセスを個別に実行すること等によって再作成され得、こうして要求に対する応答の遅延を防止する。
【００５６】
フィルタ２２０４は、データストレージ２２０６から、要求されたウェブページの最新の最適化バージョンを回収する。データストレージ２２０６は、１つ以上のハードドライブ、ＲＡＭ等の揮発性メモリ、ストレージアレイ、ストレージエリアネットワーク、または任意の他の好適なデータストレージデバイスまたはシステムであり得る。データストレージ２２０６は、ウェブサーバコンピュータ２２０２の一部として図示されているが、データストレージ２２０６はまた、コンピュータに対して外部であり得、ネットワーク２２０６あるいは別のネットワークまたはインターフェースを介して、アクセスされ得る。
【００５７】
フィルタ２２０４は次いで、要求されたウェブページの最新の最適化バージョンを処理するように、ウェブサーバソフトウェア２２０８に要求を送る。ウェブサーバソフトウェア２２０８は、Ｍｉｃｒｏｓｏｆｔから入手可能なＩｎｔｅｒｎｅｔ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｓｅｒｖｅｒ、Ａｐａｃｈｅ  Ｓｏｆｔｗａｒｅ  Ｆｏｕｎｄａｔｉｏｎから入手可能なＡｐａｃｈｅ、または任意の他の好適なウェブサーバソフトウェアであり得る。フィルタ２２０４は、ウェブサーバソフトウェア２２０８に、要求されたウェブページの最新の最適化バージョンを提供するか、あるいはウェブサーバソフトウェア２２０８に、データストレージ２２０６上に記憶された要求されたウェブページとして、要求されたウェブページの最新の最適化バージョンを規定するＨＴＴＰまたは他の要求を送り得る。ウェブサーバソフトウェア２２０８は、必要な場合は、要求されたウェブページを回収し、任意のサーバ側の実行可能コードを実行する。次いで、ウェブサーバソフトウェア２２０８は、結果をフィルタ２２０４に提供する。フィルタ２２０４は、ヌル文字およびパーセント記号のような構文文字を復元する等、必要とされる任意のサーバ側実行後の処理を実施する。フィルタ２２０４はまた、ｇｚｉｐ等、最適化ウェブページの符号化タイプを示すように、必要な場合は、ＨＴＴＰ応答ヘッダを修正する。最後に、フィルタ２２０４は、ネットワーク２２０６上から、リクエスタに結果を提供する。
【００５８】
フィルタ２２０４は、ウェブサーバソフトウェア２２０８と統合されるソフトウェアコンポーネントとして実装され得る。例えば、フィルタは、Ｍｉｃｒｏｓｏｆｔ  ＩＩＳのプラグインコンポーネントであり得る。他の実施形態において、フィルタ２２０４は、ウェブサーバソフトウェア２２０８とネットワーク２２０６との間に論理的または物理的に配置される別個のコンピュータであり得る。つまり、フィルタ２２０４は、独立型装置形式のデバイスであり得る。
【００５９】
システム２３００において示されるように、２つ以上のサーバが、クライアント２３０２に対してウェブページソースコードの一部を提供することが可能である。例えば、サーバ側の静的部分２３１２は、クライアント側の実行可能な中間プログラム２３１４の一部として、サーバ２３０４によって提供され得る。サーバ側の実行可能部分２３１０は、サーバ２３０６によって提供される。サーバ側の静的部分２３１２およびクライアント側の実行可能な中間プログラム２３１４は、サーバ側上で静的であるので、サーバ２３０４は、要求に応答してそれらを提供するために、どんなユーザまたは内容特定情報にもアクセスする必要はない。従って、これらは多数のサーバ２３０４ａにわたって容易に複製されることができ、その部分がリクエスタ近辺のサーバに予め配置されることを可能にする。これは、例えば、Ａｋａｍａｉ等の内容配信ネットワークを使用することによって達成することができる。
【００６０】
サーバ２３０４（または複製サーバ２３０４ａのうちの１つ）は、要求を受信し、それに応答して、サーバ側の静的部分２３１２を含む、クライアント側の実行可能な中間プログラム２３１４を提供する。クライアント側の実行可能な中間プログラム２３１４は、ｇｚｉｐまたはｚｌｉｂ圧縮形式等の圧縮形式で提供され得る。クライアント側の実行可能な中間プログラム２３１４は、受信側クライアント２３０２によって実行されるコマンドを含み、このコマンドは、要求されたウェブページのサーバ側の実行可能部分２３１０を受信するために、サーバ２３０６に向けられる第２の要求を起動する。このコマンドは、クライアントが、サーバ側の静的部分を含むプログラムの後方の部分の受信を継続する間に、クライアントによって実行され得るように、クライアント側の実行可能な中間プログラム２３１４の始めのほうに配置されることが好ましい。クライアント２３０２がサーバ２３０６からサーバ側の実行可能部分２３１０を受信すると、サーバ側の実行可能部分２３１０とサーバ側の静的部分２３１２とは、前述のように結合され、結果として生じるウェブページがユーザに提示される。
【００６１】
言うまでもなく、システム２３００は、クライアント側の実行可能な中間プログラムがサーバ側の静的部分を含むのではなく、サーバ２３０４および２３０４ａのうちの１つからサーバ側の静的部分を回収するように、クライアントによって実行されるコマンドを含むようにさらに修正することができる。
【００６２】
つまり、システム２３００は、要求に対して特定のデータにアクセスすることが必要な唯一のサーバである、サーバ２３０６の供給容量を最大限にするための方式を例証する。例えば、ウェブページが顧客の銀行取引へのアクセスを提供するためである場合、サーバ２３０６のみが顧客の銀行の財務記録へのアクセスを必要とする。サーバ２３０６は、あらゆるユーザに対して同じウェブページの部分を提供することを仕事として課されていないため、サーバ２３０６は、顧客の要求により効率的に応答することができ、より多くの顧客の要求に応答することができる。
【００６３】
本開示は、ネットワーク上からウェブページを要求および供給する状況において記載される。しかし、当業者は、本開示が他の状況において使用され得ることを認識するであろう。例えば、本技術は、ネットワークを必要とせず、単一のコンピュータ内で使用され得る。別の例として、開示される技法は、解釈またはコンパイルされたスクリプトまたはプログラム、ＸＭＬドキュメント、データベースのレコード、あるいは任意の他の種類のドキュメント等、ウェブページ以外のドキュメントに適用され得る。
【００６４】
本開示は、好ましい実施形態に対して説明されてきた。本開示を一読した後に初めて当業者に明らかになるであろう改良または修正は、本明細書の精神および範囲内であると見なされる。いくつかの修正、変更、および代用は前述の開示内であり、いくつかの事例において、本発明のいくつかの特徴は、他の特徴に対応して使用することなく採用されるであろうことが理解される。したがって、添付の請求項は、広義にかつ本発明の範囲と一致した様式において解釈されることが妥当である。
【図１】
2012529115.tif 000003
【図２】
2012529115.tif 000004
【図３】
2012529115.tif 000005
【図４】
2012529115.tif 000006
【図５】
2012529115.tif 000007
【図６】
2012529115.tif 000008
【図７】
2012529115.tif 000009
【図８】
2012529115.tif 000010
【図９】
2012529115.tif 000011
【図１０】
2012529115.tif 000012
【図１１】
2012529115.tif 000013
【図１２】
2012529115.tif 000014
【図１３】
2012529115.tif 000015
【図１４】
2012529115.tif 000016
【図１５】
2012529115.tif 000017
【図１６】
2012529115.tif 000018
【図１７】
2012529115.tif 000019
【図１８】
2012529115.tif 000020
【図１９】
2012529115.tif 000021
【図２０】
2012529115.tif 000022
【図２１】
2012529115.tif 000023
【図２２】
2012529115.tif 000024
【図２３】
2012529115.tif 000025
【国際調査報告】
2012529115.tif 000026