[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

JP6568985B2 - バッチ最適化レンダリング及びフェッチアーキテクチャ - Google Patents

バッチ最適化レンダリング及びフェッチアーキテクチャ Download PDF

Info

Publication number
JP6568985B2
JP6568985B2 JP2018111739A JP2018111739A JP6568985B2 JP 6568985 B2 JP6568985 B2 JP 6568985B2 JP 2018111739 A JP2018111739 A JP 2018111739A JP 2018111739 A JP2018111739 A JP 2018111739A JP 6568985 B2 JP6568985 B2 JP 6568985B2
Authority
JP
Japan
Prior art keywords
task
rendering
content
embedded
web page
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
JP2018111739A
Other languages
English (en)
Other versions
JP2018160264A (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
Priority to JP2018111739A priority Critical patent/JP6568985B2/ja
Publication of JP2018160264A publication Critical patent/JP2018160264A/ja
Application granted granted Critical
Publication of JP6568985B2 publication Critical patent/JP6568985B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Transfer Between Computers (AREA)

Description

本発明は、バッチ最適化レンダリング及びフェッチアーキテクチャに関する。
ワールドワイドウェブは、情報が豊富である。今日では、1兆以上のユニークなウェブページがあると推定されている。これらのページの多くは、例えばNew York Timesのホームページなどに動的に作成され、レンダリングされたウェブページのコンテンツや外観に効果を与えることができる、画像やビデオのような埋め込みコンテンツへのリンクを有する。例えば、ブラウザがJavaScript(登録商標、以下同じ)コードのようなスクリプトを実行するとき、これはブラウザがウェブページのレンダリングを完了した後に、ウェブページがユーザに対してどのように見えるかに影響を与え、ページのコンテンツ及び/又は外観を変更することができる。別の例として、いくつかのウェブページは、テキストの見た目を変える方法をブラウザに指示するスタイルシートを使用する。典型的なウェブページは、そのような追加の埋め込みアイテムのハンドラを有することができ、そのいくつかはブラウザレンダリングエンジンのために特別に設計されるか、あるいはブラウザレンダリングエンジンに向けられている。レンダリングプロセスによって生成された追加の情報は、インターネット検索エンジンのような、ダウンストリームシステムに役立つことができる。単一のユーザのウェブブラウザのために、リアルタイムで単一のウェブページをレンダリングすることは比較的容易であるが、ましてやワールドワイドウェブ上の全てのページ(1兆ページ)のように多数のページをレンダリングすること、あるいはワールドワイドウェブ(100億ページ)上の上位1%だけをリアルタイムでレンダリングすることは難しい。
実施形態は、ウェブページインデックスシステムのような、ダウンストリームユーザのためのウェブページのバッチレンダリングのために最適化されたレンダリングサーバおよびフェッチサーバを含む。ダウンストリームユーザは、1つまたは複数の埋め込みアイテムを有するウェブページ(例えば、そのURLを使用して)を識別するとき、ダウンストリームユーザはレンダリングサーバがレンダリング結果を生成するためにURLをレンダリングすることを要求してもよい。レンダリングサーバは、多数の(例えば、何万もの)レンダリングエンジンを含むことができる。各レンダリングエンジンは、多くのレンダリングエラーを排除するバッチレンダリングのために最適化されたブラウザカーネルをシミュレートする。レンダリングの間、レンダリングエンジンは埋め込みアイテムを発見すると、レンダリングエンジンはフェッチサーバから埋め込みアイテムを要求する。フェッチサーバは、各埋め込みアイテム(例えば、そのURL)のための識別子と、ウェブクローラ(web-crawler)によって検索されたアイテムのためのコンテンツとによって適合された埋め込みアイテムのデータストアを含む。埋め込みアイテムのためのデータストアを探す前に、フェッチサーバは書き換え規則を使用してURLを書き換えてもよい。URのためのコンテンツが別の埋め込みアイテム(例えば、リダイレクトURLによって表される)と重複しているとき、書き換え規則は、URLをリダイレクトURLと置き換えてもよい。要求された埋め込みアイテムが重複している場合、フェッチサーバは、リダイレクトURを使用するようにURLを書き換えてもよく、これは要求されたURLのためのコンテンツをフェッチする代わりに、リダイレクトURLのための既に検索されたコンテンツを使用できるようにする。このような重複排除方法は、フェッチサーバによって作られるクロール要求の実際の数を劇的に減少することができ、レンダリングエンジンの応答時間を向上することができる。書き換え規則は、URLがブラックリストに載せられていることを示してもよい。いくつかの実施形態において、フェッチサーバは、埋め込まれた画像の実際のコンテンツではなく、サイズを格納してもよい。レンダリングエンジンが画像を要求したとき、フェッチサーバが画像のサイズを有するモック画像を生成し、モック画像をレンダリングエンジンに返してもよい。レンダリングエンジンがウェブページのレンダリングを完了しているとき、レンダリング結果をウェブページの処理を向上するためにレンダリング結果の情報を使用することができる、インデックスエンジンのようなダウンストリームユーザに提供してもよい。
1つの態様において、コンピュータシステムは、少なくとも1つのプロセッサと、メモリと、を含むコンピュータシステムであって、メモリが、埋め込みアイテムのためのコンテンツのデータストアと、少なくとも1つのプロセッサによって実行されたときにシステムに動作を行わせる命令を格納する。該動作は、バッチプロセスから、ウェブページをレンダリングするための要求を受信することと、ウェブページの埋め込みアイテムを識別することと、を含む。該動作は、書き換え規則に基づいて、前記埋め込みアイテムが以前にフェッチされた埋め込みアイテムのためのコンテンツの重複であるコンテンツを有すると判定することと、判定に応答して、データストアから前記以前にフェッチされた埋め込みアイテムのための前記コンテンツを提供することと、以前にフェッチされた埋め込みアイテムのための前記コンテンツを使用して、前記ウェブページについてのレンダリング結果を生成することと、およびバッチプロセスにレンダリング結果を提供することと、も含む。
本明細書に記載される主題の1つ又は複数の実施形態は、以下の特徴の内の1つ又は複数を含むことができる。例えば、埋め込みアイテムが以前にフェッチされた埋め込みアイテムのためのコンテンツの重複であるコンテンツを有すると判断することは、書き換え規則のテンプレートに前記埋め込みアイテムを照合させることを含み、書き換え規則がリダイレクト識別子を含むことができる。このような実施形態において、以前にフェッチされた埋め込みアイテムのための前記コンテンツを提供することが、以前にフェッチされた埋め込みアイテムのための前記コンテンツ及び/又はクエリ文字列なしでURLを含んでもよいテンプレートを示すための前記リダイレクト識別子を使用することを含む。
他の例として、埋め込みアイテムは、第1の埋め込みアイテムであり、かつ動作がウェブページの第2の埋め込みアイテムを識別することを含んでもよく、前記第2の埋め込みアイテムがブラックリストに載せられているか否かを判断し、第2の埋め込みアイテムが第2の埋め込みアイテムのためのフェッチコンテンツなしでブラックリストに載せられているとき、エラーを返し、および第2の埋め込みアイテムのためのコンテンツなしでレンダリング結果を生成することを含んでもよい。別の例として、レンダリング結果を生成するとき、動作が仮想時計の使用を含んでもよく、仮想時計はリアルタイムとは無関係に進む。別の例において、レンダリング結果を生成するとき、動作が仮想時計の使用を含んでもよく、仮想時計が以前にフェッチされた埋め込みアイテムの提供されたコンテンツを待つ間に進行しない。
他の例として、埋め込みアイテムは第1の埋め込みアイテムであってもよく、動作がウェブページの第2の埋め込みアイテムを識別することと、第2の埋め込みアイテムが画像を含むことを判断することと、サイズテーブルを使用して、第2の埋め込みアイテムのためのサイズを指定するモック画像を生成することと、レンダリング結果を生成するときにモック画像を使用することと、を含んでもよい。
別の態様において、コンピュータ実装された方法は、ウェブページをレンダリングするための要求をバッチプロセスから受信するステップと、仮想時計とウェブページをレンダリングするためのタスクリストを初期化するステップであって、仮想時計が、埋め込みアイテムのための要求が未処理であるときかつタスクが準備完了であるとき、依然として停止している、初期化するステップと、を含む。該方法はまた、仮想時計がタスクリストの停止タスクのためのランタイムに一致するとき、ウェブページのためのレンダリング結果を生成するステップと、バッチプロセスのためのレンダリング結果を生成するステップと、を含む。
本明細書に記載される主題の1つ又は複数の実施形態は、以下の特徴の内の1つ又は複数を含むことができる。例えば、タスクリストを初期化するステップが、ランタイムセットを備えた停止タスクを仮想時計に追加された所定の時間に追加するステップを含んでもよい。所定の時間は少なくとも5秒であってもよい。別の例として、該方法は、埋め込みアイテムに対する要求が未処理ではない、かつ仮想時計よりも大きいランタイムを有するただ一つのタスクがタスクリストにあるとき、仮想時計をタスクリスト内のタスクのランタイムに進めるステップをさらに含んでもよい。別の例として、該方法は、ウェブページの埋め込み画像を識別するステップと、埋め込み画像のためのコンテンツを要求するステップと、要求に応答して、埋め込み画像のためにサイズを指定するが、空のコンテンツを有するモック画像を受信するステップと、レンダリング結果を生成するときにモック画像を使用するステップと、を含んでもよい。別の例として、バッチプロセスは、インデックスエンジンであってもよく、かつ該方法は、レンダリング結果の情報に基づいて、ウェブページのためのランクを降格させるステップをさらに含み、及び/又は動的に生成されたコンテンツにインデックスを付けるためにレンダリング結果を使用するステップをさらに含む。
別の態様において、方法は、ウェブページ内の埋め込みアイテムのユニフォームリソースロケータ(URL)のためのバッチレンダリングプロセスから要求を受信するステップと、書き換えられたURLを判断する書き換え規則を適用するステップを含む。該方法は、書き換えられたURLのためのコンテンツがデータストアに存在するか否かを判断するステップと、コンテンツが存在するとき、コンテンツを前記バッチレンダリングプロセスに提供するステップを含んでもよい。コンテンツが存在しないとき、該方法は、コンテンツのフェッチを初期化し、ここでバッチレンダリングプロセスがフェッチの間にタイムアウトなしで待機するように構成される、初期化するステップと、ウェブ巡回エンジンからコンテンツを受信するステップと、バッチレンダリングプロセスのためのコンテンツを提供するステップと、データストアのコンテンツを保存するステップを含んでもよい。コンテンツは、ウェブページのレンダリング結果をウェイ請求項するためにバッチレンダリングプロセスによって使用されてもよい。
本明細書に記載される主題の1つ又は複数の実施形態は、以下の特徴の内の1つ又は複数を含むことができる。例えば、書き換え規則を適用するステップは、URLをリダイレクトURLと関連しているテンプレートに照合させるステップを含んでもよく、ここでURLがテンプレートに一致するとき、前記リダイレクトURLが、書き換えられたURLであると判断され、およびURLがテンプレートに一致しないとき、URLが書き換えられたURLであると判断される。別の例として、該方法は、変更率またはデータストアに保存された埋め込みアイテムのタイプに基づいて、書き換えられたURLのための前記コンテンツが古いと判断するステップと、書き換えられたURLのためのコンテンツが古いと判断するステップに応答して、ウェブ巡回エンジンから更新されたコンテンツを受信するステップと、更新されたコンテンツを備えたデータストアを更新するステップと、書き換えられたURLのためのコンテンツとして、更新されたコンテンツを提供するステップを含んでもよい。
別の態様として、コンピュータシステムは、少なくとも1つのプロセッサと、画像識別によって格納されたサイズのテーブルおよび少なくとも1つのプロセッサによって実行されたときにシステムに動作を行わせる命令を保存するメモリと、含む。該動作は、ウェブページの埋め込みアイテムを識別することと、サイズのテーブルから埋め込み画像のためのサイズを判断し、サイズを使用してモック画像を生成することと、を含むことができる。該動作は、モック画像を使用してウェブページのためのレンダリング結果を生成することを含んでもよい。
別の態様として、コンピュータ実装された方法は、ウェブページをレンダリングするための要求をバッチプロセスから受信するステップと、ウェブページの少なくとも1つの埋め込み画像を識別するステップと、を含む。該方法は、フェッチサーバからモック画像を受信するステップと、モック画像を使用してウェブページのためのレンダリング結果をレンダリングするステップも含み、モック画像は埋め込み画像のサイズと空のコンテンツを有する。いくつかの実施形態において、該方法は、レンダリング結果をウェブページを要求したバッチプロセスに提供してもよい。
別の態様において、非一時的コンピュータ可読媒体は、コンピュータシステムに1つ又は複数の上述した方法を実行させる、回路基板に形成された少なくとも1つのプロセッサによって実行可能な命令を含んでもよい。
本明細書に記載される主題の1つまたは複数の実施形態は、1つまたは複数の以下の利点を実現するように実装されることができる。一例として、バッチレンダリングエンジンが入力デバイス(例えば、キーボード、マウス)あるいは出力デバイス(例えば、ディスプレイ、タッチスクリーンなど)に結合されていないため、レンダリングエンジンは、例えばユーザフレンドリーなAPIではなくマシンフレンドリーなAPIを有する、実際のブラウザレンダラ(browser renderer)よりも簡素で洗練されたものにすることができる。また、レンダリングエンジンは、レンダリングされた最終ページを表示する、あるいはユーザと対話する必要がないので、レンダリングエンジンは、実際の時間ではなく終了したタスクに基づいて進む仮想時計を使用することができ、これはレンダリングプロセスの処理速度を上げ、および一般的なエラーを避けることができる。例えば、バッチ環境でのフェッチは、個人のウェブ環境よりもはるかに遅くなることがあり、多くのタイムアウトエラーを引き起こす可能性がある。仮想時計は、フェッチ待ち時間を隠し、タイムアウトエラーを回避する。仮想時計は、より確定的な結果も可能にする。例えば、日付/時刻コンポーネントを含むURLにおいて、日付/時刻コンポーネントを固定された時間に置き換えるのではなく、システムは仮想時計の値を使用してもよい。これは、ウェブページのすべての時間パラメータが同じ値を有するわけではないが、ウェブページがレンダリングされるたびに特定の時間パラメータが同じ値を有することを意味する。この柔軟性は、システムが時間を進めることを可能にし、これはレンダリングされた結果の正確性のためにいくつかのウェブページにおいて重要であるが、要求された一連のURLがレンダリング全体で同じまままであることが常に保証される(クロール要求を少なくする)。システムは、例えばブラックリストに載せられたアイテムのような不要なアイテムをフェッチすることを回避してもよい。画像の実際のコンテンツではなく、画像のためのサイズを保存することは、フェッチサーバにおいて画像のためのストレージ要件を削減し、レンダリングエンジンに転送されるデータが少なくて済み、およびレンダリングエンジンでレンダリング時間がさらに向上する。URLを書き換えることは、重複したコンテンツをフェッチすることを回避し、バッチレンダリングプロセスをさらに高速にする。
開示された主題に従ったシステム例を図示する。 埋め込みアイテムを有するウェブページのブロック図である。 実施形態に従った、バッチレンダリングエンジンのブロック図である。 実施形態に従った、バッチレンダリングエンジンが、埋め込みオブジェクトを備えたウェブページをレンダリングすることができるプロセス例を図示する流れ図である。 実施形態に従った、バッチレンダリングエンジンが、仮想時計を進めるプロセス例を図示する流れ図である。 実施形態に従った、フェッチサーバが埋め込みアイテムのためのコンテンツをバッチレンダリングエンジンに提供するプロセス例を図示する流れ図である。 実施形態に従った、フェッチサーバがモック画像をバッチレンダリングエンジンに提供するプロセス例を図示する流れ図である。 開示した技術を実装するために使用されることができるコンピュータデバイスの例を示す。 開示した技術を実装するために使用されることができる分散型コンピュータデバイスの例を示す。
ウェブページを完全にレンダリングするために、ウェブページの全ての埋め込み外部リソースのコンテンツを最初に取得する必要がある。そのようなリソースは、外部画像、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”)、およびインターネットを含む。
コンピューティングシステムは、クライアントおよびサーバを含むことができる。クライアントおよびサーバは、通常、相互に離れており、および通常は、通信ネットワークを通じて相互作用する。クライアントとサーバの関係は、それぞれのコンピュータ上で動作し、互いにクライアント−サーバ関係を有するコンピュータプログラムの効力によって生じる。
多くの実施形態が説明されてきた。それにもかかわらず、本発明の精神および範囲から逸脱することなく、さまざまな変更がなされ得る。さらに、図に示された論理フローは、望ましい結果を達成するために、図示された特定の順序または連続する順序である必要はない。さらに、他のステップを設けても、または記載されたフローから複数のステップを除いてもよく、また、記載されたシステムに他の要素を追加してもよく、またはそこから除去してもよい。従って、他の実施形態は、添付の特許請求の範囲に含まれる。
110 インデキシングエンジン
115 インデックス
120 クエリエンジン
130 ウェブ巡回エンジン
140 レンダリングサーバ
142 レンダリングエンジン
148 レンダリング結果
150 フェッチサーバ
152 埋め込みアイテムテーブル
154 URL書き換え規則
156 画像寸法テーブル
170 ネットワーク
180 クライアント
182 クエリ
184 レスポンス
190 サーバ
220 スタイルシート
230 画像ファイル
240 キャッシュバスティングURL
305 ページタスクリスト
310 バーチャル時計
315 レンダリング結果
316 画像
317 DOMツリー
318 レイアウト
319 埋め込みリソース
320 エラー

Claims (18)

  1. ウェブページをレンダリングするための要求をバッチプロセスから受信するステップと、
    少なくとも1つのプロセッサを使用して、仮想時計と前記ウェブページをレンダリングするためのタスクリストを初期化するステップであって、前記仮想時計が、埋め込みアイテムのための要求が未処理であるときかつタスクが準備完了であるとき、依然として静止している、初期化するステップと、
    前記仮想時計に従って前記タスクリスト内のタスクを実行するステップと、
    前記仮想時計が前記タスクリスト内の停止タスクのためのランタイムに一致するとき、前記少なくとも1つのプロセッサを使用して、前記ウェブページのためのレンダリング結果を生成するステップと、
    前記バッチプロセスのための前記レンダリング結果を提供するステップと、を含む、方法。
  2. 前記タスクリストを初期化するステップが、ランタイムセットを備えた前記停止タスクを前記仮想時計に追加された所定の時間に追加するステップを含む、請求項1に記載の方法。
  3. 前記バッチプロセスが、インデックスエンジンを含み、かつ前記方法が、インデックスのトークンをランク付けするために前記レンダリング結果を使用するステップをさらに含む、請求項1に記載の方法。
  4. 埋め込みアイテムに対する要求が未解決でない、かつ前記仮想時計よりも大きいランタイムを有するただ一つのタスクが前記タスクリストにあるとき、前記仮想時計を前記タスクリスト内のタスクのランタイムに進めるステップをさらに含む、請求項1に記載の方法。
  5. 前記バッチプロセスが、インデックスエンジンであり、かつ前記方法が、前記レンダリング結果の情報に基づいて、前記ウェブページのためのランクを降格させるステップをさらに含む、請求項1に記載の方法。
  6. 前記バッチプロセスが、インデックスエンジンであり、かつ前記方法が、動的に生成されたコンテンツにインデックスを付けるために前記レンダリング結果を使用するステップをさらに含む、請求項1に記載の方法。
  7. 前記仮想時計に従って前記タスクリスト内のタスクを実行するステップが、埋め込みアイテムに対する要求が未解決でないかつ前記仮想時計に一致するランタイムを有するタスクが存在しないと決定したことに応答して、前記仮想時計を前記タスクリスト内の次に発生するタスクによって表される時間に進めるステップを含む、請求項1に記載の方法。
  8. 前記ウェブページの埋め込みアイテムを識別するステップと、
    前記埋め込みアイテムのためのコンテンツを要求するステップと、
    前記要求に応答して、前記コンテンツを受信するステップと、
    前記コンテンツを処理するために前記タスクリストにタスクを追加するステップであって、前記追加されたタスクが、前記仮想時計と等しいランタイムを有する、追加するステップと、をさらに含む、請求項1に記載の方法。
  9. 前記埋め込みアイテムのためのコンテンツを要求するステップが、
    前記要求されたコンテンツを受信したことに応答して、前記コンテンツを処理するために前記タスクリストにタスクを追加するステップであって、前記追加されたタスクが、前記仮想時計と等しい開始時間を有する、追加するステップを含む、請求項に記載の方法。
  10. 前記タスクリストを処理するために費やされた実際の時間が、前記コンテンツを待機する時間の量による所定の時間より大きい、請求項に記載の方法。
  11. 前記仮想時計と等しい開始時間を備えたタスクのすべてが完了したと決定すると、前記仮想時計は、前記タスクリスト内の次に発生するタスクによって表される時間に進む、請求項1に記載の方法。
  12. 少なくとも1つのプロセッサと、
    バッチレンダリングエンジンと、を含むコンピュータシステムであって、前記バッチレンダリングエンジンが、
    要求プロセスからウェブページをレンダリングするための要求を受信することと、
    前記ウェブページのための仮想時計を初期化することと、
    前記ウェブページをレンダリングするためにタスクリストを生成することであって、前記タスクリスト内の各タスクが、関連する開始時間を有する、生成することと、
    停止タスクを前記タスクリストに追加することと、
    前記ウェブページのための前記仮想時計に従って前記タスクリスト内の前記タスクを実行することであって、前記ウェブページのための前記仮想時計が、前記ウェブページのためのタスクリスト内の次に発生するタスクによって表される時間に設定することによって進み、前記仮想時計が、前記タスクリスト内の保留中のタスクが前記仮想時計に一致するランタイムを有している間は変化しないままである、実行することと、
    前記仮想時計が前記タスクリスト内の停止タスクのための開始時間に一致するとき、前記ウェブページのためのレンダリング結果を生成することと、
    前記要求プロセスに前記レンダリング結果を提供することと、
    を行うように構成される、コンピュータシステム。
  13. 前記停止タスクが、所定の時間に設定された開始時間を有する、請求項12に記載のコンピュータシステム。
  14. 前記タスクリストを処理するために費やされた実際の時間が、埋め込みアイテムがクロールされていない場合、前記所定の時間未満である、請求項13に記載のコンピュータシステム。
  15. 前記タスクリストは、第1の開始時間を備えた第1のタスクと、第1の開始時間を備えた第2のタスクとを含み、前記第1のタスクが、埋め込みリソースのフェッチであり、前記レンダリングエンジンが、
    サーバから前記埋め込みリソースを要求することと、
    前記要求を待っている間に前記第2のタスクに取り組むことと、
    を行うように構成される、請求項12に記載のコンピュータシステム。
  16. 前記レンダリングエンジンが、
    前記サーバから前記埋め込みリソースのためのコンテンツを受信することと、
    前記埋め込みアイテムのためのコンテンツを受信したことに応答して、前記タスクリストにタスクを追加することであって、前記タスクが、前記仮想時計の現在の値と等しいそれぞれの開始時間セットを有する、追加することと、
    を行うようにさらに構成される、請求項15に記載のコンピュータシステム。
  17. 前記タスクリストに追加された前記タスクが、前記埋め込みアイテムのためのコンテンツにおいて識別されたスクリプトを実行する、請求項16に記載のコンピュータシステム。
  18. 前記タスクリストに追加された前記タスクが、前記コンテンツにおいて識別された第2の埋め込みアイテムをフェッチする、請求項16に記載のコンピュータシステム。
JP2018111739A 2018-06-12 2018-06-12 バッチ最適化レンダリング及びフェッチアーキテクチャ Active JP6568985B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2018111739A JP6568985B2 (ja) 2018-06-12 2018-06-12 バッチ最適化レンダリング及びフェッチアーキテクチャ

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2018111739A JP6568985B2 (ja) 2018-06-12 2018-06-12 バッチ最適化レンダリング及びフェッチアーキテクチャ

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2016572796A Division JP6356273B2 (ja) 2014-06-26 2014-06-26 バッチ最適化レンダリング及びフェッチアーキテクチャ

Publications (2)

Publication Number Publication Date
JP2018160264A JP2018160264A (ja) 2018-10-11
JP6568985B2 true JP6568985B2 (ja) 2019-08-28

Family

ID=63795624

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018111739A Active JP6568985B2 (ja) 2018-06-12 2018-06-12 バッチ最適化レンダリング及びフェッチアーキテクチャ

Country Status (1)

Country Link
JP (1) JP6568985B2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109831493A (zh) * 2019-01-18 2019-05-31 深圳壹账通智能科技有限公司 一种图像配置的检测方法、装置、设备及介质
US11625401B2 (en) * 2019-03-29 2023-04-11 Sap Se Query execution including pause and detach operations after first data fetch
CN110496395B (zh) * 2019-08-22 2023-02-21 创新先进技术有限公司 一种针对虚幻引擎的组件运行方法、系统及设备

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8346755B1 (en) * 2010-05-04 2013-01-01 Google Inc. Iterative off-line rendering process
JP5512495B2 (ja) * 2010-11-18 2014-06-04 株式会社Nttドコモ データダウンロード装置、データダウンロード方法
US8793235B2 (en) * 2012-01-19 2014-07-29 Google Inc. System and method for improving access to search results
WO2015063259A1 (en) * 2013-11-01 2015-05-07 Kapow Technologies Determining web page processing state

Also Published As

Publication number Publication date
JP2018160264A (ja) 2018-10-11

Similar Documents

Publication Publication Date Title
JP6356273B2 (ja) バッチ最適化レンダリング及びフェッチアーキテクチャ
US10284623B2 (en) Optimized browser rendering service
US10713330B2 (en) Optimized browser render process
JP6568985B2 (ja) バッチ最適化レンダリング及びフェッチアーキテクチャ
EP4220446A1 (en) Resource pre-fetch using age threshold
US10599740B1 (en) Program code streaming
US10044804B2 (en) Enabling users to specify an electronic resource for viewing based on prior accessed electronic resources
Kivilohkare Optimizing the Critical Rendering Path for Decreased Website Loading Time
JP6397101B2 (ja) 最適化されたブラウザレンダリング処理
Woods Building Touch Interfaces with HTML5: Develop and Design Speed up your site and create amazing user experiences
JP2013025421A (ja) 情報検索システム及び情報検索方法
Hou et al. A static shell based web page implementation method and application in Haier 3D printing platform
Kiessig Ultra-Fast ASP. Net 4.5

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180613

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190325

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190401

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190628

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190805

R150 Certificate of patent or registration of utility model

Ref document number: 6568985

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