ウェブページを完全にレンダリングするために、ウェブページの全ての埋め込み外部リソースのコンテンツを最初に取得する必要がある。そのようなリソースは、外部画像、JavaScriptコード、およびスタイルシートを含むが、これらに限定はしない。しばしば、同じ外部リソースが多くの異なるウェブページに埋め込まれている。単一のユーザのウェブブラウザがGoogle Analytics JavaScriptコードのような外部ウェブページリソースをリアルタイム(すなわち、リソースが埋め込まれたウェブページがレンダリングされたとき)で要求することは効率的であるが、バッチレンダリングエンジンがそうすることは実現可能でも効率的でもない。例えば、ウェブページインデックスプロセスのためのバッチレンダリングエンジンは、効率的かつ迅速に、一度に多数のウェブページを素早くレンダリングするように設計されている。しかし、埋め込み外部リソースをフェッチすることは、遅くなる可能性があり、そのようなリソースはバッチ処理の目的(例えば、人間のユーザが最終的にレンダリングされた製品を見ることなしに)のために重要ではないことがある。バッチ環境においてウェブページをレンダリングする処理時間を改善するために、レンダリングエンジンは、仮想時計を使用して動作し、重複および不要なフェッチを避けるためにフェッチサーバと連動し、および視覚の処理あるいはウェブページにおける他のユーザ指向の要素を最小限にしてもよい。
図1は、実施形態例に従ったシステムのブロック図である。システム100は、要求プロセスのためにバッチモードでウェブページを効率よく迅速にレンダリングするために使用されてもよい。システム100に図示される要求プロセスは、インターネット検索エンジンのためのインデックスエンジンであるが、実装はレンダリングされたウェブページのダウンストリームユーザとしてのインデックスエンジンに限定しない。例えば、要求プロセスは、ページを分析して遅さを障害追跡する分析エンジンであってもよく、あるいはGoogle Analyticsのようなツールが正しくセットアップされているかを判断する分析エンジンであってもよく、または広告システム、または複雑なウェブページとの、例えばフォームの記入や要素のクリックなどの自動対話に依存する別のシステムであってもよい。したがって、システム100は、インデキシングのためにバッチ生成されたレンダリング結果を使用するものとして説明されてもよく、システム100は、レンダリング結果で提供される情報が有用である他のバッチシステムのために使用されることができる。
システム100は、コンピューティングデバイスであってもよく、あるいは多くの異なるデバイスの形を有するデバイスであってもよい。例えば、システム100は、巣単打オードサーバ、そのようなサーバのグループ、クライアントサーバシステム、あるいはラックサーバシステムであってもよい。さらに、システム100は、パーソナルコンピュータで実装されてもよい。システム100は、図8で図示するような、コンピュータデバイスの例800、あるいは図9で図示するようなコンピュータデバイス900であってもよい。
システム100は、ウェブ巡回エンジン130、インデックスエンジン110のような要求プロセス、レンダリングサーバ140、およびフェッチサーバ150を含む。ウェブ巡回エンジン130、レンダリングサーバ140、およびフェッチサーバ150は、ワールドワイドウェブ上に見られるウェブページのような多数のウェブページを効率的にレンダリングするためにともに動作してもよい。
インデックスエンジン100は、インデックス115を作成するために、1つまたは複数の機械実行可能な命令またはソフトウェアの一部、ファームウェア、またはそれらの組合せを実行するように構成された1つ又は複数のプロセッサを含むことができる。たとえば、インデックスエンジン110は、ウェブ巡回エンジン130を介してサーバから情報を受信してもよい。インデックスエンジン110は、インデックス115を生成するために受信したウェブページのコンテンツを処理してもよい。サーバ190は、1つまたは複数のウェブページまたは1つ又は複数のウェブページに埋め込まれたリソースをホストするインターネットを介してアクセス可能な任意のタイプのコンピューティングデバイスであってもよい。巡回エンジン130によってアクセスされるウェブページは、スタイルシート、Java Script、画像などの埋め込みアイテムを含んでもよく、そのうちのいくつかは、レンダリングされたウェブページのコンテンツおよびレイアウトを変更してもよい。インデックスエンジン110は、巡回エンジン130を介して提供されたものにインデックス付けができるが。インデックスエンジンは、レンダリングサーバ140に、レイアウト情報およびインデックスエンジン110にそれ以外は利用できない動的コンテンツを含むブラウザレンダリングされたウェブページのレンダリング結果を提供するように要求することができる。インデックスエンジン110は、インデックス115のドキュメントについて利用可能な情報を向上するためにレンダリング結果コンテンツを使用することができる。例えば、インデックスエンジン110は、ウェブページの画像のテキストの位置あるいはサイズに基づいて、ウェブページのテキスト要素のランクを変更してもよい。例として、一大ニュースを表すテキスト(例えば、スクロールなしで見ることができる)は、広告のテキストよりもより重要であると考えられ得る。別の例として、広告内のテキストは、ウェブページにとってあまり重要ではないと考えられ得る。さらに、いくつかのコンテンツが動的に生成されるとき、例えばウェブページがレンダリングされるまで利用可能でないとき、インデックスエンジン110は、レンダリング結果を動的に生成されたコンテンツをインデックス付けするために使用してもよい。簡潔にするために図1には示されていないが、いくつかの実施形態において、インデックスエンジン110は、1つまたは複数の別個のコンピューティングデバイスに分散されてもよい。
インデックスエンジン110と同様に、クエリエンジン120は、例えば従来または別の情報検索技術を使用して、クエリ182の検索結果を識別するためにインデックス115を使用する1つ又は複数のサーバを含んでもよい。クエリエンジン120は、クライアント180のようなリクエスタからクエリ182を受信する1つまたは複数のサーバを含んでもよい。クエリエンジン120は、インデックス115を使用して、クエリに応答してドキュメントを識別してもよく、および検索結果184として応答ドキュメントからの情報をリクエスタに提供してもよい。いくつかの実施形態において、クエリエンジン120は、検索結果184の一部としてサムネイルを提供するために、レンダリング結果データストア148のレンダリング結果を使用してもよい。クエリエンジン120は、例えば、1つまたは複数のランク付け信号を使用して、クエリに応答してドキュメントのためのスコアを計算するランク付けエンジンを含んでもよい。1つまたは複数のランク付け信号は、ドキュメントに関連するレンダリング結果から取得されたコンテンツに基づくことができる。ランク付けエンジンは、スコアを使用してクエリに応答して見つかったドキュメントをランク付けしてもよい。
システムは、ウェブ巡回エンジン130を含んでもよい。ウェブ巡回エンジン130は、1つまたは複数の機械実行可能命令あるいはソフトウェアの一部、ファームウェア、あるいはそれらの組合せを実行するように構成された1つ又は複数のプロセッサを含むことができる。ウェブ巡回エンジン130は、標準サーバ、そのようなサーバのグループ、クライアントサーバシステム、あるいはラックサーバシステムのようなコンピューティングデバイスであってもよい。いくつかの実施形態において、ウェブ巡回エンジン130は、フェッチサーバ150またはインデックスエンジン110のようなシステム100の別のコンポーネントと、メモリまたはハードウェアプロセッサのようなコンポーネントを共有してもよい。ウェブ巡回エンジン130は、ワールドワイドウェブ上で見つけられることができるウェブページをクロールしてもよい。ウェブ巡回エンジン130は、クロールされたウェブページを受信したとき、すなわち、クロールされたウェブページのためのコンテンツを受信すると、ウェブ巡回エンジン130は、インデックスエンジン110あるいはフェッチサーバ150であってもよいリクエスタにコンテンツを提供してもよい。ウェブ巡回エンジン130は、データストア(図示せず)にコンテンツを格納し、およびリクエスタにその位置を提供してもよい。本明細書で使用されるウェブページのコンテンツは、ウェブページレンダリングエンジンに提供されかつウェブブラウザに表示するためのウェブページをレンダリングするために使用されるHTMLコードを参照し、例えばスタイルシート、Java Script、別のウェブページ、あるいは画像ファイルなどのウェブページに埋め込まれた外部オブジェクトへの任意のリンクを含む。ウェブ巡回エンジン130は、これらの埋め込みアイテムのコンテンツをフェッチするためにフェッチサーバ150によって使用されてもよい。ウェブ巡回エンジン130は、フェッチサーバ150に埋め込みアイテムのコンテンツを提供してもよく、あるいは埋め込みアイテムテーブル152のようなデータストアにフェッチされたコンテンツを格納してもよい。ウェブ巡回エンジン130は、埋め込みアイテムがクロールされたときにリクエスタに通知してもよい。
前述したように、システム100は、フェッチサーバ150を含む。フェッチサーバ150は、1つまたは複数の機械実行可能な命令またはソフトウェアの一部、ファームウェア、あるいはそれらの組合せを実行するように構成された1つまたは複数のプロセッサを含むことができる。フェッチサーバ150は、標準サーバ、そのようなサーバのグループ、クライアントサーバシステム、あるいはラックサーバシステムのようなコンピューティングデバイスであってもよい。いくつかの実施形態において、フェッチサーバ150は、レンダリングサーバ140、ウェブ巡回エンジン130、またはインデックスエンジン110のようなシステム100の別のコンポーネントと、メモリまたはハードウェアプロセッサのようなコンポーネントを共有してもよい。フェエッチサーバ150は、ウェブ巡回エンジン130が特定の埋め込みアイテムのコンテンツを、例えばそのURLによってフェッチすることを要求し、要求された埋め込みアイテムのフェッチされたコンテンツとクロール時間を受信するように構成される。フェッチサーバ150は、ウェブ巡回エンジン130から直接、またはウェブ巡回エンジンが更新する埋め込みアイテムテーブル152から、コンテンツとフェッチ時間を受信してもよい。フェッチサーバ150は、レンダリングエンジン142から埋め込みアイテムのための要求を受信してもよい。フェッチサーバ150は、要求しているレンダリングエンジン142に応答を提供してもよい。応答は、埋め込みアイテムテーブル152にフェッチされた、または格納されたコンテンツ、画像寸法テーブル156に基づくモック画像、あるいはエラー応答を含んでもよい。いくつかの実施形態において、フェッチサーバ150は、埋め込みアイテムのコンテンツおよびクロール時間を、埋め込みアイテムを要求したレンダリングサーバ140のレンダリングエンジン142に送信することによって、埋め込みアイテムのコンテンツを提供することができる。あるいは、フェッチサーバ150は、埋め込みアイテムテーブル152の指定の位置を介して埋め込みアイテムのコンテンツおよびクロール時間が利用可能であることをレンダリングエンジン142に通知することによってコンテンツを提供することができ、およびレンダリングエンジン142は、データストアからウェブページのコンテンツおよびクロール時間を取得することができる。
フェッチサーバ150は、要求された埋め込みアイテム(例えば、要求されたURL)にURL書き換え規則154を適用してもよい。URL書き換え規則154は、URLが別のURLと同一のコンテンツに関連付けられているとき、URLを書き換えるための規則を含む。これは、ウェブサイトの所有者が、リソースがリクエストされる度にコンテンツをダウンロードすることをブラウザに望み、そのために動的に生成されたURLあるいはキャッシュバスティング(cache-busting)URLを提供する場合によく発生する。このようなURLは、URLの一部としてタイムスタンプまたは埋め込まれたランダム文字列を有することが多く、例えば、キャッシュバスティングURLを生成するJavaScriptによってウェブページがレンダリングされる度に、URLが一意になるようにする。しかしながら、ホスティングサーバから提供された動的に生成されたURLのためのコンテンツは、変更されない、あるいはバッチレンダリングの目的で意味のある方法で変更されない。フェッチサーバ150は、埋め込みアイテムに対する要求により効率的に応答するためにURL書き換え規則154を使用してもよい。例えば、URL書き換え規則154は、パターンまたはテンプレートを含んでもよく、および規則のテンプレートに一致するURLは、同一のコンテンツ、例えば重複コンテンツを返す。いくつかの実施形態において、テンプレートは、オフライン、またはフェッチログを使用して様々なURLのコンテンツを比較し重複コンテンツを有するURLに共通のURLのパターンを識別するバッチプロセスによって、決定されてもよい。フェッチログは、例えばウェブ巡回エンジン130またはフェッチサーバ150によって維持されてもよい。テンプレートは、ユーザ入力であってもよい。要求された埋め込みアイテムがテンプレートのうちの一つに一致するURLを有する場合、URL書き換え規則154は、フェッチサーバ150に要求されたアイテムが重複であることを伝えてもよく、要求されたURLをリダイレクトURLで書き換えるように命令してもよい。これは、以前にフェッチされたコンテンツ、例えば埋め込みアイテムテーブル152のコンテンツを有するURLと関連する。以前にフェッチされた埋め込みアイテムのURLは、リダイレクトURLと見なされてもよい。これは、フェッチサーバが150が、必要のないフェッチを避けることを可能にし、要求しているバッチレンダリングエンジン142への応答を迅速化し、過度のフェッチ要求によって引き起こされるホスティングサーバへのストレスを取り除く。もちろん、要求されたURLがURL書き換え規則154のテンプレートに一致しない場合、URLを書き換えることは、要求されたURLは変更されない結果となる。
URL書き換え規則154は、ブラックリストに載せられたURLのパターンあるいはテンプレートを含んでもよい。要求された埋め込みアイテムがフラックリストに載せられたURLパターンと一致する場合、システムは、URLのためのコンテンツをフェッチしようとするのではなく、所定のエラーを返してもよい。ブラックリストに載せられたURLは、コンテンツがバッチレンダリングの目的のために必要とされないことを決定したあとに、ユーザによってURL書き換え規則154にURLを入力されてもよい。この一例は、多くのウェブページに含まれるGoogle Analytics JavaScriptコードである。このJavaScriptコードは、レンダリングされたページのレイアウトに重要であると見なされなくともよく、バッチレンダリングエンジンの目的のために実行される必要はない。したがって、レンダリング効率のために、いくつかの埋め込みアイテムはURL書き換え規則154を使用してブラックリストに載せられてもよい。いくつかの実施形態において、ブラックリストに載せられたURLのためのエラーを返すのではなく、システムは、期限切れにならない、および埋め込みアイテムに適した所定のコンテンツを有する埋め込みアイテムテーブル152のエントリに、上述したリダイレクトURLを使用してURLを書き換えてもよい。いくつかの実施形態において、URL書き換え規則は、テンプレートに一致するときブラックリストに載せられたものとしてURLにフラグを立ててもよい。URL書き換え規則154は、ウェブ巡回エンジン130を介してフェッチされた埋め込みアイテムの数を劇的に減少することができ、フェッチサーバ150のリソースのための任意の要求への応答時間を改善し、特定のサーバ190のフェッチ量を最小限にする。フェッチ量を最小限にすることは、システムがフェッチ要求でサーバ190に負担をかけないことを保証する。いくつかの実施形態において、フェッチサーバ150及び/又はウェブ巡回エンジン130は、サーバ190に向けられたフェッチ要求の数を制限するように構成されてもよく、要求が制限を超える場合、システムは要求をキューに入れ始めてもよい。キューが大きすぎる場合、システムはフェッチ要求を失敗する可能性がある。従って、URL書き換え規則154はまた、フェッチ量を最小化することができる。
いくつかの実施形態において、フェッチサーバ150は画像寸法テーブル156を含んでもよい。画像寸法テーブル156は、画像URLを画像のための既知のサイズと関連付けるキー値記憶装置であってもよい。既知のサイズは、画像がフェッチされたときに決定されてもよい。要求された画像のサイズを使用して、フェッチサーバ150は要求された画像と同じサイズを有するが、空のコンテンツであるか、コンテンツとして単純なタイルを有するモック画像を生成してもよい。モック画像は、要求された画像と同じサイズを有するが同じ画像データではない、有効な画像である。フェッチサーバ150はバッチレンダリングエンジンのためのコンテンツをフェッチするので、実際の画像はレンダリング結果にとって重要ではなくてもよいが、画像のサイズはレンダリングされたページのレイアウトに影響を及ぼし得る。実際の画像ではなくモック画像を使用することは、ファイルサイズが非常に小さくなり(例えば、画像あたり数十バイト)、これはモック画像を転送する際のネットワーク帯域幅、およびバッチレンダリングエンジンのためのプロセッサおよびメモリリソースを節約する。いくつかの実施形態において、画像寸法テーブル156は、SSTableなどのキー値記憶装置であってもよいが、寸法テーブル156は、画像識別子によってサイズを格納する任意のデータ構造体であってもよい。
システム100は埋め込みアイテムテーブル152を含んでもよい。埋め込みアイテムテーブル152h、URLによってキー付されてもよく、およびウェブ巡回エンジン130から返された埋め込みアイテムのためのフェッチされたコンテンツを格納してもよい。いくつかの実施形態において、埋め込みアイテムテーブル152は、クロール履歴も格納してもよい。例えば、いくつかの実施形態において、埋め込みアイテムテーブル152は、例えば7日間、2週間などの期間にわたってフェッチされたコンテンツを含んでもよい。埋め込みアイテムテーブル152は、クロール履歴に基づいて変更率を含んでもよい。いくつかの実施形態において、埋め込みアイテムテーブル152は、BigTable、関係型データベース、Hadoop Distributed Fileなどとして実装されてもよい。フェッチサーバ150は、以前にフェッチされた埋め込みアイテムのためのコンテンツを素早く返すために、埋め込みアイテムテーブル152を使用してもよい。フェッチサーバ150は、何千ものバッチレンダリングシステムに対する要求を処理することができるので、要求された埋め込みアイテムが前のフェッチ要求に応答して以前にフェッチされている可能性が高い。フェッチされたコンテンツが埋め込みアイテムテーブル152に位置するとき、ウェブ巡回エンジン130にコンテンツを提供するように求めるのではなく、フェッチサーバ150は埋め込みアイテムテーブル152のコンテンツを使用して要求に応答してもよい。これにより、フェッチされたコンテンツを格納するサーバ190の負担が軽減され、フェッチサーバ150が埋め込みアイテムのための要求により迅速に応答することを可能にする。フェッチサーバ150は、URL書き換え規則154を使用して、重複を排除するURLによってクロール要求をさらに減らすことができる。
レンダリングプロセスの任意の段階で、1つ又は複数の要求された埋め込みアイテムのコンテンツが埋め込みアイテムテーブル152に格納されていない、あるいは古い場合、フェッチサーバ150は、要求された埋め込みアイテムのクロールをスケジュールするためにウェブ巡回エンジン130に指示してもよい。一旦ウェブ巡回エンジン130がレンダリングされた埋め込みアイテムをクロールすると、フェッチサーバ150に通知する。フェッチサーバ150は、次いでフェッチされたコンテンツアイテムをクロール時間とともに埋め込みアイテムテーブル152に格納してもよい。埋め込みアイテムが画像である場合、フェッチサーバ150は、代わりに、または追加で、フェッチされた画像のサイズをクロール時間とともに画像寸法テーブル156に格納してもよい。フェッチサーバ150は、次いで要求されたコンテンツを、すなわち画像サイズを有するモック画像が送信されてもよい画像ファイルの代わりに、要求しているレンダリングエンジン142に送り返してもよい。
システム100は、レンダリングサーバ140を含む。レンダリングサーバ140は、1つまたは複数の機械実行可能な命令またはソフトウェアの一部、ファームウェア、あるいはそれらの組合せを実行するように構成された1つまたは複数のプロセッサを含むことができる。レンダリングサーバ140は、標準サーバ、そのようなサーバのグループ、クライアントサーバシステム、あるいはラックサーバシステムのようなコンピューティングデバイスであってもよい。いくつかの実施形態において、レンダリングサーバ140は、レンダリングサーバ140、フェッチサーバ150、またはインデックスエンジン110のようなシステム100の別のコンポーネントと、メモリまたはハードウェアプロセッサのようなコンポーネントを共有してもよい。レンダリングサーバ140は、特定のウェブページをレンダリングするために、インデックスエンジン110または別の要求プロセスから要求を受信する。言い換えると、レンダリングサーバ140は、要求されたウェブページのURLを受信してもよい。レンダリングサーバ140は、1つ又は複数のレンダリングエンジン142を含んでもよい。いくつかの実施形態において、レンダリングサーバ140は、数万のレンダリングエンジン142を含み、およびウェブページをレンダリングするレンダリングエンジン142を選択するためにロードバランシングを実行してもよい。一旦レンダリングエンジン142が選択されると、レンダリングエンジン142は、レンダリング結果のためにウェブページをレンダリングしようとする。ウェブページは、通常は追加の埋め込みアイテムを含むので、埋め込むウェブページと呼ばれてもよい。
各レンダリングエンジン142は、パーソナルウェブブラウザ用のレンダラをエミュレートするように構成されるが、バッチレンダリングのための最適化を伴う。従って、レンダリングエンジン142が埋め込むウェブページを受信したあと、レンダリングエンジン142がレンダリング結果を生成するために行う作業を表すタスクをタスクリストに投入し始めてもよい。多くのタスクがすぐに実行されるようにスケジュールされていてもよいが、いくつかのタスクは将来スケジュールされてもよい。レンダリングエンジン142のバッチ最適化の一つは、仮想時計を使用し、レンダリングが特定の時間に完了したことを示すタスクリストにタスクを追加することである。例えば、いくつかの実施形態において、タスクは、レンダリングが現在の時間+20秒で完了することを示してもよい。所定の時間は、多数のウェブページ設計者が完全に見えるようにウェブページを設計する時間に基づいてもよく、例えば、任意のアニメーションあるいはレイアウト変更が所定の時間内に終わるように設計される。ほとんどのユーザは、ページが読み込まれるまで非常に長く待つことを快く思わないので、所定の時間は5から20秒の間であってもよいが、状況によってはそれより長くなる可能性がある。レンダリングエンジン142は、仮想時計を使用するために20秒全部かかることはなく、および埋め込みアイテムがクロールされていない場合(例えば、フェッチサーバ150が埋め込みアイテムテーブル152のコンテンツを示すことができる)、しばしばフルレンダリングが数秒で発生する可能性がある。従って、最終的なレンダリング結果を生成するタスクは、現在の時間から20秒の開始時刻でタスクリストに追加されてもよい。現在の時間は、仮想時計の初期化時間に基づいており、これはゼロまたは実際の時計の現在の時間とすることができる。
レンダリングプロセスの一部、例えば、レンダリングタスクの一つとして、レンダリングエンジン142は、埋め込むウェブページが、スタイルシート、画像ファイル、Java Scriptなどの任意の埋め込みアイテムを含むか否かを決定してもよい。これらの埋め込みアイテムは、プライマリ埋め込みオブジェクトと呼ばれる。ウェブページが任意の埋め込みオブジェクトを含まない場合、レンダリングエンジンは、ウェブページをレンダリング結果に即座に処理することができ、およびレンダリング結果をレンダリング結果データストア148に格納してもよい。しかし、ウェブページが埋め込みアイテムを含む場合、レンダリングエンジン142は、埋め込みアイテムをすべて抜き出し、埋め込みアイテムのコンテンツのために要求をフェッチサーバ150に送信してもよい。要求された埋め込みアイテムは、それぞれのURLによって各々表される。レンダリングエンジン142は、しかしながら、フェッチされたリソースを待つ間、レンダリングを停止するか、タイムアウトすることはない。むしろ、レンダリングエンジン142は仮想時計を使用するので、以下でより詳細に説明するように、ウェブ巡回エンジン130を介してフェッチされるリソースを待つことは、時計を進めず、レンダリングエンジンはタイムアウトしない。
要求された埋め込みアイテムのためのコンテンツが受信されたとき、レンダリングエンジン142は、コンテンツを処理するためにタスクリストにタスクを追加してもよい。コンテンツ処理の一部は、要求された埋め込みオブジェクト(すなわち、プライマリ埋め込みオブジェクト)自身が埋め込みオブジェクト(すなわち、セカンダリ埋め込みオブジェクト)を有するか否かを見つけることを含んでもよい。プライマリ埋め込みオブジェクトがセカンダリ埋め込みオブジェクトを含まない場合、レンダリングエンジン142は、画像のプロパティを変更するレンダリングタスク(例えば、JavaScriptコードを実行する)に取り組むことを続けることができる。しかし、プライマリ埋め込みオブジェクトが1つ又は複数のセカンダリ埋め込みオブジェクトを含む場合、レンダリングエンジン142は、フェッチサーバ150からセカンダリ埋め込みオブジェクトを要求する。埋め込みオブジェクトを発見し要求するこのプロセスは、レンダリングエンジンが、レンダリングされるウェブページに埋め込まれた全てのオブジェクト(例えば、プライマリ、セカンダリ、第3の、など)を発見し、要求し、および受信するまで、繰り返される。
各埋め込みアイテム要求は、フェッチサーバ150が一旦その時間のコンテンツを返すと削除されるタスクリスト内のタスクであってもよい。コンテンツが返されるとき、レンダリングエンジン142は、コンテンツを処理するためのタスクを追加してもよく、これは、画像の不透明度の変更、スクリプトの実行など、追加のタスクを順に追加してもよい。各タスクは、ランタイムに関連付けられてもよい。いくつかのタスクは、将来のランタイムを有してもよい。例えば、イメージをフェードイン(またはアウト)するために、ブラウザはタスクリストにいくつかのタスクを追加してもよく、時間のインターバルにわたって画像の不透明度をそれぞれ変更する。以下でより詳細に説明するように、レンダリングエンジン142は、タスクが実行準備が整った時点を決定するために、タスクリストに関してリアルタイムではなく仮想時計を使用してもよい。
レンダリングエンジン142は、レンダリングが完了するまで、例えば、レンダリング結果が生成されるまで、タスクリストのタスクをレンダリングするプロセスに取り組む。次いでレンダリングエンジン142は、レンダリング結果をレンダリング結果データストア148に格納し、及び/又はレンダリング結果をレンダリングプロセス(例えば、インデックスエンジン110)に提供してもよい。インデックスエンジン110のようなレンダリングプロセスは、次いでウェブページを処理する際にレンダリング結果から抽出された情報を使用してもよい。例えば、要求プロセスは、JavaScriptエラー、レイアウト情報、スタイル情報、広告スペース情報、フェッチされたリソースのリスト、性能統計等を使用してもよく、そのすべてはレンダリング結果に含まれるが、要求プロセスにとってはそれ以外使用できない。
システム100は、ネットワーク170を介してクライアント180およびサーバ190と通信してもよい。ネットワーク170は、例えばインターネット、または有線あるいは無線ローカルエリアネットワーク(LAN)であってもよいネットワーク170、ワイドエリアネットワーク(WAN)、これらの組合せであってもよく、例えばゲートウェイデバイス、ブリッジ、スイッチ、あるいは同様のものを使用して実装されてもよい。ネットワーク170を介して、クエリエンジン、ウェブ巡回エンジン130及び/又はフェッチサーバ150は、クライアント180及び/又はサーバ190と通信し、かつデータを送受信してもよい。
システム100は、簡潔にするために図示されていない他のコンポーネントを含んでもよい。例えば、インデックスエンジン110、クエリエンジン120、ウェブ巡回エンジン130、レンダリングサーバ140、およびフェッチサーバ150のうちの1つまたは複数は、1つまたは複数のコンピューティングデバイスにわたって分散されてもよい。同様に、インデックス115、レンダリング結果データストア148、埋め込みアイテムテーブル152、および画像寸法テーブル156は、複数のコンピューティングデバイスにわたって格納されてもよい。いくつかの実施形態において、システム100の様々なコンポーネントは、コンピューティングデバイスのハードウェアコンポーネントを共有してもよく、あるいは同じコンピューティングデバイスの論理パーティションであってもよい。
図2は、埋め込みオブジェクトを有するウェブページのブロック図である。図に示すように、ウェブページ200は、複数の埋め込みアイテムを含むことができる。これらの埋め込みオブジェクトは、他のウェブページ210、スタイルシート220、画像ファイル230、いわゆるキャッシュバスティングURL240、およびJavaScriptコード250を含むことができるが、これらに限定されない。追加された、埋め込みオブジェクトの異なるタイプはもちろん可能である。さらに、ウェブページ200に埋め込まれたそれぞれのオブジェクトは、他のオブジェクトを埋め込んでもよい。例えば、ウェブページ200に埋め込まれたウェブページ210は、他のウェブページ、画像ファイル、スタイルシートなどを埋め込んでもよい。同様に、ウェブページ200に埋め込まれたスタイルシート220は、背景画像ファイルのような他のオブジェクトを埋め込んでもよい。さらに、ウェブページ210またはスタイルシート220に埋め込まれたオブジェクトのそれぞれは、さらにオブジェクトを埋め込んでもよい。このようなウェブページを画像ファイルに完全にレンダリングするために、バッチレンダリングエンジンは、埋め込みオブジェクト210−250(プライマリ埋め込みオブジェクト)のそれぞれを要求し、埋め込みオブジェクト210−250に埋め込まれたすべてのオブジェクト(セカンダリ埋め込みオブジェクト)、および埋め込みオブジェクト210−250に埋め込まれたオブジェクトに埋め込まれたすべてのオブジェクト(第3埋め込みオブジェクト)およびその他を要求しなければならない。
上述したように、個々のユーザのウェブブラウザはこれらの埋め込みオブジェクトの全てを効率的に要求し、および完全にレンダリングするためにそれらを使用し、およびリアルタイムでウェブページ200を表示することができるが、バッチレンダリングエンジンは、重複あるいは不要なコンテンツをフェッチしないように、埋め込みオブジェクトのコンテンツを待ってタイムアウトしないように、およびタスクの内部タイミングに関係なく、できるだけ早くレンダリングが完了するように、最適化されることができる。したがって、多数のクロールされたウェブページを効率的にレンダリングするために、図1に開示されたようなシステムが使用されることができる。
図3は、一実施形態に従った、バッチレンダリングエンジン142のいくつかのコンポーネントのブロック図である。バッチレンダリングエンジンは、図3に示されていない追加のコンポーネントを含んでもよい。バッチレンダリングシステム142は、ページタスクリスト305、仮想時計310、およびレンダリング結果315を含む。仮想時計310は、ウェブページをロードするためにタイムラインを歪ませ、フェッチされたリソースを待つことによって発生する可能性がある多数のエラーを回避するために使用されてもよい。仮想時計310は、レンダリングプロセスの開始時間にゼロまたは現在のクロック時間に初期化されてもよく、およびレンダリングエンジンが埋め込みアイテムのフェッチを待っていないときおよびページタスクリスト305に現時点で実行の準備ができているタスクがあるときのみ進んでもよい。仮想クロックが進められたとき、レンダリングエンジン142はページタスクリスト305に基づいて仮想時計310を進める。言い換えると、レンダリングエンジン142は、仮想時計310を次に発生するタスクによって表される時間に進める。この意味において、埋め込みアイテムをフェッチしてJava Scriptを実行することは仮想時間がかからず、ライブ(または個人)ブラウザによって発生したエラーのクラス全体を回避することができる。さらに、レンダリングプロセスは、タスクリストで指定された時間よりもずっと早くリアルタイムで終了してもよい。たとえば、”最終レンダリングを生成する”タスクは、20秒で発生するように設定されているが、仮想時計は通常は、ページタスクリスト305のタスクを実際に完了するのにかかる時間に応じて、実際の数秒で20秒進む。ページタスクリスト305の”最終レンダリングを生成する”タスクは、レンダリングが完了したとき、バッチレンダリングエンジン142に伝える停止タスクの一例である。
レンダリングエンジン142は、埋め込むウェブページのレンダリング結果315をレンダリングしてもよい。レンダリング結果315は、様々なコンポーネントを含んでもよい。たとえば、レンダリング結果315は、レンダリングされたページの画像316を含むことができる。画像316は、ライブ(または個人)ウェブブラウザのユーザに表示される画像であってもよく、たとえばレンダリングされたページのサムネイルをユーザに表示するために使用されることができる。レンダリング結果315は、ドキュメント・オブジェクト・モデル(Document Object Model、DOM)ツリー317も含むことができる。DOMツリー317は、ウェブページのHTML構造を表す。たとえば、システムは、DOMツリーを処理することによって、トークンまたはユーザに見えるドキュメントのテキストを決定してもよい。レンダリング結果315は、レイアウト318を含んでもよい。レイアウト318は、ウェブページの各要素に対するボックスを含み、ボックスは画像316の要素の座標を決定する。たとえば、レイアウトは、DOMツリーのDOMノードのボックス表現を含むことができる(すべてのDOM要素が対応するレンダリングボックスを有するわけではない)。ボックスは、レンダリングツリーと呼ばれるツリー構造で編成されることができる。したがって、たとえば、テーブルは、レイアウトのボックスによって表されてもよく、パラグラフはレイアウトの別のボックスによって表されてもよい。したがって、レイアウト318は、ウェブページ上のどこに要素が発生するか、ウェブページ上でどれくらいのスペースを要するのか、などの指示を提供する。したがって、レイアウト318は、ウェブページ上のどれだけが広告であるか、パラグラフがどれくらい目立つか(たとえば、アバブ・ザ・フォールド(above-the-fold)またはビロウ・ザ・フォールド(below-the-fold))、要素が見えるか否かなどの情報を提供する。したがって、レイアウト318は、ウェブページの要素についての幾何学的情報を提供する。レンダリング結果315は、エラー320を含んでもよい。エラー320は、たとえばJava Scriptなどのスクリプトの実行結果として引き起こされるエラーを含む。レンダリング結果315は、レンダリングの間にフェッチされた埋め込みリソース319のリストを含んでもよく、レンダリングプロセスの一部として生成された別の要素を含むことができる。したがって、レンダリング結果315は、ホスティングサーバからのコンテンツのフェッチを介してだけ、要求プロセスに利用可能でない情報を提供する。たとえばインデックスエンジンは、インデックスの要素をランク付けし、目に見えない要素を断片の一部として提供し、および動的に生成されたコンテンツにインデックス付けするためにレンダリング結果情報を使用することができる。動的に生成されたコンテンツは、ウェブページをレンダリングしたあとに存在するコンテンツであり、クロールされたコンテンツには存在しない。
図4は、実施形態に従った、バッチレンダリングエンジンが、埋め込みオブジェクトを備えたウェブページをレンダリングすることができるプロセス例400を図示する流れ図である。プロセス400は、図1のシステム100のようなシステムによって実行されてもよい。広告システム、またはインターネットインデックスシステムのようなシステムは、ダウンストリームプロセスの要求でバッチモードのウェブページのレンダリング結果を生成するために、プロセス400を使用してもよい。いくつかの実施形態において、プロセス400は、レンダリングサーバのバッチレンダリングエンジンによって実行されてもよく、および要求プロセスからの要求に応答して開始されてもよい。
プロセス400は、ウェブページをレンダリングする要求を受信することから開始してもよい(405)。いくつかの実施形態において、要求は、要求されたウェブページのURLおよび/またはフェッチされたコンテンツと、関連するメタデータ(たとえばクロール時間)とを含んでもよい。いくつかの実施形態において、ウェブページのコンテンツを受信するのではなく、バッチレンダリングエンジンは、ウェブページのコンテンツがデータベースで利用可能であるという通知を受信し、データベースからコンテンツおよび関連するメタデータ(たとえば、クロール時間)を取り出すことができる。フェッチされたコンテンツは、たとえば、要求されたプロセスがすでにコンテンツをフェッチしているという理由で提供されてもよい。バッチレンダリングエンジンは、仮想時計を初期化し、タスクリストに停止タスクを追加することによって開始してもよい(410)。たとえば、バッチレンダリングエンジンは、仮想時計をゼロに設定し、レンダリングエンジンが所定の時間で完了したとレンダリングエンジンに判断させる停止タスクをタスクリストに追加してもよい。この停止タスクに関連付けられたランタイムは、個々のユーザのマシンでほとんどのウェブページが読み込みを完了までの時間であってもよい。たとえば、時間は15または20秒であってもよい。レンダリング開始の一部として、バッチレンダリングエンジンは、ウェブページのコンテンツをフェッチする(コンテンツが提供されなかった場合)、およびウェブページのコンテンツを処理する、などの他のタスクをタスクリストに追加してもよい。これらのタスクは、仮想時間ゼロで追加されてもよく、したがって、たとえばすぐに開始することができる。
次いでバッチレンダリングエンジンは、タスクリスト内のタスクに取り掛かることを開始してもよい(415)。たとえば、ウェブページのコンテンツの処理の一部として、バッチレンダリングエンジンは、1つまたは複数の埋め込みアイテムを識別してもよい(420)。次いでバッチレンダリングエンジンは、フェッチサーバから埋め込みアイテムのコンテンツを要求してもよい(425)。フェッチサーバは、図1のフェッチサーバ150であってもよい。いくつかの実施形態において、バッチレンダリングエンジンは、識別された埋め込みアイテムおよびフェッチサーバがそれぞれの埋め込みアイテムのためのコンテンツを返したか否かを追跡してもよい。いくつかの実施形態において、この埋め込みアイテムのリストは、ウェブページのレンダリング結果に含まれてもよい。バッチレンダリングエンジンが埋め込みアイテムを要求したあと、バッチレンダリングエンジンは、フェッチサーバがコンテンツを返すのを待つ間に実行する準備ができている別のタスク(415)上で作業を継続してもよい。現在の仮想時間に実行する準備ができているタスクがない場合、さもなければバッチレンダリングエンジンがフェッチサーバからの応答を待ってもよい。フェッチが未処理であるが、バッチレンダリングエンジンは仮想時計を進めないので、したがってバッチレンダリングエンジンはフェッチを待つのでタイムアウトしない。
フェッチサーバからの応答を受信したとき、バッチレンダリングエンジンは、埋め込みアイテムのコンテンツを処理する(430)。たとえば、コンテンツの受信に応答して、バッチレンダリングエンジンは、埋め込みアイテムの受信したコンテンツを解析するなどのタスクをタスクリストに追加してもよい。これらのタスクは、現在の仮想時計の開始時間を与えられてもよく、これはタスクが実行準備ができていることを示す(たとえば、仮想時計上の現在の時間)。受信したコンテンツを解析し、最初に要求されたウェブページのためあるいは埋め込みアイテムのためであるかにかかわらず、バッチレンダリングプロセスが追加のタスクをタスクリストに追加してもよい。たとえば、埋め込みアイテムのコンテンツを解析することは、追加の埋め込みアイテム(たとえば、セカンダリ埋め込みアイテム)を検出してもよく、これはバッチレンダリングエンジンに埋め込みアイテムを要求させ、および返されたときにコンテンツを解析させてもよい。コンテンツがたとえばJavaScriptなどのスクリプトを含む場合、スクリプトを実行することは、追加のタスクにレイアウトの生成やウェブページの1つまたは複数の要素の概観の変更などの追加のタスクを実行させてもよい。これらのタスクのいくつかは、将来開始することがスケジュールされてもよい。たとえば、画像の不透明度を一定の間隔で変更すると、画像がフェードインしているかのようにユーザに表示される。不透明度の各変化はタスクであり、スクリプトはタスクリストに、いくつかのそのようなタスクを追加させ、それぞれ現在の仮想時計のランタイムに指定された量を加えたものとなる。
レンダリングプロセスの一部として、バッチレンダリングエンジンは、レンダリングが完了したか否かを判断してもよい(435)。この判断は、例えば、バッチレンダリングエンジンがタスクを完了する度に、あるいは所定の時間の間隔などで行われてもよい。仮想時計が停止タスクで指定された時間に達すると、レンダリングは終了してもよい。埋め込みアイテムのフェッチが未処理である間、仮想時計が進まないので、仮想時計が停止タスクで指定された時間に達したとき、バッチレンダリングエンジンは各フェッチリクエストの要求を受信することが保証される。したがって、バッチレンダリングエンジンは、リソースの待機をタイムアウトすることはない。
レンダリングが完了していない場合(435、いいえ)、バッチレンダリングエンジンは、タスクリスト内のタスクに取り掛かることを継続し、1つまたは複数の埋め込みアイテムの要求に対する応答などを待ってもよい。レンダ理暗愚が完了した場合(435、はい)バッチレンダリングエンジンは、要求されたウェブページのためのレンダリング結果をファイナライズし(440)、レンダリング結果を要求プロセスに返してもよい。レンダリング結果の要素は、バッチレンダリングエンジンによって完了されたタスクの結果として以前に生成されたものでもよい。たとえば、スクリプトの実行中にフェッチされた埋め込みアイテムのリストおよび遭遇したエラーがレンダリングが完了する前に生成されてもよい。レイアウトを決定するなどの別の要素がレンダリングが完了したあとに発生してもよい。いくつかの実施形態において、レンダリングプロセスの一部として実行されるスクリプトが要素の位置を要求しない限り、バッチレンダリングエンジンは、レンダリングが終了するまでレイアウトを決定しない。レンダリングが完了する前にレイアウトが生成されたとしても、バッチレンダリングエンジンは、レンダリング結果のファイナライズの一部としてレイアウトを最終的に生成してもよい。したがって、レンダリング結果をファイナライズすることは、新しい要素を生成することおよびすでに生成された要素を集めることを含んでもよい。いくつかの実施形態において、バッチレンダリングエンジンは、レンダリング結果をメモリに格納し、レンダリング結果の位置を要求プロセスに提供してもよい。いくつかの実施形態において、システムは、いつ生成されたかを示すタイムスタンプとともにレンダリング結果を格納してもよく、レンダリング結果の2つ以上のバージョンを格納してもよい。バッチ処理の最適化とともにバッチモードでレンダリング結果を生成し、次いでプロセス400は終了する。
図5は、一実施形態に従った、バッチレンダリングエンジンが仮想時計を進めるプロセス例500を示す流れ図である。プロセス500は、レンダリングが終了したか否かを判断すうr一部として実行されてもよいが(例えば、図4のステップ435)、他の時間に(例えば、定期的に)実行されてもよい。プロセス500は、バッチレンダリングエンジンが埋め込みアイテムの要求を待っているか否かを判断することから開始してもよい(505)。例えば、バッチレンダリングエンジンがフェッチサーバから埋め込みアイテムを要求し、フェッチサーバからまだ応答を受信していない場合、バッチレンダリングエンジンは待機中である。バッチレンダリングエンジンが待機中である場合(505、はい)、仮想時計は進められず、バッチレンダリングエンジンは、存在するならば現在の仮想時間で実行する準備ができているタスクに取り組んでもよく、あるいは待機してもよい(510)。このステップは、図4のステップ415の一部として実行されてもよい。バッチレンダリングエンジンがフェッチ要求を待っていない場合(505、いいえ)、バッチレンダリングエンジンは、タスクリスト内に実行準備ができているタスクが存在するか否かを判断してもよい(515)。たとえば、タスクリスト内のタスクが仮想時計と等しいランタイムを有する場合、タスクは実行準備ができている。タスクが実行準備ができている場合(515、はい)、バッチレンダリングエンジンはタスクに取り組んでもよい(520)。タスクに取り組むことは、タスクリストに別のタスクを追加してもよく、そのうちのいくつかは実行準備ができていてもよく、そのうちの他のものは将来のランタイムを有していてもよい(例えば、現在の仮想時間プラス所定の時間)。このステップは、図4のステップ415の一部として実行されてもよい。実行準備が整っている保留中のタスクが存在しない場合(515、いいえ)、バッチレンダリングエンジンは仮想時計をタスクリストで指定された次のランタイムに進めてもよい。言い換えると、バッチレンダリングエンジンは、仮想時計を先に歪めてもよく、そうすることによってタスクリスト内のラインの次のタスクはすぐに実行できる。
タスクリスト内のラインの次のタスクが停止タスクである場合(530、はい)、レンダリングは完了する。そうでなければ、バッチレンダリングエンジンは、保留中のタスクに取り組むことを継続してもよい(520)。プロセス500は、実行準備ができている保留中のタスクがある間、あるいは埋め込みアイテムのフェッチを待機している間に、仮想時計がどのように進まないかを示す。したがって、これらのイベントに対して仮想時計が“停止して”おり、レンダリングエンジンが実際のクロックを使用するときに遭遇したエラーのクラスを避けることができる。さらに、プロセス500は、仮想時計がどのように前に歪ませられることができるかを示し、そうすることによっていくつかの例において、レンダリングプロセスは、タスクによって指示されたタイミング(例えば、画像のフェードインするまたはアニメーションの再生をする時間間隔を待機する)よりも実時間をかけないことができる。これは、本明細書でより詳細に説明するように、埋め込みアイテムがクロールなしで返されるときに特に当てはまる。もちろん、保留中のタスクのチェック(515)およびフェッチ要求(505)の順序を逆にすることもでき、および実施形態は、図5に示された順序に限定されないことが理解される。
図6は、実施形態に従った、フェッチサーバが埋め込みアイテムのコンテンツをバッチレンダリングエンジンに提供するプロセス例を図示する流れ図である。プロセス600は、図1のシステム100のようなシステムによって実行されてもよい。システムは、複数のバッチレンダリングシステムから、埋め込みアイテムのためのフェッチリソースに対応するプロセス600を使用してもよい。いくつかの実施形態において、プロセス600は、フェッチサーバによって実行されてもよく、およびバッチレンダリングエンジンの1つからの要求に応答して開始されてもよい。
プロセス600は、埋め込みアイテム(605)のためのURLをフェッチサーバが受信することから開始してもよい。ULRは、バッチレンダリングエンジンによって提供されてもよく、およびバッチレンダリングエンジンによって要求された複数のURLの1つであってもよい。フェッチサーバは、要求された埋め込みアイテム(610)のURLに書き換え規則を適用してもよい。書き換え規則は、図1のURL書き換え規則154であってもよい。書き換え規則は、テンプレートおよびリダイレクトURLを含んでもよい。書き換え規則を適用することは、URLが書き換え規則の一つのためのパターンまたはテンプレートに一致するか否かを判断することを含んでもよい。例えば、テンプレートは、任意のクエリ文字列が削除されたURLであってもよく、およびシステムはテンプレートに一致するかを調べるために要求された埋め込みアイテムのURLからクエリ文字列を削除してもよい。別の例として、テンプレートは、任意の文字または文字列がワイルドカード文字と一致することができる場所を示す、*および?のようなワイルドカード文字を含んでもよい。
URLがパターンと一致した場合、書き換え規則は、リダイレクトURLを提供してもよく、およびフェッチサーバは、リダイレクトURLを備えた要求された埋め込みアイテムのURLを代用してもよい。書き換え規則を適用するための理由の一つは、フェッチサーバが、URLを識別し、および同じコンテンツを返すURLを識別し、不要なフェッチをスケジュールする必要がないようにするためにリダイレクトURLを使用できるようにするためである。一般的に埋め込まれたアイテムの特定のタイプは、動的に生成されたURLを有する。例えば、いくつかの埋め込みアイテムのURLは、乱数発生器によって生成される乱数、または日付と時刻関数によって返される現在の日付と時間に依存する。キャッシュバスティング(cache-busting)トラッキングURLと呼ばれるこれらの埋め込みオブジェクトは、一般的に、広告費用または収益を測定する目的で、ウェブページの固有のヒット数またはビュー数を測定するために使用される。このような埋め込みオブジェクトのコンテンツは、通常は同一であるが、固有のURLは、レンダリングエンジンによって検出される度にそのオブジェクトに対して生成される。したがって、そのような埋め込みアイテムを含むウェブページのために、レンダリングエンジンは、ウェブページのレンダリングを試みる度にオブジェクトのための新しく異なるURLを見て、書き換え規則を適用することなく、フェッチサーバは同じコンテンツを何度もフェッチする。これを避けるために、書き換え規則は、フェッチサーバにこれらのURLを識別させ、フェッチ要求をリダイレクトURLの下に格納された以前に取得されたコンテンツにリダイレクトするためのテンプレートを適用してもよい。
書き換え規則を適用するもう一つの理由は、ブラックリストに載っているURLを識別するためである。書き換え規則は、ブラックリストに載っているURLを識別する規則、あるいはブラックリストに載っているURLのためのパターンあるいはテンプレートを含んでもよい。例えば、書き換え規則は、テンプレート、および関連したリダイレクトURL、エラー、あるいはフラグを含んでもよい。要求された埋め込みアイテムのためのURLがブラックリストに載っているURLあるいはブラックリストに載っているURLのためのテンプレートと一致した場合、フェッチサーバは、URLをブラックリストに載っているものとして識別してもよい。いくつかの実施形態において、書き換え規則を適用することは、URLがリダイレクトURLに置き換えられる要因となってもよい。いくつかの実施形態において、書き換え規則を適用することは、URLがブラックリストに載っているものとしてフラグを立ててもよく、あるいはURLによって識別された埋め込みアイテムのための要求に対する応答として返すためにエラーを提供してもよい。
URLがブラックリストに載っている場合(615、はい)、フェッチサーバは要求しているバッチレンダリングエンジン(620)にエラーを返してもよい。エラーは、リソースが見つからなかったことを示す標準的なエラー、あるいはリソースが必要ではない、またはスキップができることなどをレンダリングエンジンに知らせる特定のエラーであってもよい。エラーは、書き換え規則がリダイレクトURLを提供したとき、埋め込みアイテムテーブルから、書き換え規則、ハードコードなどのフラグに基づいて選択された一致させている書き換え規則によって、埋め込みアイテムテーブルから提供されてもよい。次いでこのURLのためのフェッチ要求が完了し、プロセス600は終了する。
URLがブラックリストに載っていない場合(615、いいえ)、フェッチサーバは、埋め込みアイテムデータストア(625)内の書き換えられたURLを探してもよい。埋め込みアイテムデータストアは、図1の埋め込みアイテムテーブル152であってもよい。オリジナルURLが書き換え規則の識別されたパターンと一致した場合、書き換えられたURLは、書き換え規則によって提供されたリダイレクトURLであってもよい。URLが書き換え規則の任意のテンプレートと一致しない場合、書き換えられたURLは、オリジナルURLであってもよい。URLが埋め込みアイテムデータストア(625、はい)内にある場合、フェッチサーバは、要求されたURLが画像用であるか否かを任意に決定してもよい(630)。これは任意であり、画像のためのテストをしない実施形態において、ステップ630は省略されてもよい。要求された埋め込みアイテムが画像であるか否かは、要求の情報、URL自体に基づいて、あるいは書き換えられたURLのための埋め込みアイテムデータストア内のフィールドに基づいて、決定されてもよい。埋め込みアイテムが画像である場合(630、はい)、図7のプロセス700に関してより詳細に説明されるように、システムは、画像のサイズについてサイズテーブル内を調べ、およびサイズを有するモック画像を返してもよい。いくつかの実施形態において、フェッチサーバは、埋め込みアイテムデータストアを前に、またはエントリが古いかどうかを判定した後に、書き換え規則を適用する前にステップ630を実行してもよいことが理解される。
要求された埋め込みアイテムが画像でない場合(630、いいえ)、フェッチサーバは、埋め込みアイテムテーブル内のエントリが古いか否かを判断してもよい(645)。エントリが古いか否かは、アイテムの変更率、埋め込みアイテムのタイプ(例えば、スクリプト、スタイルシート、画像など)、ブラウザレンダリングエンジンがレンダリングしているウェブページの重要度、などのいくつかの要因に依存してもよい。いくつかの実施形態において、埋め込みアイテムテーブルは、例えばブラックリストに載っている埋め込みアイテムのURLのリダイレクトURLのためのように、エントリが古くならないことを示すフィールドあるいは値を有してもよい。エントリが古くない場合(645、いいえ)、フェッチサーバは、書き換えられたURLについての埋め込みアイテムテーブルのコンテンツを、要求しているバッチレンダリングエンジン(650)に返してもよく、この埋め込みアイテムについてのプロセス600は終了する。いくつかの実施形態において、コンテンツを返すことは、フェッチサーバが埋め込みアイテムテーブル内のエントリの位置を応答として提供することと、バッチレンダリングプロセスが位置を使用してコンテンツにアクセスすることと、を含んでもよい。
埋め込みアイテムテーブル内のエントリが古い場合(645、はい)または書き換えられたURLが埋め込みアイテムデータストア内に無い場合(625、いいえ)、フェッチサーバは、例えば図1のウェブ巡回エンジン130のようなウェブ巡回からURLのフェッチを要求してもよい(635)。フェッチサーバがクロールコンテンツを受信するとき、通信あるいはさらなる処理をせずに、受信したコンテンツを埋め込みアイテムデータストアにエントリとして格納してもよい(640)。いくつかの実施形態において、フェッチサーバは、埋め込みアイテムの以前のクロールのコンテンツおよびクロール時間に上書きせずに、埋め込みアイテムのコンテンツおよびクロール時間を保存することができる。いくつかの実施形態において、フェッチサーバは、埋め込みアイテムテーブルに1つのエントリをキープしてもよく、および埋め込みアイテムの以前のクロールを維持しなくてもよい。いずれにせよ、埋め込みアイテムテーブル内に一旦保存されると、コンテンツはキャッシュされ、および古くなるまで再度フェッチされる必要はない。フェッチサーバは、フェッチされたコンテンツを要求しているバッチレンダリングエンジンに返してもよく(650)、プロセス600は終了する。
図7は、一実施形態に従った、フェッチサーバがモック画像をバッチレンダリングエンジンに提供するプロセス例700を図示する流れ図である。プロセス700は、図1のシステム100のようなシステムによって実行されてもよい。システムは、複数のバッチレンダリングエンジンからの、ウェブページに埋め込まれた画像のためのフェッチ要求に応答するために、プロセス700を使用してもよい。いくつかの実施形態において、プロセス700は、フェッチサーバによって実行されてもよく、およびバッチレンダリングエンジンの1つからの要求に応答して開始されてもよい。いくつかの実施形態において、フェッチサーバは、他の埋め込みアイテム(例えば、図6のプロセス600)とは無関係にプロセス700を実行してもよい。別の実施形態において、フェッチサーバは、プロセス700の要素を他の埋め込みアイテムを含むプロセス、例えば図6のプロセス600に組み込んでもよい。
プロセス700は、要求された画像がサイズテーブル(705)にエントリを有するか否かをフェッチサーバが判断することから開始してもよい。画像サイズテーブルは、図1の画像サイズテーブル156であってもよい。画像サイズテーブルは、画像のためのサイズを含み、これはURLのような画像のための識別子によって格納される。画像がサイズテーブルにない場合(705、いいえ)、あるいは画像がサイズテーブルにあるが(705、はい)古い(710、はい)場合、フェッチサーバは、例えば図1のウェブ巡回エンジン130のようなウェブ巡回エンジンを介して、画像のフェッチ(715)をスケジュールしてもよい。いくつかの実施形態において、フェッチサーバは、エントリが古いか否かを判断するためにサイズテーブルの情報を使用してもよい。いくつかの実施形態において、フェッチサーバは、サイズが古いか否かを判断するために、図6のステップ645に関して上述したように、別個の埋め込みアイテムテーブルからの情報を使用してもよい。したがって、いくつかの実施形態において、フェッチサーバは図6のステップ645と併せて、あるいはその一部としてステップ710を実行してもよい。画像のためのコンテンツが受信されたとき、フェッチサーバは、サイズテーブルに画像のためのエントリを追加してもよく、エントリはフェッチされた画像のサイズを含む(720)。いくつかの実施形態において、フェッチサーバは、図6のステップ640の一部として上述されたように、フェッチされたコンテンツを埋め込みアイテムテーブルに格納してもよい。
画像がサイズテーブルにあり(705、はい)、かつ古くない(710、いいえ)場合、あるいは画像がフェエッチされて格納された(720)後、システムはサイズテーブル(725)からサイズを使用してモック画像を生成してもよい。モック画像は、要求された画像と同じサイズであるが空のコンテンツを指定する画像ファイルフォーマットデータを有してもよい。システムは、モック画像(730)を要求バッチレンダリングエンジンに返し、プロセス700は終了する。
いくつかの実施形態において、プロセス700のステップのいくつかは、任意であるかまたは他の処理の一部として実行されてもよいことが理解される。例えば、画像のサイズが古いか否かを判断するステップは、図6のステップ645の一部として実行されてもよく、埋め込みアイテムテーブルの情報に基づいてもよい。さらに、ステップ715は、図6のステップ635の一部として、あるいはそれと併せて実行されてもよい。言い換えると、フェッチサーバは、画像のためのコンテンツをフェッチする、キャッシュされフェッチされたコンテンツが古いか否かを判断する、などのようなプロセス600の態様とプロセス700の態様を組み合わせてもよい。もちろん、フェッチサーバは、プロセス600と完全に独立したプロセス700を実行してもよい。したがって、実装はプロセス700の変形を含んでもよい。
図6は、汎用コンピュータデバイス800の例を示しており、それは、図1のシステム100、及び/又はクライアント170として動作し得、また、本明細書に記載される技法を用いて使用され得る。コンピューティングデバイス800は、コンピューティングデバイスの種々の形態例、例えば、ラップトップ、デスクトップ、ワークステーション、パーソナルデジタルアシスタント、携帯電話、スマートフォン、タブレット、サーバ、ならびにウェアラブルデバイスを含む他のコンピューティングデバイスなどを表わすことが意図される。本明細書に示される構成要素、それらのつながりや関係、およびそれらの機能は、単なる例であることを意味するものであり、この文書において記載される及び/又は請求される発明の実施形態を限定することを意味するものではない。
コンピューティングデバイス800は、インターフェース808経由で接続される、例えばシリコーンベースのハードウェアプロセッサ等のプロセッサ802、メモリ804、ストレージデバイス806、および拡張ポート810を含む。いくつかの実施形態において、コンピューティングデバイス800は、インターフェース808経由で接続される、いくつかある構成要素の中でも、送受信機846、通信インターフェース844、およびGPS(全地球測位システム)レシーバモジュー848を含み得る。デバイス800は、通信インターフェース844を通して無線で通信し得、それは、必要に応じて、デジタル信号処理回路を含み得る。構成要素802、804、806、808、810、840、844、846、および848のそれぞれは、必要に応じて、一般的なマザーボード上にまたは他の様式で搭載され得る。
プロセッサ802は、メモリ804内またはストレージデバイス806上に記憶された命令を含む、コンピューティングデバイス800内の実行のための命令を処理することができ、外部入出力デバイス、例えばディスプレイ816などの上にGUIのためのグラフィカル情報を表示する。ディスプレイ816は、モニタまたはフラットタッチスクリーンディスプレイであり得る。いくつかの実施形態において、複数のプロセッサ及び/又は複数のバスが、必要に応じて、複数のメモリや複数の種類のメモリと共に、使用され得る。また、複数のコンピューティングデバイス800は、(例えば、サーババンク、ブレードサーバのグループ、またはマルチプロセッサシステムとして)必要な動作の一部分を提供する各デバイスと、接続され得る。
メモリ804は、コンピューティングデバイス800内に情報を記憶する。一実施形態において、メモリ804は、揮発性メモリのユニットまたは複数ユニットである。別の実施形態において、メモリ804は、不揮発性メモリのユニットまたは複数ユニットである。メモリ804はまた、コンピュータで読み取り可能な媒体の別の形態、例えば磁気もしくは光学ディスクなどであり得る。いくつかの実施形態において、メモリ804は、拡張インターフェースを通して提供される拡張メモリを含み得る。
ストレージデバイス806は、コンピューティングデバイス800のためのマスストレージを提供することができる。一実施形態において、ストレージデバイス806は、コンピュータで読み取り可能な媒体、例えば、フロッピーディスクデバイス、ハードディスクデバイス、光学ディスクデバイス、またはテープデバイス、フラッシュメモリもしくは他の類似の固体メモリデバイス、あるいはストレージエリアネットワークもしくは他の構成におけるデバイスを含む、デバイスのアレイなどであり得るか、それらを含み得る。コンピュータプログラム製品は、そのようなコンピュータで読み取り可能な媒体に明白に具体化され得る。コンピュータプログラム製品はまた、実行されるときに、例えば上記したものなどの、1つ以上の方法を行う命令を含み得る。コンピュータまたはマシンで読み取り可能な媒体は、ストレージデバイス、例えばメモリ804、ストレージデバイス806、またはプロセッサ802上のメモリなどである。
インターフェース808は、コンピューティングデバイス800のための帯域消費型の動作を扱う高速コントローラ、またはより低い帯域消費型の動作を扱う低速コントローラ、あるいはそのようなコントローラの組み合わせであり得る。外部インターフェース840は、他のデバイスとのデバイス800の近接領域通信を可能にするように、提供され得る。いくつかの実施形態において、コントローラ808は、ストレージデバイス806および拡張ポート814に結合され得る。種々の通信ポート(例えば、USB、ブルートゥース(登録商標)、イーサネット(登録商標)、無線イーサネット(登録商標))を含み得る拡張ポートは、例えば、ネットワークアダプタを通して、1つ以上の入出力デバイス、例えば、キーボード、ポインティングデバイス、スキャナ、または例えばスイッチもしくはルータなどのネットワーキングデバイスに結合され得る。
コンピューティングデバイス800は、図面に示されるように、多くの異なる形態で実装され得る。例えば、それは、標準サーバ830として、またはそのようなサーバのグループにおいて複数回、実装され得る。それはまた、ラックサーバシステムの一部として実装され得る。加えて、それは、パーソナルコンピュータ、例えばラップトップコンピュータ832、デスクトップコンピュータ834、あるいはスマートフォン836などで実装され得る。システム全体は、互いに通信する複数のコンピューティングデバイス800で構成され得る。他の構成が可能である。
図9は、汎用コンピュータデバイス900の例を示しており、それは、図1のシステム100であり得るとともに本明細書に記載される技法を用いて使用され得る。コンピューティングデバイス900は、大規模データ処理デバイス、例えばサーバ、ブレードサーバ、データセンター、メインフレーム、および他の大規模コンピューティングデバイスなどの種々の形態例を表わすことが意図される。コンピューティングデバイス900は、場合によっては1つ以上の通信ネットワークによって相互接続されるネットワーク接続ストレージノードを含む、複数プロセッサを有する分散型システムであり得る。本明細書に示された構成要素、それらのつながりや関係、およびそれらの機能は、単なる例示であることを意味するものであり、この文書において記載されるか請求される発明の実施形態を限定することを意味するものではない。
分散型コンピューティングシステム900は、任意の数のコンピューティングデバイス980を含み得る。コンピューティングデバイス980は、ローカルもしくはワイドエリアネットワーク、専用光学リンク、モデム、ブリッジ、ルータ、スイッチ、有線もしくは無線ネットワーク等の上で通信する、サーバまたはラックサーバ、メインフレーム等を含み得る。
いくつかの実施形態において、各コンピューティングデバイスは、複数のラックを含み得る。例えば、コンピューティングデバイス980aは、複数のラック958a〜958nを含む。各ラックは、1以上のプロセッサ、例えばプロセッサ952a〜952nおよび962a〜962nなどを含み得る。プロセッサは、データプロセッサ、ネットワーク接続ストレージデバイス、および他のコンピュータ制御デバイスを含み得る。いくつかの実施形態において、1つのプロセッサは、マスタープロセッサとして動作し得、スケジューリングおよびデータ分散タスクを管理し得る。プロセッサは、1以上のラックスイッチ958を通して相互接続され得、1以上のラックが、スイッチ978を通して接続され得る。スイッチ978は、複数の接続されたコンピューティングデバイス900間の通信に対処し得る。
各ラックは、メモリ、例えばメモリ954やメモリ964など、およびストレージ、例えば956および966などを含み得る。ストレージ956および966は、マスストレージを提供し得、揮発性もしくは不揮発性ストレージ、例えばネットワーク接続ディスク、フロッピーディスク、ハードディスク、光学ディスク、テープ、フラッシュメモリもしくは他の類似の固体メモリデバイス、あるいはストレージエリアネットワークまたは他の構成におけるデバイスを含む、デバイスのアレイなどを含み得る。ストレージ956または966は、複数のプロセッサ、複数のラック、または複数のコンピューティングデバイス間で共有され得、1つ以上のプロセッサによって実行可能な命令を記憶するコンピュータで読み取り可能な媒体を含み得る。メモリ954および964は、例えば、揮発性メモリのユニットまたは複数ユニット、不揮発性メモリのユニットもしくは複数ユニット、及び/又はコンピュータで読み取り可能な媒体の他の形態、例えば、磁気もしくは光学ディスク、フラッシュメモリ、キャッシュ、ランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)、およびそれらの組み合わせなどを含み得る。メモリ、例えばメモリ954などはまた、プロセッサ952a〜952n間で共有され得る。索引などのデータ構造は、例えば、ストレージ956やメモリ954にわたって、記憶され得る。コンピューティングデバイス700は、図示されない他の構成要素、例えば、コントローラ、バス、入出力デバイス、通信モジュール等を含み得る。
システム100などのシステム全体は、互いと通信する複数のコンピュータデバイス900で構成され得る。例えば、デバイス980aは、デバイス980b、980c、および980dと通信し得、これらは、集合的にシステム100として知られ得る。別の例として、図1のシステム100は、1以上のコンピュータデバイス900を含み得る。コンピュータデバイスのうちのいくつかは、互いに地理的に近く位置し得、その他は、地理的に離れて位置し得る。コンピュータデバイス900のレイアウトは、単なる例であり、システムは、他のレイアウトまたは構成を取り得る。
さまざまな実施形態は、ストレージシステム、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスからデータや命令を受信するように、並びにそれらにデータや命令を送信するように、結合される、特殊目的もしくは一般の目的であり得る、回路基板に形成された少なくとも1つのプログラム可能なプロセッサを含むプログラム可能なシステム上で実行可能または解釈可能である1つ以上のコンピュータプログラムにおける実施形態を含むことができる。
これらのコンピュータプログラム(プログラム、ソフトウェア、ソフトウェアアプリケーション、またはコードとしても知られる)は、プログラム可能なプロセッサに対する機械語命令を含み、高レベル手続言語及び/又はオブジェクト指向プログラミング言語で、ならびに/あるいはアセンブリ/機械言語で実装することができる。本明細書で使用される場合、「機械可読媒体」「コンピュータ可読媒体」という用語は、機械語命令及び/又はデータをプログラム可能なプロセッサに提供するために使用される任意の非一時的コンピュータプログラム製品、装置、及び/又はデバイス(例えば、磁気ディスク、光ディスク、メモリ(読み取り専用メモリを含む)、プログラマブル論理デバイス(PLD))を指す。
本明細書で述べたシステムおよび技術は、バックエンドコンポーネント(例えば、データサーバとして)を含むコンピューティングシステム、またはミドルウェアコンポーネント(例えば、アプリケーションサーバ)を含むコンピューティングシステム、またはフロントエンドコンポーネント(例えば、ユーザが本明細書で述べたシステムおよび技術の実装と相互作用することができるグラフィカルユーザインタフェースまたはウェブブラウザを備えたクライアントコンピュータ)を含むコンピューティングシステム、またはこのようなバックエンド、ミドルウェア、またはフロントエンドコンポーネントの任意の組合せで、実装されることができる。前記システムのコンポーネントは、デジタルデータ通信(例えば通信ネットワーク)の任意の形式または媒体で接続されることができる。通信ネットワークの例としては、ローカルエリアネットワーク(”LAN”)、ワイドエリアネットワーク(”WAN”)、およびインターネットを含む。
コンピューティングシステムは、クライアントおよびサーバを含むことができる。クライアントおよびサーバは、通常、相互に離れており、および通常は、通信ネットワークを通じて相互作用する。クライアントとサーバの関係は、それぞれのコンピュータ上で動作し、互いにクライアント−サーバ関係を有するコンピュータプログラムの効力によって生じる。
多くの実施形態が説明されてきた。それにもかかわらず、本発明の精神および範囲から逸脱することなく、さまざまな変更がなされ得る。さらに、図に示された論理フローは、望ましい結果を達成するために、図示された特定の順序または連続する順序である必要はない。さらに、他のステップを設けても、または記載されたフローから複数のステップを除いてもよく、また、記載されたシステムに他の要素を追加してもよく、またはそこから除去してもよい。従って、他の実施形態は、添付の特許請求の範囲に含まれる。