亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

批處理優(yōu)化渲染和獲取架構(gòu)的制作方法

文檔序號(hào):12287929閱讀:258來(lái)源:國(guó)知局
批處理優(yōu)化渲染和獲取架構(gòu)的制作方法與工藝

萬(wàn)維網(wǎng)是豐富的信息源。如今,估計(jì)有超過(guò)一萬(wàn)億的獨(dú)特網(wǎng)頁(yè)。這些頁(yè)面中的許多是動(dòng)態(tài)創(chuàng)建的(例如,紐約時(shí)報(bào)的主頁(yè)),并且具有指向諸如圖像和視頻的嵌入式內(nèi)容的鏈接,其可影響渲染的網(wǎng)頁(yè)的內(nèi)容和外觀。例如,當(dāng)瀏覽器執(zhí)行諸如JavaScript代碼的腳本時(shí),這可影響對(duì)于用戶(hù)而言網(wǎng)頁(yè)看起來(lái)如何并且在瀏覽器完成渲染網(wǎng)頁(yè)之后改變頁(yè)面的內(nèi)容和/或視覺(jué)外觀。作為另一示例,一些網(wǎng)頁(yè)使用樣式表,其告訴瀏覽器如何改變文本的外觀。典型的網(wǎng)頁(yè)可具有數(shù)以百計(jì)這樣的附加嵌入式項(xiàng),其中一些是專(zhuān)門(mén)設(shè)計(jì)用于瀏覽器渲染引擎的或者針對(duì)瀏覽器渲染引擎。通過(guò)渲染處理生成的附加信息可有助于諸如互聯(lián)網(wǎng)搜索引擎的下游系統(tǒng)。盡管對(duì)于單個(gè)用戶(hù)的web瀏覽器而言實(shí)時(shí)地渲染單個(gè)網(wǎng)頁(yè)相對(duì)簡(jiǎn)單,但是實(shí)時(shí)地渲染大量的頁(yè)面(諸如萬(wàn)維網(wǎng)上的所有頁(yè)面(1萬(wàn)億個(gè)頁(yè)面)或者甚至僅僅是萬(wàn)維網(wǎng)上的前1%的頁(yè)面(100億個(gè)頁(yè)面))會(huì)困難很多。



技術(shù)實(shí)現(xiàn)要素:

實(shí)現(xiàn)方式包括針對(duì)下游用戶(hù)(諸如網(wǎng)頁(yè)索引系統(tǒng))的網(wǎng)頁(yè)的批處理(batch)渲染優(yōu)化的渲染服務(wù)器和獲取服務(wù)器。當(dāng)下游用戶(hù)識(shí)別出具有一個(gè)或更多個(gè)嵌入式項(xiàng)的網(wǎng)頁(yè)(例如,利用其URL)時(shí),下游用戶(hù)可請(qǐng)求渲染服務(wù)器渲染URL以生成渲染結(jié)果。渲染服務(wù)器可包括許多(例如,數(shù)以萬(wàn)計(jì))的渲染引擎。每個(gè)渲染引擎對(duì)針對(duì)批處理渲染優(yōu)化的瀏覽器內(nèi)核進(jìn)行仿真,包括使用消除許多渲染錯(cuò)誤的虛擬時(shí)鐘。在渲染期間,隨著渲染引擎發(fā)現(xiàn)嵌入式項(xiàng),渲染引擎向獲取服務(wù)器請(qǐng)求嵌入式項(xiàng)。獲取服務(wù)器包括以每個(gè)嵌入式項(xiàng)的標(biāo)識(shí)符(例如,它的URL)作為鍵的嵌入式項(xiàng)以及由web爬取器檢索的該項(xiàng)的內(nèi)容的數(shù)據(jù)倉(cāng)庫(kù)。在數(shù)據(jù)倉(cāng)庫(kù)中查找嵌入式項(xiàng)之前,獲取服務(wù)器可利用重寫(xiě)規(guī)則來(lái)重寫(xiě)URL。當(dāng)URL的內(nèi)容與另一嵌入式項(xiàng)(例如,由重定向URL表示)重復(fù)時(shí),重寫(xiě)規(guī)則可用重定向URL來(lái)替換URL。如果所請(qǐng)求的嵌入式項(xiàng)是重復(fù)的,則獲取服務(wù)器可重寫(xiě)URL以使用重定向URL,這允許使用已經(jīng)檢索的重定向URL的內(nèi)容,代替獲取所請(qǐng)求的URL的內(nèi)容。這種消除重復(fù)方法可顯著減少由獲取服務(wù)器作出的爬取請(qǐng)求的實(shí)際數(shù)量并且改善渲染引擎的響應(yīng)時(shí)間。重寫(xiě)規(guī)則還可指示URL被列入黑名單。在一些實(shí)現(xiàn)方式中,獲取服務(wù)器可存儲(chǔ)嵌入式圖像的尺寸,而非實(shí)際內(nèi)容。當(dāng)渲染引擎請(qǐng)求圖像時(shí),獲取服務(wù)器可生成具有該圖像的尺寸的虛假圖像,并且將該虛假圖像返回給渲染引擎。當(dāng)渲染引擎完成了網(wǎng)頁(yè)渲染時(shí),它可將渲染結(jié)果提供給下游用戶(hù)(諸如索引引擎),該下游用戶(hù)可使用渲染結(jié)果中的信息來(lái)增強(qiáng)對(duì)網(wǎng)頁(yè)的處理。

在一個(gè)方面,一種計(jì)算機(jī)系統(tǒng)包括至少一個(gè)處理器和存儲(chǔ)器,該存儲(chǔ)器存儲(chǔ)有嵌入式項(xiàng)的內(nèi)容的數(shù)據(jù)倉(cāng)庫(kù)以及當(dāng)由所述至少一個(gè)處理器執(zhí)行時(shí)使得所述系統(tǒng)執(zhí)行操作的指令。所述操作包括從批處理進(jìn)程(a batch process)接收渲染網(wǎng)頁(yè)的請(qǐng)求并且識(shí)別網(wǎng)頁(yè)中的嵌入式項(xiàng)。所述操作還包括基于重寫(xiě)規(guī)則確定所述嵌入式項(xiàng)具有與先前獲取的嵌入式項(xiàng)的內(nèi)容重復(fù)的內(nèi)容,并且響應(yīng)于所述確定,從數(shù)據(jù)倉(cāng)庫(kù)提供所述先前獲取的嵌入式項(xiàng)的內(nèi)容,利用所述先前獲取的嵌入式項(xiàng)的內(nèi)容生成網(wǎng)頁(yè)的渲染結(jié)果,并且將渲染結(jié)果提供給批處理進(jìn)程。

本文所述的主題的一個(gè)或更多個(gè)實(shí)現(xiàn)方式可包括下列特征中的一個(gè)或更多個(gè)。例如,確定所述嵌入式項(xiàng)具有與先前獲取的嵌入式項(xiàng)的內(nèi)容重復(fù)的內(nèi)容可包括將所述嵌入式項(xiàng)與重寫(xiě)規(guī)則的模板進(jìn)行匹配,所述重寫(xiě)規(guī)則包括重定向標(biāo)識(shí)符。在這樣的實(shí)現(xiàn)方式中,提供所述先前獲取的嵌入式項(xiàng)的內(nèi)容包括使用重定向標(biāo)識(shí)符來(lái)定位所述先前獲取的嵌入式項(xiàng)的內(nèi)容,和/或模板可包括沒(méi)有查詢(xún)串的URL。

作為另一示例,所述嵌入式項(xiàng)可以是第一嵌入式項(xiàng),并且所述操作還可包括:識(shí)別網(wǎng)頁(yè)中的第二嵌入式項(xiàng);確定第二嵌入式項(xiàng)是否被列入黑名單;當(dāng)?shù)诙度胧巾?xiàng)被列入黑名單時(shí)返回錯(cuò)誤,而不獲取第二嵌入式項(xiàng)的內(nèi)容;生成沒(méi)有第二嵌入式項(xiàng)的內(nèi)容的渲染結(jié)果。作為另一示例,所述操作可包括當(dāng)生成渲染結(jié)果時(shí)使用虛擬時(shí)鐘,所述虛擬時(shí)鐘獨(dú)立于真實(shí)時(shí)間而前進(jìn)。作為另一示例,所述操作可包括當(dāng)生成渲染結(jié)果時(shí)使用虛擬時(shí)鐘,其中在等待所述先前獲取的嵌入式項(xiàng)的所提供的內(nèi)容的同時(shí),所述虛擬時(shí)鐘不前進(jìn)。

作為另一示例,所述嵌入式項(xiàng)可以是第一嵌入式項(xiàng),并且所述操作可包括:識(shí)別網(wǎng)頁(yè)中的第二嵌入式項(xiàng);確定第二嵌入式項(xiàng)包括圖像;利用尺寸表生成指定第二嵌入式項(xiàng)的尺寸的虛假圖像;以及使用所述虛假圖像來(lái)生成渲染結(jié)果。

在另一方面,一種計(jì)算機(jī)實(shí)現(xiàn)的方法包括:從批處理進(jìn)程接收渲染網(wǎng)頁(yè)的請(qǐng)求;將虛擬時(shí)鐘和任務(wù)列表初始化以用于渲染所述網(wǎng)頁(yè),其中,當(dāng)對(duì)嵌入式項(xiàng)的請(qǐng)求未完成時(shí)并且當(dāng)任務(wù)準(zhǔn)備好運(yùn)行時(shí)所述虛擬時(shí)鐘保持靜止。所述方法還包括:當(dāng)所述虛擬時(shí)鐘與任務(wù)列表中的停止任務(wù)的運(yùn)行時(shí)間匹配時(shí)生成網(wǎng)頁(yè)的渲染結(jié)果,并且將所述渲染結(jié)果提供給批處理進(jìn)程。

本文所述的主題的一個(gè)或更多個(gè)實(shí)現(xiàn)方式可包括下列特征中的一個(gè)或更多個(gè)。例如,將任務(wù)列表初始化可包括向停止任務(wù)添加運(yùn)行時(shí)間,該運(yùn)行時(shí)間被設(shè)定為添加到所述虛擬時(shí)鐘的預(yù)定時(shí)間。所述預(yù)定時(shí)間可為至少5秒。作為另一示例,所述方法還可包括:當(dāng)沒(méi)有對(duì)嵌入式項(xiàng)的請(qǐng)求未完成并且任務(wù)列表中僅存在運(yùn)行時(shí)間大于所述虛擬時(shí)鐘的任務(wù)時(shí),使所述虛擬時(shí)鐘前進(jìn)至任務(wù)列表中的任務(wù)的運(yùn)行時(shí)間。作為另一示例,所述方法還可包括:識(shí)別網(wǎng)頁(yè)中的嵌入式圖像;請(qǐng)求嵌入式圖像的內(nèi)容;響應(yīng)于所述請(qǐng)求,接收指定嵌入式圖像的尺寸但是內(nèi)容為空的虛假圖像;以及使用所述虛假圖像來(lái)生成渲染結(jié)果。作為另一示例,所述批處理進(jìn)程可以是索引引擎,并且所述方法還包括基于渲染結(jié)果中的信息使網(wǎng)頁(yè)的排名降低和/或使用渲染結(jié)果來(lái)索引動(dòng)態(tài)生成的內(nèi)容。

在另一方面,一種方法包括從批處理渲染進(jìn)程接收對(duì)網(wǎng)頁(yè)中的嵌入式項(xiàng)的統(tǒng)一資源定位符(URL)的請(qǐng)求,并且應(yīng)用重寫(xiě)規(guī)則以確定重寫(xiě)的URL。所述方法還可包括確定重寫(xiě)的URL的內(nèi)容是否存在于數(shù)據(jù)倉(cāng)庫(kù)中,并且當(dāng)所述內(nèi)容存在時(shí),將所述內(nèi)容提供給批處理渲染進(jìn)程。當(dāng)所述內(nèi)容不存在時(shí),所述方法可包括:發(fā)起對(duì)所述內(nèi)容的獲取,其中,批處理渲染進(jìn)程被配置為在獲取期間在不暫停的情況下等待;從web爬取引擎接收所述內(nèi)容;將所述內(nèi)容提供給批處理渲染進(jìn)程;以及將所述內(nèi)容存儲(chǔ)在數(shù)據(jù)倉(cāng)庫(kù)中??捎膳幚礓秩具M(jìn)程利用所述內(nèi)容來(lái)生成網(wǎng)頁(yè)的渲染結(jié)果。

本文所述的主題的一個(gè)或更多個(gè)實(shí)現(xiàn)方式可包括下列特征中的一個(gè)或更多個(gè)。例如,應(yīng)用重寫(xiě)規(guī)則可包括將URL與模板進(jìn)行匹配,所述模板與重定向URL關(guān)聯(lián),其中,當(dāng)URL與模板匹配時(shí),重定向URL被確定為重寫(xiě)的URL,并且其中,當(dāng)URL未能與模板匹配時(shí),所述URL被確定為重寫(xiě)的URL。作為另一示例,所述方法還可包括基于存儲(chǔ)在數(shù)據(jù)倉(cāng)庫(kù)中的嵌入式項(xiàng)的變化率或類(lèi)型來(lái)確定重寫(xiě)的URL的內(nèi)容失效(stale),并且響應(yīng)于確定重寫(xiě)的URL的內(nèi)容失效,從web爬取引擎接收經(jīng)更新的內(nèi)容,利用經(jīng)更新的內(nèi)容來(lái)更新數(shù)據(jù)倉(cāng)庫(kù),并且提供經(jīng)更新的內(nèi)容作為重寫(xiě)的URL的內(nèi)容。

在另一方面,一種計(jì)算機(jī)系統(tǒng)包括至少一個(gè)處理器和存儲(chǔ)器,該存儲(chǔ)器存儲(chǔ)有通過(guò)圖像標(biāo)識(shí)符存儲(chǔ)的尺寸表以及指令,所述指令在由所述至少一個(gè)處理器執(zhí)行時(shí)使得所述系統(tǒng)執(zhí)行操作。所述操作可包括識(shí)別網(wǎng)頁(yè)中的嵌入式圖像,根據(jù)尺寸表確定嵌入式圖像的尺寸,并且利用所述尺寸生成虛假圖像。所述操作還可包括利用虛假圖像生成網(wǎng)頁(yè)的渲染結(jié)果。

在另一方面,一種計(jì)算機(jī)實(shí)現(xiàn)的方法包括從批處理進(jìn)程接收渲染網(wǎng)頁(yè)的請(qǐng)求并且識(shí)別網(wǎng)頁(yè)中的至少一個(gè)嵌入式圖像。該方法還包括:從獲取服務(wù)器接收虛假圖像,該虛假圖像具有嵌入式圖像的尺寸并且內(nèi)容為空;以及利用所述虛假圖像生成網(wǎng)頁(yè)的渲染結(jié)果。在一些實(shí)現(xiàn)方式中,該方法可將渲染結(jié)果提供給請(qǐng)求網(wǎng)頁(yè)的批處理進(jìn)程。

在另一方面,非暫時(shí)性計(jì)算機(jī)可讀介質(zhì)可包括可由形成在基底中的至少一個(gè)處理器執(zhí)行的指令,其使得計(jì)算機(jī)系統(tǒng)執(zhí)行上述一個(gè)或更多個(gè)方法。

本文所述的主題的一個(gè)或更多個(gè)實(shí)現(xiàn)方式可被實(shí)施為實(shí)現(xiàn)下列優(yōu)點(diǎn)中的一個(gè)或更多個(gè)。作為一個(gè)示例,由于批處理渲染引擎未連接至輸入裝置(例如,鍵盤(pán)、鼠標(biāo))或輸出裝置(例如,顯示器、觸摸屏等),所以渲染引擎可比例如具有機(jī)器友好的API而非用戶(hù)友好的API的實(shí)際瀏覽器渲染器更簡(jiǎn)單和流暢。另外,由于渲染引擎不需要顯示最終渲染的頁(yè)面或者與用戶(hù)交互,所以渲染引擎可使用虛擬時(shí)鐘,該虛擬時(shí)鐘基于完成的任務(wù)而非實(shí)際時(shí)間來(lái)前進(jìn),這可快速跟蹤渲染進(jìn)程并且避免常見(jiàn)錯(cuò)誤。例如,批處理環(huán)境中的獲取可比個(gè)人web環(huán)境慢許多,這可能導(dǎo)致許多超時(shí)錯(cuò)誤。虛擬時(shí)鐘掩蓋了獲取延時(shí),從而避免了超時(shí)錯(cuò)誤。虛擬時(shí)鐘還允許更具確定性的結(jié)果。例如,在包括日期/時(shí)間組件的URL中,并非利用固定的時(shí)間替換日期/時(shí)間組件,系統(tǒng)可使用虛擬時(shí)鐘的值。這意味著并非網(wǎng)頁(yè)中的所有時(shí)間參數(shù)均將具有相同的值,而是每次網(wǎng)頁(yè)被渲染時(shí)特定時(shí)間參數(shù)將具有相同的值。這種靈活性允許系統(tǒng)使時(shí)間前進(jìn)(這在一些網(wǎng)頁(yè)中對(duì)于渲染結(jié)果的正確性而言重要),同時(shí)仍確保所請(qǐng)求的URL集合在渲染器間保持相同(這導(dǎo)致較少爬取請(qǐng)求)。系統(tǒng)還可避免獲取不必要的項(xiàng),例如,列入黑名單的項(xiàng)。存儲(chǔ)圖像的尺寸,而非圖像的實(shí)際內(nèi)容,降低了獲取服務(wù)器中的對(duì)圖像的存儲(chǔ)要求,使得需要傳送至渲染引擎的數(shù)據(jù)較少,并且進(jìn)一步改善了渲染引擎處的渲染時(shí)間。重寫(xiě)URL避免了獲取重復(fù)的內(nèi)容,進(jìn)一步加速了批處理渲染進(jìn)程。

附圖說(shuō)明

圖1圖示出根據(jù)所公開(kāi)的主題的示例系統(tǒng)。

圖2是具有嵌入式項(xiàng)的網(wǎng)頁(yè)的框圖。

圖3是根據(jù)實(shí)現(xiàn)方式的批處理渲染引擎的框圖。

圖4是圖示出根據(jù)實(shí)現(xiàn)方式的批處理渲染引擎可渲染具有嵌入式對(duì)象的網(wǎng)頁(yè)的示例進(jìn)程的流程圖。

圖5是圖示出根據(jù)實(shí)現(xiàn)方式的批處理渲染引擎使虛擬時(shí)鐘前進(jìn)的示例進(jìn)程的流程圖。

圖6是圖示出根據(jù)實(shí)現(xiàn)方式的獲取服務(wù)器將嵌入式項(xiàng)的內(nèi)容提供給批處理渲染引擎的示例進(jìn)程的流程圖。

圖7是圖示出根據(jù)實(shí)現(xiàn)方式的獲取服務(wù)器將虛假圖像提供給批處理渲染引擎的示例進(jìn)程的流程圖。

圖8示出可用于實(shí)現(xiàn)所描述的技術(shù)的計(jì)算機(jī)裝置的示例。

圖9示出可用于實(shí)現(xiàn)所描述的技術(shù)的分布式計(jì)算機(jī)裝置的示例。

具體實(shí)施方式

為了完整地渲染網(wǎng)頁(yè),必須首先獲得網(wǎng)頁(yè)中的所有嵌入的外部資源的內(nèi)容。這些資源可包括(但不限于)外部圖像、JavaScript代碼和樣式表。相同的外部資源經(jīng)常被嵌入許多不同的網(wǎng)頁(yè)中。盡管對(duì)于單個(gè)用戶(hù)的web瀏覽器而言實(shí)時(shí)地(即,當(dāng)渲染嵌入資源的頁(yè)面時(shí))請(qǐng)求諸如Google Analytics JavaScript代碼的外部網(wǎng)頁(yè)資源是有效的,但是對(duì)于批處理渲染引擎而言這樣做既不可行也不有效。例如對(duì)于網(wǎng)頁(yè)索引進(jìn)程,批處理渲染引擎被設(shè)計(jì)為有效并快速地一次渲染大量的網(wǎng)頁(yè)。但是獲取嵌入的外部資源會(huì)緩慢,并且有時(shí)這樣的資源對(duì)于批處理進(jìn)程不重要(例如,沒(méi)有人用戶(hù)查看最終渲染的產(chǎn)品)。為了改善在批處理環(huán)境中渲染網(wǎng)頁(yè)的處理時(shí)間,渲染引擎可利用虛擬時(shí)鐘來(lái)工作,可與獲取服務(wù)器一起工作以避免重復(fù)和不必要的獲取,并且可使對(duì)網(wǎng)頁(yè)中的視覺(jué)或其它面向用戶(hù)的元素的處理最小化。

圖1是根據(jù)示例實(shí)現(xiàn)方式的系統(tǒng)的框圖。系統(tǒng)100可用于針對(duì)作出請(qǐng)求的進(jìn)程有效且快速地以批處理模式渲染網(wǎng)頁(yè)。系統(tǒng)100中所示的作出請(qǐng)求的進(jìn)程是用于互聯(lián)網(wǎng)搜索引擎的索引引擎,但是實(shí)現(xiàn)方式不限于索引引擎作為所渲染的網(wǎng)頁(yè)的下游用戶(hù)。例如,作出請(qǐng)求的進(jìn)程可以是分析頁(yè)面來(lái)診斷緩慢問(wèn)題或者確定諸如Google Analytics的工具是否正確地設(shè)置的分析引擎,或者廣告系統(tǒng),或者依賴(lài)于與復(fù)雜網(wǎng)頁(yè)的自動(dòng)交互(例如,填寫(xiě)表單或者點(diǎn)擊元素)的其它系統(tǒng)。因此,盡管系統(tǒng)100可能被描述為使用批處理生成的渲染結(jié)果進(jìn)行索引,系統(tǒng)100可用于渲染結(jié)果中提供的信息有用的其它批處理系統(tǒng)。

系統(tǒng)100可以是計(jì)算裝置或者采取若干不同裝置的形式的裝置。例如,系統(tǒng)100可以是標(biāo)準(zhǔn)服務(wù)器、一組這樣的服務(wù)器、客戶(hù)端-服務(wù)器系統(tǒng)或者機(jī)架式服務(wù)器系統(tǒng)。另外,系統(tǒng)100可被實(shí)現(xiàn)于個(gè)人計(jì)算機(jī)中。系統(tǒng)100可以是如圖8中所描繪的計(jì)算機(jī)裝置800或者如圖9中所描繪的計(jì)算機(jī)裝置900的示例。

系統(tǒng)100包括web爬取引擎130、諸如索引引擎110的作出請(qǐng)求的進(jìn)程、渲染服務(wù)器140和獲取服務(wù)器150。web爬取引擎130、渲染服務(wù)器140和獲取服務(wù)器150一起工作以有效地渲染大量的網(wǎng)頁(yè),諸如可在萬(wàn)維網(wǎng)上找到的網(wǎng)頁(yè)。渲染網(wǎng)頁(yè)的結(jié)果是渲染結(jié)果,其包括可用于以及否則不可用于作出請(qǐng)求的進(jìn)程的各種數(shù)據(jù)元素。

索引引擎110可包括被配置為執(zhí)行一個(gè)或更多個(gè)機(jī)器可執(zhí)行指令或者軟件、固件或其組合的片段以創(chuàng)建索引115的一個(gè)或更多個(gè)處理器。例如,索引引擎110可經(jīng)由web爬取引擎130從服務(wù)器190接收信息。索引引擎110可處理所接收的網(wǎng)頁(yè)的內(nèi)容以生成索引115。服務(wù)器190可以是可通過(guò)互聯(lián)網(wǎng)訪問(wèn)的托管一個(gè)或更多個(gè)網(wǎng)頁(yè)或者嵌入一個(gè)或更多個(gè)網(wǎng)頁(yè)中的資源的任何類(lèi)型的計(jì)算裝置。由爬取引擎130訪問(wèn)的網(wǎng)頁(yè)可包括諸如樣式表、JavaScript、圖像等的嵌入式項(xiàng),其中一些可更改所渲染的網(wǎng)頁(yè)的內(nèi)容和布局。盡管索引引擎110可索引經(jīng)由爬取引擎130提供了什么,索引引擎可要求渲染服務(wù)器140提供網(wǎng)頁(yè)的瀏覽器渲染的渲染結(jié)果,其包括否則不可用于索引引擎110的布局信息和動(dòng)態(tài)內(nèi)容。索引引擎110可使用渲染結(jié)果內(nèi)容來(lái)增強(qiáng)索引115中關(guān)于文檔可用的信息。例如,索引引擎110可基于網(wǎng)頁(yè)圖像中的文本的位置或大小來(lái)更改網(wǎng)頁(yè)中的文本元素的排名。例如,首屏出現(xiàn)(above-the-fold)(例如,無(wú)需滾動(dòng)就可見(jiàn))的文本可被認(rèn)為比線(xiàn)下文本更重要。作為另一示例,廣告中的文本可被認(rèn)為不如網(wǎng)頁(yè)重要。另外,由于一些內(nèi)容被動(dòng)態(tài)地生成(例如,直至網(wǎng)頁(yè)被渲染之后才可用),所以索引引擎110可使用渲染結(jié)果來(lái)索引動(dòng)態(tài)地生成的內(nèi)容。盡管為了簡(jiǎn)明起見(jiàn)圖1中未示出,在一些實(shí)現(xiàn)方式中,索引引擎110可分布于或更多單獨(dú)的計(jì)算裝置上。

類(lèi)似索引引擎110,查詢(xún)引擎120可包括使用索引115來(lái)識(shí)別查詢(xún)182的搜索結(jié)果(例如,使用傳統(tǒng)或其它信息檢索技術(shù))的一個(gè)或更多個(gè)服務(wù)器。查詢(xún)引擎120可包括從諸如客戶(hù)端180的請(qǐng)求者接收查詢(xún)182的一個(gè)或更多個(gè)服務(wù)器。查詢(xún)引擎120可利用索引115來(lái)識(shí)別響應(yīng)于查詢(xún)的文檔,并且將來(lái)自響應(yīng)文檔的信息作為搜索結(jié)果184提供給請(qǐng)求者。在一些實(shí)現(xiàn)方式中,查詢(xún)引擎120還可使用渲染結(jié)果數(shù)據(jù)倉(cāng)庫(kù)148中的渲染結(jié)果來(lái)提供縮略圖作為搜索結(jié)果184的一部分。查詢(xún)引擎120可包括例如利用一個(gè)或更多個(gè)排名信號(hào)來(lái)計(jì)算響應(yīng)于查詢(xún)的文檔的得分的排名引擎。一個(gè)或更多個(gè)排名信號(hào)可基于從與文檔關(guān)聯(lián)的渲染結(jié)果獲得的內(nèi)容。排名引擎可利用所述得分來(lái)對(duì)響應(yīng)于查詢(xún)找到的文檔進(jìn)行排名。

系統(tǒng)還可包括web爬取引擎130。web爬取引擎130可包括被配置為執(zhí)行一個(gè)或更多個(gè)機(jī)器可執(zhí)行指令或者軟件、固件或其組合的片段的一個(gè)或更多個(gè)處理器。web爬取引擎130可以是諸如標(biāo)準(zhǔn)服務(wù)器、一組這樣的服務(wù)器、客戶(hù)端-服務(wù)器系統(tǒng)或者機(jī)架式服務(wù)器系統(tǒng)的計(jì)算裝置。在一些實(shí)現(xiàn)方式中,web爬取引擎130可與系統(tǒng)100的其它組件(諸如獲取服務(wù)器150或索引引擎110)共享諸如存儲(chǔ)器或硬件處理器的組件。web爬取引擎130可爬取可在萬(wàn)維網(wǎng)上找到的網(wǎng)頁(yè)。當(dāng)web爬取引擎130接收所爬取的網(wǎng)頁(yè)(即,所爬取的網(wǎng)頁(yè)的內(nèi)容)時(shí),web爬取引擎130可將內(nèi)容提供給請(qǐng)求者,其可以是索引引擎110或獲取服務(wù)器150。web爬取引擎130還可將內(nèi)容存儲(chǔ)在數(shù)據(jù)倉(cāng)庫(kù)(未示出)中并且向請(qǐng)求者提供位置。如本文所用,網(wǎng)頁(yè)的內(nèi)容表示提供給網(wǎng)頁(yè)渲染引擎并且用于渲染網(wǎng)頁(yè)以用于顯示在web瀏覽器中的HTML代碼,并且包括指向嵌入網(wǎng)頁(yè)中的外部對(duì)象(諸如樣式表、JavaScript、其它網(wǎng)頁(yè)或圖像文件)的任何鏈接。web爬取引擎130還可由獲取服務(wù)器150用來(lái)獲取這些嵌入式項(xiàng)的內(nèi)容。web爬取引擎130可將嵌入式項(xiàng)的內(nèi)容提供給獲取服務(wù)器150,或者可將所獲取的內(nèi)容存儲(chǔ)在數(shù)據(jù)倉(cāng)庫(kù)(諸如嵌入式項(xiàng)表152)中。web爬取引擎130可通知請(qǐng)求者嵌入式項(xiàng)何時(shí)被爬取。

如先前提及的,系統(tǒng)100包括獲取服務(wù)器150。獲取服務(wù)器150可包括被配置為執(zhí)行一個(gè)或更多個(gè)機(jī)器可執(zhí)行指令或者軟件、固件或其組合的片段的一個(gè)或更多個(gè)處理器。獲取服務(wù)器150可以是諸如標(biāo)準(zhǔn)服務(wù)器、一組這樣的服務(wù)器、客戶(hù)端-服務(wù)器系統(tǒng)或者機(jī)架式服務(wù)器系統(tǒng)的計(jì)算裝置。在一些實(shí)現(xiàn)方式中,獲取服務(wù)器150可與系統(tǒng)100的其它組件(諸如渲染服務(wù)器140、web爬取引擎130或索引引擎110)共享諸如存儲(chǔ)器或硬件處理器的組件。獲取服務(wù)器150被配置為請(qǐng)求web爬取引擎130獲取特定嵌入式項(xiàng)的內(nèi)容(例如,通過(guò)其URL)并且接收所獲取的內(nèi)容和所請(qǐng)求的嵌入式項(xiàng)的爬取時(shí)間。獲取服務(wù)器150可直接從web爬取引擎130或者從web爬取引擎130更新的嵌入式項(xiàng)表152接收內(nèi)容和獲取時(shí)間。獲取服務(wù)器150可從渲染引擎142接收對(duì)嵌入式項(xiàng)的請(qǐng)求。獲取服務(wù)器150可向請(qǐng)求渲染引擎142提供響應(yīng)。該響應(yīng)可包括獲取的或者存儲(chǔ)在嵌入式項(xiàng)表152中的內(nèi)容、基于圖像尺寸表156的虛假圖像(mock image)或者錯(cuò)誤響應(yīng)。在一些實(shí)現(xiàn)方式中,獲取服務(wù)器150可通過(guò)將嵌入式項(xiàng)的內(nèi)容和爬取時(shí)間發(fā)送至請(qǐng)求嵌入式項(xiàng)的渲染服務(wù)器140的渲染引擎142來(lái)提供嵌入式項(xiàng)的內(nèi)容。另選地,獲取服務(wù)器150可通過(guò)通知渲染引擎142嵌入式項(xiàng)的內(nèi)容和爬取時(shí)間可經(jīng)由嵌入式項(xiàng)表152中的指定位置獲得來(lái)提供內(nèi)容,并且渲染引擎142可從該數(shù)據(jù)倉(cāng)庫(kù)檢索網(wǎng)頁(yè)的內(nèi)容和爬取時(shí)間。

獲取服務(wù)器150可將URL重寫(xiě)規(guī)則154應(yīng)用于所請(qǐng)求的嵌入式項(xiàng)(例如,所請(qǐng)求的URL)。URL重寫(xiě)規(guī)則154包括當(dāng)URL與和另一URL相同的內(nèi)容關(guān)聯(lián)時(shí)用于重寫(xiě)URL的規(guī)則。這常常發(fā)生在網(wǎng)站所有者想要瀏覽器每次請(qǐng)求資源時(shí)下載內(nèi)容,并且因此提供動(dòng)態(tài)生成的URL或者緩存清除(cache-busting)URL時(shí)。這樣的URL常常具有作為URL的部分嵌入的時(shí)間戳或隨機(jī)串,其使得每次例如通過(guò)生成緩存清除URL的JavaScript渲染網(wǎng)頁(yè)時(shí)URL是獨(dú)特的。然而,從托管服務(wù)器提供的動(dòng)態(tài)生成的URL的內(nèi)容沒(méi)有改變,或者沒(méi)有按照對(duì)于批處理渲染目的有意義的方式改變。獲取服務(wù)器150可使用URL重寫(xiě)規(guī)則154來(lái)更有效地響應(yīng)對(duì)嵌入式項(xiàng)的請(qǐng)求。例如,URL重寫(xiě)規(guī)則154可包括模式或模板,與規(guī)則的模板匹配的URL返回相同的內(nèi)容(例如,重復(fù)的內(nèi)容)。在一些實(shí)現(xiàn)方式中,模板可通過(guò)利用獲取日志并且識(shí)別具有重復(fù)內(nèi)容的URL所共有的URL中的模式來(lái)比較各種URL的內(nèi)容的離線(xiàn)或批處理進(jìn)程來(lái)確定。獲取日志可例如由web爬取引擎130或獲取服務(wù)器150維持。模板也可由用戶(hù)輸入。如果所請(qǐng)求的嵌入式項(xiàng)具有與模板中的一個(gè)匹配的URL,則URL重寫(xiě)規(guī)則154可告知獲取服務(wù)器150所請(qǐng)求的項(xiàng)是重復(fù)的并且指示它利用與先前獲取的內(nèi)容關(guān)聯(lián)的重定向URL(例如,具有嵌入式項(xiàng)表152中的內(nèi)容的URL)重寫(xiě)所請(qǐng)求的URL。先前獲取的嵌入式項(xiàng)的URL可被認(rèn)為重定向URL。這允許獲取服務(wù)器150避免不必要地獲取,加速其對(duì)請(qǐng)求批處理渲染引擎142的響應(yīng),并且消除由過(guò)多的獲取請(qǐng)求導(dǎo)致的托管服務(wù)器的壓力。當(dāng)然,如果所請(qǐng)求的URL不與URL重寫(xiě)規(guī)則154中的模板匹配,則重寫(xiě)URL可導(dǎo)致所請(qǐng)求的URL沒(méi)有改變。

URL重寫(xiě)規(guī)則154還可包括列入黑名單的URL的模式或模板。如果所請(qǐng)求的嵌入式項(xiàng)與列入黑名單的URL模式匹配,則系統(tǒng)可返回預(yù)定錯(cuò)誤而非嘗試獲取該URL的內(nèi)容。列入黑名單的URL可在確定該內(nèi)容不需要被用于批處理渲染的目的之后由用戶(hù)輸入U(xiǎn)RL重寫(xiě)規(guī)則154中。其一個(gè)示例是許多網(wǎng)頁(yè)包括的Google Analytics JavaScript代碼。該JavaScript代碼可被認(rèn)為對(duì)所渲染的頁(yè)面的布局而言不重要,并且不需要為了批處理渲染引擎的目的而運(yùn)行。因此,為了渲染效率,可利用URL重寫(xiě)規(guī)則154將一些嵌入式項(xiàng)列入黑名單。在一些實(shí)現(xiàn)方式中,并非針對(duì)列入黑名單的URL返回錯(cuò)誤,系統(tǒng)可利用如上所述的重定向URL將URL重寫(xiě)為嵌入式項(xiàng)表152中的永不失效并且具有適合于嵌入式項(xiàng)的預(yù)定內(nèi)容的條目。在一些實(shí)現(xiàn)方式中,URL重寫(xiě)規(guī)則可在URL與模板匹配時(shí)將它標(biāo)記為列入黑名單。URL重寫(xiě)規(guī)則154可顯著減少經(jīng)由web爬取引擎130獲取的嵌入式項(xiàng)的數(shù)量,從而改善對(duì)資源的任何請(qǐng)求的獲取服務(wù)器150響應(yīng)時(shí)間并且使任何特定服務(wù)器190上的獲取量最小化。使獲取量最小化確保了系統(tǒng)不會(huì)用獲取請(qǐng)求淹沒(méi)服務(wù)器190。在一些實(shí)現(xiàn)方式中,獲取服務(wù)器150和/或web爬取引擎130可被配置為限制在服務(wù)器190處進(jìn)行的獲取請(qǐng)求的數(shù)量,并且如果請(qǐng)求超過(guò)該限制,則系統(tǒng)可開(kāi)始對(duì)請(qǐng)求進(jìn)行排隊(duì)。如果隊(duì)列變得過(guò)大,則系統(tǒng)可能無(wú)法處理獲取請(qǐng)求。因此,URL重寫(xiě)規(guī)則154還可使獲取量最小化。

在一些實(shí)現(xiàn)方式中,獲取服務(wù)器150可包括圖像尺寸表156。圖像尺寸表156可以是將圖像URL與圖像的已知尺寸關(guān)聯(lián)的鍵值存儲(chǔ)。已知尺寸可在獲取圖像時(shí)確定。利用所請(qǐng)求的圖像的尺寸,獲取服務(wù)器150可生成具有與所請(qǐng)求的圖像相同的尺寸,但是內(nèi)容為空或者僅具有瓦片作為內(nèi)容的虛假圖像。虛假圖像是具有與所請(qǐng)求的圖像相同的尺寸但是沒(méi)有相同的圖像數(shù)據(jù)的有效圖像。由于獲取服務(wù)器150為批處理渲染引擎獲取內(nèi)容,所以實(shí)際圖像對(duì)于渲染結(jié)果而言可能不重要,但是圖像的尺寸可能影響所渲染的頁(yè)面的布局。使用虛假圖像而非實(shí)際圖像使得文件大小非常小(例如,僅每圖像幾十字節(jié)),這節(jié)省了傳送虛假圖像時(shí)的網(wǎng)絡(luò)帶寬以及用于批處理渲染引擎的處理器和存儲(chǔ)器資源。在一些實(shí)現(xiàn)方式中,圖像尺寸表156可以是諸如SSTable的鍵值存儲(chǔ),但是尺寸表156可以是通過(guò)圖像標(biāo)識(shí)符存儲(chǔ)尺寸的任何數(shù)據(jù)結(jié)構(gòu)。

系統(tǒng)100可包括嵌入式項(xiàng)表152。嵌入式項(xiàng)表152可以URL作為鍵并且可存儲(chǔ)從web爬取引擎130返回的嵌入式項(xiàng)的獲取的內(nèi)容。在一些實(shí)現(xiàn)方式中,嵌入式項(xiàng)表152還可存儲(chǔ)爬取歷史。例如,在一些實(shí)現(xiàn)方式中,嵌入式項(xiàng)表152可包括在一段時(shí)間(例如,七天、兩周等)內(nèi)獲取的內(nèi)容。嵌入式項(xiàng)表152還可包括基于爬取歷史的變化率。在一些實(shí)現(xiàn)方式中,嵌入式項(xiàng)表152可被實(shí)現(xiàn)為BigTable、關(guān)系數(shù)據(jù)庫(kù)、Hadoop分布式文件等。獲取服務(wù)器150可使用嵌入式項(xiàng)表152來(lái)快速地返回先前獲取的嵌入式項(xiàng)的內(nèi)容。由于獲取服務(wù)器150可處理對(duì)數(shù)以千計(jì)的批處理渲染引擎的請(qǐng)求,所以所請(qǐng)求的嵌入式項(xiàng)之前響應(yīng)于早前獲取請(qǐng)求已經(jīng)獲取過(guò)的可能性很高。當(dāng)所獲取的內(nèi)容位于嵌入式項(xiàng)表152中時(shí),獲取服務(wù)器150可利用嵌入式項(xiàng)表152中的內(nèi)容來(lái)響應(yīng)請(qǐng)求,而非要求web爬取引擎130提供內(nèi)容。這減輕了存儲(chǔ)獲取的內(nèi)容的服務(wù)器190的負(fù)擔(dān)并且允許獲取服務(wù)器150更快速地響應(yīng)對(duì)嵌入式項(xiàng)的請(qǐng)求。獲取服務(wù)器150還可通過(guò)利用URL重寫(xiě)規(guī)則154消除重復(fù)URL來(lái)減少爬取請(qǐng)求。

如果在渲染進(jìn)程的任何階段,一個(gè)或更多個(gè)所請(qǐng)求的嵌入式項(xiàng)的內(nèi)容沒(méi)有存儲(chǔ)在嵌入式項(xiàng)表152中或者已失效,則獲取服務(wù)器150可指示web爬取引擎130調(diào)度對(duì)所請(qǐng)求的嵌入式項(xiàng)的爬取。一旦web爬取引擎130已爬取所請(qǐng)求的嵌入式項(xiàng),它就通知獲取服務(wù)器150。然后獲取服務(wù)器150可將所獲取的內(nèi)容連同爬取時(shí)間一起存儲(chǔ)在嵌入式項(xiàng)表152中。如果嵌入式項(xiàng)是圖像,則獲取服務(wù)器150可另選地或另外地將所獲取的圖像的尺寸連同爬取時(shí)間一起存儲(chǔ)在圖像尺寸表156中。然后,獲取服務(wù)器150可將所請(qǐng)求的內(nèi)容發(fā)送回請(qǐng)求渲染引擎142,或者對(duì)于圖像文件,可將具有所述圖像尺寸的虛假圖像發(fā)送回請(qǐng)求渲染引擎142。

系統(tǒng)100包括渲染服務(wù)器140。渲染服務(wù)器140可包括被配置為執(zhí)行一個(gè)或更多個(gè)機(jī)器可執(zhí)行指令或者軟件、固件或其組合的片段的一個(gè)或更多個(gè)處理器。渲染服務(wù)器140可以是諸如標(biāo)準(zhǔn)服務(wù)器、一組這樣的服務(wù)器、客戶(hù)端-服務(wù)器系統(tǒng)或者機(jī)架式服務(wù)器系統(tǒng)的計(jì)算裝置。在一些實(shí)現(xiàn)方式中,渲染服務(wù)器140可與系統(tǒng)100的其它組件(諸如獲取服務(wù)器150或索引引擎110)共享諸如存儲(chǔ)器或硬件處理器的組件。渲染服務(wù)器140從索引引擎110或者其它作出請(qǐng)求的進(jìn)程接收請(qǐng)求,以渲染特定網(wǎng)頁(yè)。換言之,渲染服務(wù)器140可接收所請(qǐng)求的網(wǎng)頁(yè)的URL。渲染服務(wù)器140可包括一個(gè)或許多個(gè)渲染引擎142。在一些實(shí)現(xiàn)方式中,渲染服務(wù)器140包括數(shù)以萬(wàn)計(jì)的渲染引擎142并且可執(zhí)行負(fù)載平衡以選擇渲染引擎142來(lái)渲染網(wǎng)頁(yè)。一旦選擇渲染引擎142,該渲染引擎142就嘗試將網(wǎng)頁(yè)渲染為渲染結(jié)果。網(wǎng)頁(yè)可被稱(chēng)作嵌入器網(wǎng)頁(yè),因?yàn)樗ǔ0ǜ郊忧度胧巾?xiàng)。

每個(gè)渲染引擎142被配置為模擬用于個(gè)人web瀏覽器的渲染器,但是針對(duì)批處理渲染進(jìn)行了優(yōu)化。因此,在渲染引擎142接收嵌入器網(wǎng)頁(yè)之后,它可開(kāi)始填充任務(wù)列表,任務(wù)表示渲染引擎142為了生成渲染結(jié)果而進(jìn)行的工作。盡管許多任務(wù)可被調(diào)度為立即運(yùn)行,一些任務(wù)可在未來(lái)調(diào)度。針對(duì)渲染引擎142的批處理優(yōu)化中的一個(gè)是使用虛擬時(shí)鐘并且向任務(wù)列表添加指示渲染在預(yù)定時(shí)間完成的任務(wù)。例如,在一些實(shí)現(xiàn)方式中,任務(wù)可指示渲染在當(dāng)前時(shí)間加20秒完成。所述預(yù)定時(shí)間可基于大部分網(wǎng)頁(yè)設(shè)計(jì)者將網(wǎng)頁(yè)設(shè)計(jì)為看起來(lái)完成的時(shí)間,例如,任何動(dòng)畫(huà)或布局改變被設(shè)計(jì)為在所述預(yù)定時(shí)間內(nèi)完成。由于大多數(shù)用戶(hù)無(wú)法接受為頁(yè)面加載等待非常長(zhǎng)時(shí)間來(lái),所以所述預(yù)定時(shí)間可介于5和20秒之間,但是對(duì)于一些情況它可能更長(zhǎng)。由于虛擬時(shí)鐘的使用,渲染引擎142將不會(huì)花費(fèi)整個(gè)20秒,并且如果嵌入式項(xiàng)還未被爬取(例如,獲取服務(wù)器150可將內(nèi)容置于嵌入式項(xiàng)表152中)則完全渲染經(jīng)??稍趲酌雰?nèi)發(fā)生。因此,生成最終渲染結(jié)果的任務(wù)可被添加到任務(wù)列表,其開(kāi)始時(shí)間距當(dāng)前時(shí)間20秒。當(dāng)前時(shí)間基于虛擬時(shí)鐘的初始化時(shí)間,其可為零或者真實(shí)時(shí)鐘的當(dāng)前時(shí)間。

作為渲染進(jìn)程的一部分(例如,渲染任務(wù)之一),渲染引擎142可確定嵌入器網(wǎng)頁(yè)是否包括諸如樣式表、圖像文件、Java script等的任何嵌入式項(xiàng)。這些嵌入式項(xiàng)被稱(chēng)作初級(jí)嵌入式對(duì)象。如果網(wǎng)頁(yè)不包含任何嵌入式對(duì)象,則渲染引擎可立即將網(wǎng)頁(yè)處理成渲染結(jié)果,并且可將渲染結(jié)果存儲(chǔ)在渲染結(jié)果數(shù)據(jù)倉(cāng)庫(kù)148中。然而,如果網(wǎng)頁(yè)包含嵌入式項(xiàng),則渲染引擎142可提取所有嵌入式項(xiàng)并且向獲取服務(wù)器150發(fā)送對(duì)嵌入式項(xiàng)的內(nèi)容的請(qǐng)求。所請(qǐng)求的嵌入式項(xiàng)各自由相應(yīng)的URL表示。然而,渲染引擎142在等待所獲取的資源的同時(shí)不停止渲染或者暫停。相反,由于渲染引擎142使用虛擬時(shí)鐘(將在下面更詳細(xì)地說(shuō)明),所以等待經(jīng)由web爬取引擎130獲取的資源不會(huì)使時(shí)鐘前進(jìn)并且渲染引擎142不會(huì)暫停。

當(dāng)接收到所請(qǐng)求的嵌入式項(xiàng)的內(nèi)容時(shí),渲染引擎142可向任務(wù)列表添加處理內(nèi)容的任務(wù)。內(nèi)容處理的一部分可包括發(fā)現(xiàn)所請(qǐng)求的嵌入式對(duì)象(即,初級(jí)嵌入式對(duì)象)本身是否具有嵌入式對(duì)象(即,次級(jí)嵌入式對(duì)象)。如果初級(jí)嵌入式對(duì)象不包含次級(jí)嵌入式對(duì)象,則渲染引擎142可繼續(xù)處理改變圖像性質(zhì)的渲染任務(wù)(例如,執(zhí)行JavaScript代碼)。然而,如果初級(jí)嵌入式對(duì)象包含一個(gè)或更多個(gè)次級(jí)嵌入式對(duì)象,則渲染引擎142向獲取服務(wù)器150請(qǐng)求次級(jí)嵌入式對(duì)象。該發(fā)現(xiàn)和請(qǐng)求嵌入式對(duì)象的進(jìn)程被重復(fù),直至渲染引擎發(fā)現(xiàn)、請(qǐng)求并接收了嵌入待渲染的網(wǎng)頁(yè)中的所有對(duì)象的內(nèi)容(例如,初級(jí)、次級(jí)、三級(jí)等)。

每個(gè)嵌入式項(xiàng)請(qǐng)求可以是任務(wù)列表中一旦獲取服務(wù)器150返回了內(nèi)容就被移除的任務(wù)。當(dāng)內(nèi)容被返回時(shí),渲染引擎142可添加用于處理內(nèi)容的任務(wù),其繼而可添加諸如改變圖像上的不透明度、運(yùn)行腳本等的附加任務(wù)。每個(gè)任務(wù)可與運(yùn)行時(shí)間關(guān)聯(lián)。一些任務(wù)可具有未來(lái)運(yùn)行時(shí)間。例如,為了使圖像淡入(或淡出),瀏覽器可向任務(wù)列表添加若干任務(wù),每個(gè)任務(wù)按照時(shí)間間隔改變圖像的不透明度。如下面更詳細(xì)地說(shuō)明的,相對(duì)于任務(wù)列表,渲染引擎142可使用虛擬時(shí)鐘(而非實(shí)時(shí))來(lái)確定任務(wù)何時(shí)準(zhǔn)備好運(yùn)行。

渲染引擎142施行任務(wù)列表中的進(jìn)程渲染任務(wù),直至渲染完成,例如,生成渲染結(jié)果。然后,渲染引擎142可將渲染結(jié)果存儲(chǔ)在渲染結(jié)果數(shù)據(jù)倉(cāng)庫(kù)148中和/或?qū)秩窘Y(jié)果提供給作出請(qǐng)求的進(jìn)程(例如,索引引擎110)。然后,作出請(qǐng)求的進(jìn)程(諸如索引引擎110)可將從渲染結(jié)果提取的信息用于處理網(wǎng)頁(yè)。例如,作出請(qǐng)求的進(jìn)程可使用JavaScript錯(cuò)誤、布局信息、樣式信息、廣告空間信息、獲取的資源的列表、效能統(tǒng)計(jì)等,其全部可包括在渲染結(jié)果中,但是否則不可用于作出請(qǐng)求的進(jìn)程。

系統(tǒng)100可通過(guò)網(wǎng)絡(luò)170與客戶(hù)端180和服務(wù)器190通信。網(wǎng)絡(luò)170可以是例如互聯(lián)網(wǎng),或者網(wǎng)絡(luò)170可以是利用例如網(wǎng)關(guān)裝置、網(wǎng)橋、交換機(jī)等實(shí)現(xiàn)的有線(xiàn)或無(wú)線(xiàn)局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)、這些的組合等。經(jīng)由網(wǎng)絡(luò)170,查詢(xún)引擎、web爬取引擎130和/或獲取服務(wù)器150可與客戶(hù)端180和/或服務(wù)器190通信以及向其/從其傳送數(shù)據(jù)。

系統(tǒng)100還可包括為了簡(jiǎn)明而未示出的其它組件。例如,索引引擎110、查詢(xún)引擎120、web爬取引擎130、渲染服務(wù)器140和獲取服務(wù)器150中的一個(gè)或更多個(gè)可跨一個(gè)或更多個(gè)計(jì)算裝置分布。類(lèi)似地,索引115、渲染結(jié)果數(shù)據(jù)倉(cāng)庫(kù)148、嵌入式項(xiàng)表152和圖像尺寸表156也可跨多個(gè)計(jì)算裝置存儲(chǔ)。在一些實(shí)現(xiàn)方式中,系統(tǒng)100的各種組件可共享計(jì)算裝置的硬件組件,或者可以是同一計(jì)算裝置的邏輯分區(qū)。

圖2是具有嵌入式對(duì)象的網(wǎng)頁(yè)的框圖。如圖中所示,網(wǎng)頁(yè)200可包含多個(gè)嵌入式項(xiàng)。這些嵌入式對(duì)象可包括(但不限于)其它網(wǎng)頁(yè)210、樣式表220、圖像文件230、所謂的緩存清除URL 240和JavaScript代碼250。另外的不同類(lèi)型的嵌入式對(duì)象當(dāng)然也是可能的。此外,嵌入網(wǎng)頁(yè)200中的每個(gè)對(duì)象可嵌入有其它對(duì)象。例如,嵌入網(wǎng)頁(yè)200中的網(wǎng)頁(yè)210可嵌入有其它網(wǎng)頁(yè)、圖像文件、樣式表等。同樣,嵌入網(wǎng)頁(yè)200中的樣式表220可嵌入有諸如背景圖像文件的其它對(duì)象。另外,嵌入網(wǎng)頁(yè)210或樣式表220中的每個(gè)對(duì)象可自己嵌入有甚至更多對(duì)象。為了將這樣的網(wǎng)頁(yè)完整地渲染成圖像文件,批處理渲染引擎必須請(qǐng)求嵌入式對(duì)象210-250(主級(jí)嵌入式對(duì)象)中的每一個(gè)、嵌入嵌入式對(duì)象210-250中的所有對(duì)象(次級(jí)嵌入式對(duì)象)以及嵌入嵌入式對(duì)象210-250中的對(duì)象中所嵌入的所有對(duì)象(三級(jí)嵌入式對(duì)象)等等。

如上所述,盡管個(gè)體用戶(hù)的web瀏覽器可有效地實(shí)時(shí)請(qǐng)求所有這些嵌入式對(duì)象并且使用它們來(lái)完整地渲染和顯示網(wǎng)頁(yè)200,但是批處理渲染引擎可被優(yōu)化以使得它不獲取重復(fù)或不必要的內(nèi)容,使得它不暫停以等待嵌入式對(duì)象的內(nèi)容,并且使得它盡可能快速地完成渲染,而不管任務(wù)的內(nèi)部定時(shí)如何。因此,為了有效地將大量爬取的網(wǎng)頁(yè)渲染成渲染結(jié)果,可采用諸如圖1所公開(kāi)的系統(tǒng)。

圖3是根據(jù)實(shí)現(xiàn)方式的批處理渲染引擎142的一些組件的框圖。批處理渲染引擎可包括圖3中未示出的附加組件。批處理渲染引擎142包括頁(yè)面任務(wù)列表305、虛擬時(shí)鐘310和渲染結(jié)果315。虛擬時(shí)鐘310可用于扭曲用于加載網(wǎng)頁(yè)的時(shí)間線(xiàn)并且避免由于等待獲取的資源而可能發(fā)生大量的錯(cuò)誤。虛擬時(shí)鐘310可在渲染進(jìn)程的開(kāi)始處被初始化為零或者當(dāng)前時(shí)鐘時(shí)間,并且只有當(dāng)渲染引擎不等待嵌入式項(xiàng)的獲取時(shí)以及當(dāng)頁(yè)面任務(wù)列表305中不存在準(zhǔn)備好在當(dāng)前時(shí)間運(yùn)行的任務(wù)時(shí)才可前進(jìn)。當(dāng)虛擬時(shí)鐘前進(jìn)時(shí),渲染引擎142基于頁(yè)面任務(wù)列表305使虛擬時(shí)鐘310前進(jìn)。換言之,渲染引擎142使虛擬時(shí)鐘310前進(jìn)至由接下來(lái)發(fā)生的任務(wù)表示的時(shí)間。從這個(gè)意義上講,獲取嵌入式項(xiàng)并且運(yùn)行JavaScript不花費(fèi)虛擬時(shí)間,這可避免實(shí)時(shí)(或個(gè)人)瀏覽器遇到的整個(gè)類(lèi)別的錯(cuò)誤。另外,渲染進(jìn)程可比任務(wù)列表中指定的時(shí)間快許多實(shí)時(shí)完成。例如,盡管任務(wù)“生成最終渲染”被設(shè)定為發(fā)生在20秒,虛擬時(shí)鐘通常實(shí)際在幾秒內(nèi)前進(jìn)至20秒,這取決于它花費(fèi)多長(zhǎng)時(shí)間來(lái)實(shí)際完成頁(yè)面任務(wù)列表305中的任務(wù)。頁(yè)面任務(wù)列表305中的“生成最終渲染”任務(wù)是告知批處理渲染引擎142渲染何時(shí)完成的停止任務(wù)的示例。

渲染引擎142可渲染嵌入器網(wǎng)頁(yè)的渲染結(jié)果315。渲染結(jié)果315可包括各種組件。例如,渲染結(jié)果315可包括渲染的頁(yè)面的圖像316。圖像316可以是將被顯示給實(shí)時(shí)(或個(gè)人)web瀏覽器的用戶(hù)的圖像,并且可用于例如將渲染的頁(yè)面的縮略圖顯示給用戶(hù)。渲染結(jié)果315還可包括文檔對(duì)象模型(DOM)樹(shù)317。DOM樹(shù)317表示網(wǎng)頁(yè)的HTML結(jié)構(gòu)。例如,系統(tǒng)可通過(guò)處理DOM樹(shù)來(lái)確定對(duì)用戶(hù)可見(jiàn)的文檔的令牌或文本。渲染結(jié)果315還可包括布局318。布局318包括用于網(wǎng)頁(yè)的每個(gè)元素的框,所述框指定圖像316中的元素的坐標(biāo)。例如,布局可包括DOM樹(shù)中的DOM節(jié)點(diǎn)的框表示(盡管并非每一個(gè)DOM元素均可具有對(duì)應(yīng)渲染框)??蚩砂凑諛?shù)結(jié)構(gòu)(也被稱(chēng)作渲染樹(shù))來(lái)組織。因此,例如,表可由布局中的框表示,并且段落可由布局中的另一框表示。因此,布局318提供網(wǎng)頁(yè)上元素出現(xiàn)在哪里、它在網(wǎng)頁(yè)上占據(jù)多少空間等的指示。因此,布局318提供關(guān)于網(wǎng)頁(yè)有多少為廣告、段落有多突出(例如,首屏出現(xiàn)或次屏出現(xiàn)(below-the-fold))、元素是否可見(jiàn)等的信息。布局318因此提供關(guān)于網(wǎng)頁(yè)的元素的幾何信息。渲染結(jié)果315還可包括錯(cuò)誤320。錯(cuò)誤320包括作為腳本(例如,JavaScript)運(yùn)行的結(jié)果遇到的錯(cuò)誤。渲染結(jié)果315還可包括在渲染期間獲取的嵌入式資源319的列表,并且可包括作為渲染進(jìn)程的部分生成的其它元素。因此,渲染結(jié)果315提供無(wú)法僅僅經(jīng)由從托管服務(wù)器對(duì)內(nèi)容的獲取而可用于作出請(qǐng)求的進(jìn)程的信息。例如,索引引擎可使用渲染結(jié)果信息來(lái)對(duì)索引中的元素進(jìn)行排名,以避免提供不可見(jiàn)元素作為片段的一部分,并且索引動(dòng)態(tài)生成的內(nèi)容。動(dòng)態(tài)生成的內(nèi)容是在渲染網(wǎng)頁(yè)之后存在但是不在所爬取的內(nèi)容中的內(nèi)容。

圖4是圖示出根據(jù)實(shí)現(xiàn)方式的批處理渲染引擎可渲染具有嵌入式對(duì)象的網(wǎng)頁(yè)的示例進(jìn)程400的流程圖。進(jìn)程400可由諸如圖1的系統(tǒng)100的系統(tǒng)執(zhí)行。該系統(tǒng)可使用進(jìn)程400來(lái)應(yīng)下游進(jìn)程(諸如廣告系統(tǒng)或互聯(lián)網(wǎng)索引系統(tǒng))的請(qǐng)求在批處理模式下生成網(wǎng)頁(yè)的渲染結(jié)果。在一些實(shí)現(xiàn)方式中,進(jìn)程400可由渲染服務(wù)器的批處理渲染引擎執(zhí)行,并且可響應(yīng)于來(lái)自作出請(qǐng)求的進(jìn)程的請(qǐng)求而發(fā)起。

進(jìn)程400可開(kāi)始于接收渲染網(wǎng)頁(yè)的請(qǐng)求(405)。在一些實(shí)現(xiàn)方式中,請(qǐng)求可包括所請(qǐng)求的網(wǎng)頁(yè)的URL和/或所獲取的內(nèi)容以及關(guān)聯(lián)的元數(shù)據(jù)(例如,爬取時(shí)間)。在一些實(shí)現(xiàn)方式中,并非接收網(wǎng)頁(yè)的內(nèi)容,批處理渲染引擎可接收在數(shù)據(jù)庫(kù)中網(wǎng)頁(yè)的內(nèi)容可用的通知并且可從該數(shù)據(jù)庫(kù)檢索該內(nèi)容和關(guān)聯(lián)的元數(shù)據(jù)(例如,爬取時(shí)間)。由于例如作出請(qǐng)求的進(jìn)程已經(jīng)獲取了內(nèi)容,可提供所獲取的內(nèi)容。批處理渲染引擎可通過(guò)將虛擬時(shí)鐘初始化并且將向任務(wù)列表添加停止任務(wù)來(lái)開(kāi)始渲染(410)。例如,批處理渲染引擎可將虛擬時(shí)鐘設(shè)定為零并且向任務(wù)列表添加停止任務(wù),其使得渲染引擎確定渲染在預(yù)定時(shí)間完成。與該停止任務(wù)關(guān)聯(lián)的運(yùn)行時(shí)間可以是大多數(shù)網(wǎng)頁(yè)在個(gè)體用戶(hù)的機(jī)器上完成加載的時(shí)間。例如,該時(shí)間可為15或20秒。作為開(kāi)始渲染的一部分,批處理渲染引擎還可向任務(wù)列表添加其它任務(wù),諸如獲取網(wǎng)頁(yè)的內(nèi)容(如果內(nèi)容沒(méi)有被提供的話(huà))以及處理網(wǎng)頁(yè)的內(nèi)容。例如,這些任務(wù)可按照虛擬時(shí)間零而被添加,因此它們可立即開(kāi)始。

然后,批處理渲染引擎可開(kāi)始施行任務(wù)列表中的任務(wù)(415)。例如,作為處理網(wǎng)頁(yè)的內(nèi)容的一部分,批處理渲染引擎可識(shí)別一個(gè)或更多個(gè)嵌入式項(xiàng)(420)。然后,批處理渲染引擎可向獲取服務(wù)器請(qǐng)求嵌入式項(xiàng)的內(nèi)容(425)。獲取服務(wù)器可以是圖1的獲取服務(wù)器150。在一些實(shí)現(xiàn)方式中,批處理渲染引擎可記錄它識(shí)別出哪些嵌入式項(xiàng)以及獲取服務(wù)器是否返回了相應(yīng)嵌入式項(xiàng)的內(nèi)容。在一些實(shí)現(xiàn)方式中,此嵌入式項(xiàng)的列表可被包括在網(wǎng)頁(yè)的渲染結(jié)果中。在批處理渲染引擎請(qǐng)求了嵌入式項(xiàng)之后,批處理渲染引擎可在等待獲取服務(wù)器返回內(nèi)容的同時(shí)繼續(xù)施行準(zhǔn)備好運(yùn)行的其它任務(wù)(415)。如果不存在在當(dāng)前虛擬時(shí)間準(zhǔn)備好運(yùn)行的任務(wù),批處理渲染引擎可等待來(lái)自獲取服務(wù)器的響應(yīng)。盡管獲取未完成,批處理渲染引擎不使虛擬時(shí)鐘前進(jìn),因此,批處理渲染引擎不暫停以等待獲取。

當(dāng)接收到來(lái)自獲取服務(wù)器的響應(yīng)時(shí),批處理渲染引擎可處理嵌入式項(xiàng)的內(nèi)容(430)。例如,響應(yīng)于接收到內(nèi)容,批處理渲染引擎可向任務(wù)列表添加諸如解析所接收的嵌入式項(xiàng)的內(nèi)容的任務(wù)。這些任務(wù)可被給予指示任務(wù)準(zhǔn)備好運(yùn)行的當(dāng)前虛擬時(shí)鐘的開(kāi)始時(shí)間(例如,虛擬時(shí)鐘上的當(dāng)前時(shí)間)。解析所接收的內(nèi)容(無(wú)論是用于原始請(qǐng)求的網(wǎng)頁(yè)還是用于嵌入式項(xiàng))可使得批處理渲染進(jìn)程向任務(wù)列表添加附加任務(wù)。例如,解析嵌入式項(xiàng)的內(nèi)容可發(fā)現(xiàn)附加嵌入式項(xiàng)(例如,次級(jí)嵌入式項(xiàng)),這可使得批處理渲染引擎請(qǐng)求嵌入式項(xiàng)并且當(dāng)它們被返回時(shí)解析其內(nèi)容。如果內(nèi)容包括腳本(例如,JavaScript),則運(yùn)行該腳本可使得執(zhí)行附加任務(wù),諸如生成布局或改變網(wǎng)頁(yè)的一個(gè)或更多個(gè)元素的外觀。這些任務(wù)中的一些可被調(diào)度以在未來(lái)開(kāi)始。例如,按照固定的間隔改變圖像的不透明度使得圖像對(duì)于用戶(hù)而言看起來(lái)就像它正在淡入一樣。不透明度的每個(gè)改變是任務(wù),并且腳本可使得若干這樣的任務(wù)被添加到任務(wù)列表,每個(gè)任務(wù)的運(yùn)行時(shí)間是當(dāng)前虛擬時(shí)鐘加指定的量。

作為渲染進(jìn)程的一部分,批處理渲染引擎可確定渲染是否完成(435)。該確定可例如在每次批處理渲染引擎完成任務(wù)時(shí)或者按照預(yù)定時(shí)間間隔等進(jìn)行。當(dāng)虛擬時(shí)鐘到達(dá)停止任務(wù)中指定的時(shí)間時(shí)渲染可完成。由于在對(duì)嵌入式項(xiàng)的獲取未完成的同時(shí)虛擬時(shí)鐘不前進(jìn),所以當(dāng)虛擬時(shí)鐘到達(dá)停止任務(wù)中指定的時(shí)間時(shí),批處理渲染引擎確信已接收到對(duì)每個(gè)獲取請(qǐng)求的響應(yīng)。因此,批處理渲染引擎從不暫停以等待資源。

如果渲染未完成(435,否),則批處理渲染引擎可繼續(xù)施行任務(wù)列表中的任務(wù),等待對(duì)一個(gè)或更多個(gè)嵌入式項(xiàng)的請(qǐng)求的響應(yīng)等。如果渲染完成(435,是),則批處理渲染引擎可完結(jié)所請(qǐng)求的網(wǎng)頁(yè)的渲染結(jié)果(440)并且將該渲染結(jié)果返回給作出請(qǐng)求的進(jìn)程。渲染結(jié)果的元素可能先前已作為通過(guò)批處理渲染引擎完成的任務(wù)的結(jié)果生成。例如,所獲取的嵌入式項(xiàng)的列表以及在運(yùn)行腳本的同時(shí)遇到的錯(cuò)誤可在渲染完成之前生成。其它元素(諸如確定布局)可在渲染完成之后出現(xiàn)。在一些實(shí)現(xiàn)方式中,批處理渲染引擎沒(méi)有確定布局直至渲染完成之后,除非作為渲染進(jìn)程的一部分運(yùn)行的腳本請(qǐng)求元素的位置。即使在渲染完成之前生成布局,批處理渲染引擎也可作為完結(jié)渲染結(jié)果的一部分最后一次生成布局。因此,完結(jié)渲染結(jié)果可包括生成新元素和收集已經(jīng)生成的元素。在一些實(shí)現(xiàn)方式中,批處理渲染引擎可將渲染結(jié)果存儲(chǔ)在存儲(chǔ)器中并且可向作出請(qǐng)求的進(jìn)程提供渲染結(jié)果的位置。在一些實(shí)現(xiàn)方式中,系統(tǒng)可將渲染結(jié)果與指示它何時(shí)生成的時(shí)間戳一起存儲(chǔ),并且可存儲(chǔ)渲染結(jié)果的不止一個(gè)版本。進(jìn)程400然后結(jié)束,其在批處理模式下利用針對(duì)批處理的優(yōu)化生成了渲染結(jié)果。

圖5是圖示出根據(jù)實(shí)現(xiàn)方式的批處理渲染引擎使虛擬時(shí)鐘前進(jìn)的示例進(jìn)程500的流程圖。進(jìn)程500可作為確定渲染是否完成(例如,圖4的步驟435)的一部分運(yùn)行,但是它也可在其它時(shí)間運(yùn)行(例如,周期性地運(yùn)行)。進(jìn)程500開(kāi)始于確定批處理渲染引擎是否正在等待嵌入式項(xiàng)的請(qǐng)求(505)。例如,如果批處理渲染引擎向獲取服務(wù)器請(qǐng)求了嵌入式項(xiàng)并且還未從獲取服務(wù)器接收到響應(yīng),則批處理渲染引擎正在等待。如果批處理渲染引擎正在等待(505,是),則虛擬時(shí)鐘不前進(jìn),并且批處理渲染引擎可施行在當(dāng)前虛擬時(shí)間準(zhǔn)備好運(yùn)行的任務(wù)(如果存在的話(huà)),或者可等待(510)。此步驟可作為圖4的步驟415的一部分執(zhí)行。如果批處理渲染引擎沒(méi)有在等待獲取請(qǐng)求(505,否),則批處理渲染引擎可確定任務(wù)列表中是否存在準(zhǔn)備好運(yùn)行的任務(wù)(515)。例如,如果任務(wù)列表中的任務(wù)具有等于虛擬時(shí)鐘的運(yùn)行時(shí)間,則任務(wù)準(zhǔn)備好運(yùn)行。如果任務(wù)準(zhǔn)備好運(yùn)行(515,是),則批處理渲染引擎可施行該任務(wù)(520)。施行該任務(wù)可向任務(wù)列表添加其它任務(wù),其中的一些任務(wù)可準(zhǔn)備好運(yùn)行,并且其它任務(wù)可具有在未來(lái)的運(yùn)行時(shí)間(例如,當(dāng)前虛擬時(shí)鐘時(shí)間加某一指定的時(shí)間)。此步驟也可作為圖4的步驟415的一部分執(zhí)行。如果不存在準(zhǔn)備好運(yùn)行的待決任務(wù)(515,否),則批處理渲染引擎可使虛擬時(shí)鐘前進(jìn)至任務(wù)列表中指定的下一運(yùn)行時(shí)間(525)。換言之,批處理渲染引擎使虛擬時(shí)鐘翹曲向前,以使得任務(wù)列表中排列的下一任務(wù)準(zhǔn)備好運(yùn)行。

如果任務(wù)列表中排列的下一任務(wù)是停止任務(wù)(530,是),則渲染完成。如果不是,則批處理渲染引擎可繼續(xù)施行待決任務(wù)(520)。進(jìn)程500演示了在存在準(zhǔn)備好運(yùn)行的待決任務(wù)的同時(shí)或者在等待對(duì)嵌入式項(xiàng)的獲取的同時(shí)如何不使虛擬時(shí)鐘前進(jìn)。因此,對(duì)于這些事件虛擬時(shí)鐘“保持靜止”,這可避免當(dāng)渲染引擎使用真實(shí)時(shí)鐘時(shí)遇到的一類(lèi)錯(cuò)誤。另外,進(jìn)程500演示了可如何使虛擬時(shí)鐘扭曲向前,以使得在一些情況下渲染進(jìn)程可花費(fèi)比任務(wù)規(guī)定的定時(shí)更少的真實(shí)時(shí)間(例如,等待使圖像淡入或播放動(dòng)畫(huà)的時(shí)間間隔)。這在嵌入式項(xiàng)可無(wú)需爬取而返回時(shí)尤其如此,如本文中將更詳細(xì)說(shuō)明的。當(dāng)然,將理解,檢查待決任務(wù)(515)和獲取請(qǐng)求(505)的順序可反轉(zhuǎn),并且實(shí)現(xiàn)方式不限于圖5所示的順序。

圖6是圖示出根據(jù)實(shí)現(xiàn)方式的獲取服務(wù)器將嵌入式項(xiàng)的內(nèi)容提供給批處理渲染引擎的示例進(jìn)程600的流程圖。進(jìn)程600可由諸如圖1的系統(tǒng)100的系統(tǒng)執(zhí)行。該系統(tǒng)可使用進(jìn)程600來(lái)響應(yīng)來(lái)自多個(gè)批處理渲染引擎的對(duì)嵌入式項(xiàng)的獲取請(qǐng)求。在一些實(shí)現(xiàn)方式中,進(jìn)程600可由獲取服務(wù)器執(zhí)行并且可響應(yīng)于來(lái)自批處理渲染引擎之一的請(qǐng)求而發(fā)起。

進(jìn)程600可開(kāi)始于獲取服務(wù)器接收嵌入式項(xiàng)的URL(605)。該URL可由批處理渲染引擎提供,并且可以是批處理渲染引擎所請(qǐng)求的多個(gè)URL中的一個(gè)。獲取服務(wù)器可將重寫(xiě)規(guī)則應(yīng)用于所請(qǐng)求的嵌入式項(xiàng)的URL(610)。該重寫(xiě)規(guī)則可以是圖1的URL重寫(xiě)規(guī)則154。重寫(xiě)規(guī)則可包括模板和重定向URL。應(yīng)用重寫(xiě)規(guī)則可包括確定URL是否與重寫(xiě)規(guī)則之一的模式或模板匹配。例如,模板可以是移除了任何查詢(xún)串的URL,并且系統(tǒng)可將查詢(xún)串從所請(qǐng)求的嵌入式項(xiàng)的URL移除以看它是否匹配模板。作為另一示例,模板可包括例如*和?的通配符,其指示任何字符可與通配符匹配的地方。

如果URL與模式匹配,則重寫(xiě)規(guī)則可提供重定向URL并且獲取服務(wù)器可用重定向URL取代所請(qǐng)求的嵌入式項(xiàng)的URL。應(yīng)用重寫(xiě)規(guī)則的一個(gè)原因在于允許獲取服務(wù)器識(shí)別返回相同內(nèi)容的URL并且使用重定向URL來(lái)避免不得不調(diào)度不必要的獲取。某些類(lèi)型的通常嵌入的項(xiàng)具有動(dòng)態(tài)生成的URL。例如,一些嵌入式項(xiàng)的URL取決于通過(guò)隨機(jī)數(shù)生成器生成的隨機(jī)數(shù)或者由日期和時(shí)間函數(shù)返回的當(dāng)前日期和時(shí)間。諸如這些的嵌入式對(duì)象(稱(chēng)作緩存清除跟蹤URL)通常用于確定網(wǎng)頁(yè)的獨(dú)特點(diǎn)擊(unique hit)或觀看次數(shù)以用于確定廣告成本或收益。盡管這樣的嵌入式對(duì)象的內(nèi)容通常是相同的,每次渲染引擎發(fā)現(xiàn)對(duì)象時(shí)為它生成獨(dú)特URL。因此,對(duì)于包含這樣的嵌入式項(xiàng)的網(wǎng)頁(yè),渲染引擎每次嘗試渲染網(wǎng)頁(yè)時(shí)將看到用于對(duì)象的新的不同的URL,并且在不應(yīng)用重寫(xiě)規(guī)則的情況下獲取服務(wù)器將一次又一次獲取相同的內(nèi)容。為了避免這一問(wèn)題,重寫(xiě)規(guī)則可應(yīng)用模板,其允許獲取服務(wù)器識(shí)別這些URL并將獲取請(qǐng)求重定向至存儲(chǔ)在重定向URL下的先前獲取的內(nèi)容。

應(yīng)用重寫(xiě)規(guī)則的另一原因在于識(shí)別列入黑名單的URL。重寫(xiě)規(guī)則還可包括識(shí)別列入黑名單的URL的規(guī)則或者用于列入黑名單的URL的模式或模板。例如,重寫(xiě)規(guī)則可包括模板和關(guān)聯(lián)的重定向URL、錯(cuò)誤或標(biāo)志。如果所請(qǐng)求的嵌入式項(xiàng)的URL與列入黑名單的URL或者列入黑名單的URL的模板匹配,則獲取服務(wù)器可將該URL識(shí)別為被列入黑名單。在一些實(shí)現(xiàn)方式中,應(yīng)用重寫(xiě)規(guī)則可使得URL被重定向URL替換。在一些實(shí)現(xiàn)方式中,應(yīng)用重寫(xiě)規(guī)則可將URL標(biāo)記為被列入黑名單,或者可提供錯(cuò)誤以作為對(duì)由該URL標(biāo)識(shí)的嵌入式項(xiàng)的請(qǐng)求的響應(yīng)而返回。

如果URL被列入黑名單(615,是),則獲取服務(wù)器可向請(qǐng)求批處理渲染引擎返回錯(cuò)誤(620)。該錯(cuò)誤可以是指示無(wú)法找到資源的標(biāo)準(zhǔn)瀏覽器錯(cuò)誤,或者告知渲染引擎不需要該資源或者可跳過(guò)該資源的特定錯(cuò)誤等。如果重寫(xiě)規(guī)則提供基于重寫(xiě)規(guī)則、硬編碼等中的標(biāo)志選擇的重定向URL,該錯(cuò)誤可由匹配重寫(xiě)規(guī)則從嵌入式項(xiàng)表提供。對(duì)該URL的獲取請(qǐng)求然后完成,并且進(jìn)程600結(jié)束。

如果URL未被列入黑名單(615,否),則獲取服務(wù)器可在嵌入式項(xiàng)數(shù)據(jù)倉(cāng)庫(kù)中查找重寫(xiě)的URL(625)。嵌入式項(xiàng)數(shù)據(jù)倉(cāng)庫(kù)可以是圖1的嵌入式項(xiàng)表152。如果原始URL與重寫(xiě)規(guī)則中標(biāo)識(shí)的模式匹配,重寫(xiě)的URL可以是由重寫(xiě)規(guī)則提供的重定向URL。如果URL不與重寫(xiě)規(guī)則中的任何模板匹配,則重寫(xiě)的URL可以是原始URL。如果URL在嵌入式項(xiàng)數(shù)據(jù)倉(cāng)庫(kù)中(625,是),則可選地獲取服務(wù)器可確定所請(qǐng)求的URL是否針對(duì)圖像(630)。這是可選的,并且在不針對(duì)圖像進(jìn)行測(cè)試的實(shí)現(xiàn)方式中,步驟630可被省略。所請(qǐng)求的嵌入式項(xiàng)是不是圖像可基于請(qǐng)求中的信息、URL本身、或者基于嵌入式項(xiàng)數(shù)據(jù)倉(cāng)庫(kù)中用于重寫(xiě)的URL的字段來(lái)確定。如果嵌入式項(xiàng)是圖像(630,是),則系統(tǒng)可在尺寸表中查找圖像的尺寸并且返回具有所述尺寸的虛假圖像,如關(guān)于圖7的進(jìn)程700更詳細(xì)說(shuō)明的。還將理解,在一些實(shí)現(xiàn)方式中,獲取服務(wù)器可在應(yīng)用重寫(xiě)規(guī)則之前、在查找嵌入式項(xiàng)數(shù)據(jù)倉(cāng)庫(kù)之前、或者在確定條目是否失效之后執(zhí)行步驟630。

如果所請(qǐng)求的嵌入式項(xiàng)不是圖像(630,否),則獲取服務(wù)器可確定嵌入式項(xiàng)表中的條目是否失效(645)。條目是否失效可取決于若干因素,諸如項(xiàng)的變化率、嵌入式項(xiàng)的類(lèi)型(例如,腳本、樣式表、圖像等)、瀏覽器渲染引擎正在渲染的網(wǎng)頁(yè)的重要性等。在一些實(shí)現(xiàn)方式中,嵌入式項(xiàng)表可具有指示條目永不失效的字段或值(例如,對(duì)于列入黑名單的嵌入式項(xiàng)的重定向URL)。如果條目沒(méi)有失效(645,否),則獲取服務(wù)器可將嵌入式項(xiàng)表中用于重寫(xiě)的URL的內(nèi)容返回給請(qǐng)求批處理渲染引擎(650),并且進(jìn)程600針對(duì)此嵌入式項(xiàng)結(jié)束。在一些實(shí)現(xiàn)方式中,返回內(nèi)容可包括獲取服務(wù)器提供嵌入式項(xiàng)表中的條目的位置作為響應(yīng),并且批處理渲染進(jìn)程利用該位置來(lái)訪問(wèn)內(nèi)容。

如果嵌入式項(xiàng)表中的條目失效(645,是)或者如果重寫(xiě)的URL不在嵌入式項(xiàng)數(shù)據(jù)倉(cāng)庫(kù)中(625,否),則獲取服務(wù)器可向web爬取器(例如,圖1的web爬取引擎130)請(qǐng)求對(duì)URL的獲取(635)。當(dāng)獲取服務(wù)器接收到所爬取的內(nèi)容時(shí),無(wú)需篡改或進(jìn)一步處理,它可將所接收的內(nèi)容存儲(chǔ)為嵌入式項(xiàng)數(shù)據(jù)倉(cāng)庫(kù)中的條目(640)。在一些實(shí)現(xiàn)方式中,獲取服務(wù)器可保存嵌入式項(xiàng)的內(nèi)容和爬取時(shí)間,而無(wú)需覆寫(xiě)嵌入式項(xiàng)的先前爬取的內(nèi)容和爬取時(shí)間。在一些實(shí)現(xiàn)方式中,獲取服務(wù)器可在嵌入式項(xiàng)表中保持一個(gè)條目,并且可不保留嵌入式項(xiàng)的先前爬取。無(wú)論如何,一旦被保存在嵌入式項(xiàng)表中,內(nèi)容就被緩存并且無(wú)需再次獲取,直至它變得失效。然后,獲取服務(wù)器可將所獲取的內(nèi)容返回給請(qǐng)求批處理渲染引擎(650),并且進(jìn)程600結(jié)束。

圖7是圖示出根據(jù)實(shí)現(xiàn)方式的獲取服務(wù)器將虛假圖像提供給批處理渲染引擎的示例進(jìn)程700的流程圖。進(jìn)程700可由諸如圖1的系統(tǒng)100的系統(tǒng)執(zhí)行。該系統(tǒng)可使用進(jìn)程700來(lái)響應(yīng)來(lái)自多個(gè)批處理渲染引擎的對(duì)嵌入網(wǎng)頁(yè)中的圖像的獲取請(qǐng)求。在一些實(shí)現(xiàn)方式中,進(jìn)程700可由獲取服務(wù)器執(zhí)行,并且可響應(yīng)于來(lái)自批處理渲染引擎之一的請(qǐng)求來(lái)發(fā)起。在一些實(shí)現(xiàn)方式中,獲取服務(wù)器可獨(dú)立于其它嵌入式項(xiàng)(例如,圖6的進(jìn)程600)執(zhí)行進(jìn)程700。在其它實(shí)現(xiàn)方式中,獲取服務(wù)器可將進(jìn)程700的元素并入包括其它嵌入式項(xiàng)的進(jìn)程(例如,圖6的進(jìn)程600)中。

進(jìn)程700可開(kāi)始于獲取服務(wù)器確定所請(qǐng)求的圖像在圖像尺寸表中是否具有條目(705)。圖像尺寸表可以是圖1的圖像尺寸表156。圖像尺寸表包括圖像的尺寸,其通過(guò)圖像的標(biāo)識(shí)符(諸如URL)來(lái)存儲(chǔ)。如果圖像不在尺寸表中(705,否)或者如果圖像在尺寸表中(705,是)但是失效(710,是),則獲取服務(wù)器可例如經(jīng)由web爬取引擎(諸如圖1的web爬取引擎130)調(diào)度對(duì)圖像的獲取(715)。在一些實(shí)現(xiàn)方式中,獲取服務(wù)器可使用尺寸表中的信息來(lái)確定條目是否失效。在一些實(shí)現(xiàn)方式中,獲取服務(wù)器可使用來(lái)自單獨(dú)的嵌入式項(xiàng)表的信息(如上面關(guān)于圖6的步驟645所描述的)以確定尺寸是否失效。因此,在一些實(shí)現(xiàn)方式中,獲取服務(wù)器可結(jié)合圖6的步驟645或者作為其一部分執(zhí)行步驟710。當(dāng)接收到圖像的內(nèi)容時(shí),獲取服務(wù)器可將圖像的條目添加到尺寸表中,該條目包括所獲取的圖像的尺寸(720)。在一些實(shí)現(xiàn)方式中,獲取服務(wù)器還可將所獲取的內(nèi)容存儲(chǔ)在嵌入式項(xiàng)表中,如上面作為圖6的步驟640的一部分描述的。

如果圖像在尺寸表中(705,是)并且未失效(710,否)或者在圖像已被獲取并存儲(chǔ)之后(720),系統(tǒng)可使用來(lái)自尺寸表的尺寸生成虛假圖像(725)。該虛假圖像可具有指定與所請(qǐng)求的圖像相同的尺寸但是內(nèi)容為空的圖像文件格式數(shù)據(jù)。系統(tǒng)可將虛假圖像返回(730)給作出請(qǐng)求的批處理渲染引擎,并且進(jìn)程700結(jié)束。

將理解,在一些實(shí)現(xiàn)方式中,進(jìn)程700的一些步驟可為可選的或者可作為其它處理的一部分執(zhí)行。例如,確定圖像的尺寸是否失效可作為圖6的步驟645的一部分執(zhí)行,并且可基于嵌入式項(xiàng)表中的信息。另外,步驟715可作為圖6的步驟635的一部分或者結(jié)合圖6的步驟635來(lái)執(zhí)行。換言之,獲取服務(wù)器可將進(jìn)程700的多個(gè)方面與進(jìn)程600的多個(gè)方面組合,諸如獲取圖像的內(nèi)容、確定緩存的獲取的內(nèi)容是否失效等。當(dāng)然,獲取服務(wù)器還可完全獨(dú)立于進(jìn)程600來(lái)執(zhí)行進(jìn)程700。因此,實(shí)現(xiàn)方式可包括進(jìn)程700的變型。

圖8示出可用于這里所描述的技術(shù)的一般計(jì)算機(jī)裝置800的示例,其可作為圖1的系統(tǒng)100和/或客戶(hù)端170操作。計(jì)算裝置800旨在表示各種示例形式的計(jì)算裝置,例如膝上型計(jì)算機(jī)、臺(tái)式計(jì)算機(jī)、工作站、個(gè)人數(shù)字助理、蜂窩電話(huà)、智能電話(huà)、平板、服務(wù)器以及其它計(jì)算裝置(包括可穿戴裝置)。這里所示的組件、其連接和關(guān)系以及它們的功能意在僅為示例,而不意在限制本文檔中所描述和/或要求保護(hù)的發(fā)明的實(shí)現(xiàn)方式。

計(jì)算裝置800包括經(jīng)由接口808連接的處理器802(例如,基于硅樹(shù)脂的硬件處理器)、存儲(chǔ)器804、存儲(chǔ)裝置806以及擴(kuò)展端口810。在一些實(shí)現(xiàn)方式中,計(jì)算裝置800可包括經(jīng)由接口808連接的收發(fā)器846、通信接口844和GPS(全球定位系統(tǒng))接收器模塊848以及其它組件。裝置800可通過(guò)通信接口844無(wú)線(xiàn)地通信,其可在需要的地方包括數(shù)字信號(hào)處理電路。組件802、804、806、808、810、840、844、846和848中的每一個(gè)可被安裝在公共母板上或者酌情以其它方式來(lái)安裝。

處理器802可處理用于在計(jì)算裝置800內(nèi)執(zhí)行的指令,包括存儲(chǔ)在存儲(chǔ)器804中或者存儲(chǔ)裝置806上以在外部輸入/輸出裝置(諸如,顯示器816)上顯示GUI的圖形信息的指令。顯示器816可以是監(jiān)視器或者平板觸摸屏顯示器。在一些實(shí)現(xiàn)方式中,連同多個(gè)存儲(chǔ)器和存儲(chǔ)器的類(lèi)型一起,可酌情使用多個(gè)處理器和/或多條總線(xiàn)。另外,可連接多個(gè)計(jì)算裝置800,其中每個(gè)裝置提供必要操作的部分(例如,作為服務(wù)器陣列、一組刀片服務(wù)器或者多處理器系統(tǒng))。

存儲(chǔ)器804將信息存儲(chǔ)在計(jì)算裝置800內(nèi)。在一個(gè)實(shí)現(xiàn)方式中,存儲(chǔ)器804是易失性存儲(chǔ)器單元。在另一實(shí)現(xiàn)方式中,存儲(chǔ)器804是非易失性存儲(chǔ)器單元。存儲(chǔ)器804還可以是另一形式的計(jì)算機(jī)可讀介質(zhì),諸如磁盤(pán)或光盤(pán)。在一些實(shí)現(xiàn)方式中,存儲(chǔ)器804可包括通過(guò)擴(kuò)展接口提供的擴(kuò)展存儲(chǔ)器。

存儲(chǔ)裝置806能夠?yàn)橛?jì)算裝置800提供大容量存儲(chǔ)。在一個(gè)實(shí)現(xiàn)方式中,存儲(chǔ)裝置806可以是或者可包括諸如軟盤(pán)裝置、硬盤(pán)裝置、光盤(pán)裝置或磁帶裝置、閃存存儲(chǔ)器或者其它相似的固態(tài)存儲(chǔ)器裝置或者裝置陣列的計(jì)算機(jī)可讀介質(zhì),包括存儲(chǔ)區(qū)域網(wǎng)絡(luò)或者其它配置的裝置。計(jì)算機(jī)程序產(chǎn)品可被有形地具體實(shí)現(xiàn)于此類(lèi)計(jì)算機(jī)可讀介質(zhì)中。計(jì)算機(jī)程序產(chǎn)品還可包括指令,所述指令在被執(zhí)行時(shí)執(zhí)行一個(gè)或多個(gè)方法,諸如上述那些方法。計(jì)算機(jī)或者機(jī)器可讀介質(zhì)是諸如存儲(chǔ)器804、存儲(chǔ)裝置806或者處理器802上的存儲(chǔ)器的存儲(chǔ)裝置。

接口808可以是管理計(jì)算裝置800的帶寬密集操作的高速控制器或者管理帶寬較不密集操作的低速控制器,或者這些控制器的組合。可提供外部接口840以允許裝置800與其它裝置的附近區(qū)域通信。在一些實(shí)現(xiàn)方式中,控制器808可耦合至存儲(chǔ)裝置806和擴(kuò)展端口814??砂ǜ鞣N通信端口(例如,USB、藍(lán)牙、以太網(wǎng)、無(wú)線(xiàn)以太網(wǎng))的擴(kuò)展端口可例如通過(guò)網(wǎng)絡(luò)適配器來(lái)耦合至諸如鍵盤(pán)、指點(diǎn)裝置、掃描儀的一個(gè)或多個(gè)輸入/輸出裝置或者諸如交換機(jī)或路由器的網(wǎng)絡(luò)裝置。

如圖所示,計(jì)算裝置800可按照多種不同的形式來(lái)實(shí)現(xiàn)。例如,它可被實(shí)現(xiàn)為標(biāo)準(zhǔn)服務(wù)器830或者多次實(shí)現(xiàn)于一組此類(lèi)服務(wù)器中。它還可被實(shí)現(xiàn)為機(jī)架服務(wù)器系統(tǒng)的一部分。另外,它可被實(shí)現(xiàn)于諸如膝上型計(jì)算機(jī)832、臺(tái)式計(jì)算機(jī)834或智能電話(huà)836的個(gè)人計(jì)算機(jī)中。整個(gè)系統(tǒng)可由彼此通信的多個(gè)計(jì)算裝置800構(gòu)成。其它配置也是可能的。

圖9示出可用于這里所描述的技術(shù)的一般計(jì)算機(jī)裝置900的示例,其可以是圖1的系統(tǒng)100。計(jì)算裝置900旨在表示各種示例形式的大型數(shù)據(jù)處理裝置,諸如服務(wù)器、刀片服務(wù)器、數(shù)據(jù)中心、大型機(jī)以及其它大型計(jì)算裝置。計(jì)算裝置900可以是具有多個(gè)處理器的分布式系統(tǒng),可能包括通過(guò)一個(gè)或多個(gè)通信網(wǎng)絡(luò)互連的附接網(wǎng)絡(luò)的存儲(chǔ)節(jié)點(diǎn)。這里所示的組件、其連接和關(guān)系以及它們的功能意在僅為示例,而并非意在限制本文檔中所描述和/或要求保護(hù)的發(fā)明的實(shí)現(xiàn)方式。

分布式計(jì)算裝置900可包括任何數(shù)量的計(jì)算裝置980。計(jì)算裝置980可包括經(jīng)局域網(wǎng)或廣域網(wǎng)、專(zhuān)用光學(xué)鏈路、調(diào)制解調(diào)器、網(wǎng)橋、路由器、交換機(jī)、有線(xiàn)或無(wú)線(xiàn)網(wǎng)絡(luò)等通信的服務(wù)器或機(jī)架服務(wù)器、大型機(jī)等。

在一些實(shí)現(xiàn)方式中,每個(gè)計(jì)算裝置可包括多個(gè)機(jī)架。例如,計(jì)算裝置980a包括多個(gè)機(jī)架958a-958n。每個(gè)機(jī)架可包括一個(gè)或多個(gè)處理器,諸如處理器952a-952n和962a-962n。處理器可包括數(shù)據(jù)處理器、附接網(wǎng)絡(luò)的存儲(chǔ)裝置以及其它計(jì)算機(jī)控制的裝置。在一些實(shí)現(xiàn)方式中,一個(gè)處理器可用作主處理器并且控制調(diào)度和數(shù)據(jù)分發(fā)任務(wù)。處理器可通過(guò)一個(gè)或多個(gè)機(jī)架交換機(jī)958來(lái)互連,并且一個(gè)或多個(gè)機(jī)架可通過(guò)交換機(jī)978來(lái)連接。交換機(jī)978可處理多個(gè)連接的計(jì)算裝置900之間的通信。

每個(gè)機(jī)架可包括諸如存儲(chǔ)器954和存儲(chǔ)器964的存儲(chǔ)器以及諸如956和966的存儲(chǔ)裝置。存儲(chǔ)裝置956和966可提供大容量存儲(chǔ),并且可包括易失性或非易失性存儲(chǔ)裝置,諸如附接網(wǎng)絡(luò)的盤(pán)、軟盤(pán)、硬盤(pán)、光盤(pán)、磁帶、閃存或者其它類(lèi)似的固態(tài)存儲(chǔ)器裝置或者裝置陣列,包括存儲(chǔ)區(qū)域網(wǎng)絡(luò)或者其它配置的裝置。存儲(chǔ)裝置956或966可在多個(gè)處理器、多個(gè)機(jī)架或者多個(gè)計(jì)算裝置之間共享,并且可包括存儲(chǔ)可由一個(gè)或多個(gè)處理器執(zhí)行的指令的計(jì)算機(jī)可讀介質(zhì)。存儲(chǔ)器954和964可包括例如易失性存儲(chǔ)器單元、非易失性存儲(chǔ)器單元和/或其它形式的計(jì)算機(jī)可讀介質(zhì),諸如磁盤(pán)或光盤(pán)、閃存、高速緩存、隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)和其組合。諸如存儲(chǔ)器954的存儲(chǔ)器還可在處理器952a-952n之間共享??衫缭诖鎯?chǔ)裝置956和存儲(chǔ)器954上存儲(chǔ)諸如索引的數(shù)據(jù)結(jié)構(gòu)。計(jì)算裝置900可包括未示出的其它組件,諸如控制器、總線(xiàn)、輸入/輸出裝置、通信模塊等。

整個(gè)系統(tǒng)(諸如系統(tǒng)100)可由彼此通信的多個(gè)計(jì)算裝置900構(gòu)成。例如,裝置980a可與裝置980b、980c和980d通信,并且這些裝置可被統(tǒng)稱(chēng)為系統(tǒng)100。作為另一示例,圖1的系統(tǒng)100可包括一個(gè)或多個(gè)計(jì)算裝置900。一些計(jì)算裝置可在地理上彼此靠近,而其它計(jì)算裝置可地理上彼此遠(yuǎn)離。計(jì)算裝置900的布局僅是示例,并且系統(tǒng)可采取其它布局或配置。

各種實(shí)現(xiàn)方式可包括可在可編程系統(tǒng)上執(zhí)行和/或解釋的一個(gè)或多個(gè)計(jì)算機(jī)程序中的實(shí)現(xiàn)方式,所述可編程系統(tǒng)包括耦合以從存儲(chǔ)系統(tǒng)接收數(shù)據(jù)和指令以及向存儲(chǔ)系統(tǒng)傳送數(shù)據(jù)和指令的形成在基底上的至少一個(gè)可編程處理器(可以是專(zhuān)用的或通用的)、至少一個(gè)輸入裝置和至少一個(gè)輸出裝置。

這些計(jì)算機(jī)程序(也稱(chēng)作程序、軟件、軟件應(yīng)用或代碼)包括用于可編程處理器的機(jī)器指令,并且可利用高級(jí)過(guò)程化和/或面向?qū)ο蟮木幊陶Z(yǔ)言和/或匯編/機(jī)器語(yǔ)言來(lái)實(shí)現(xiàn)。如本文所用,術(shù)語(yǔ)“機(jī)器可讀介質(zhì)”、“計(jì)算機(jī)可讀介質(zhì)”表示用于向可編程處理器提供機(jī)器指令和/或數(shù)據(jù)的任何非暫時(shí)性計(jì)算機(jī)程序產(chǎn)品、設(shè)備和/或裝置(例如,磁盤(pán)、光盤(pán)、存儲(chǔ)器(包括讀取存取存儲(chǔ)器)、可編程邏輯器件(PLD))。

這里所述的系統(tǒng)和技術(shù)可被實(shí)現(xiàn)于計(jì)算系統(tǒng)中,該計(jì)算系統(tǒng)包括后端組件(例如,作為數(shù)據(jù)服務(wù)器),或者包括中間件組件(例如,應(yīng)用服務(wù)器),或者包括前端組件(例如,具有圖形用戶(hù)接口或者Web瀏覽器的客戶(hù)端計(jì)算機(jī),用戶(hù)可通過(guò)其來(lái)與這里所述的系統(tǒng)和技術(shù)的實(shí)現(xiàn)方式交互),或者此類(lèi)后端、中間件或前端組件的任何組合。系統(tǒng)的組件可通過(guò)任何形式或介質(zhì)的數(shù)字?jǐn)?shù)據(jù)通信(例如,通信網(wǎng)絡(luò))來(lái)互連。通信網(wǎng)絡(luò)的示例包括局域網(wǎng)(“LAN”)、廣域網(wǎng)(“WAN”)和互聯(lián)網(wǎng)。

計(jì)算系統(tǒng)可包括客戶(hù)端和服務(wù)器??蛻?hù)端和服務(wù)器通常彼此遠(yuǎn)離,并且通常通過(guò)通信網(wǎng)絡(luò)來(lái)交互。客戶(hù)端和服務(wù)器的關(guān)系由于在相應(yīng)計(jì)算機(jī)上運(yùn)行并且彼此具有客戶(hù)端-服務(wù)器關(guān)系的計(jì)算機(jī)程序而產(chǎn)生。

描述了多個(gè)實(shí)現(xiàn)方式。然而,在不脫離本發(fā)明的精神和范圍的情況下,可進(jìn)行各種修改。另外,圖中所描繪的邏輯流程不要求所示的特定順序或者依次順序來(lái)實(shí)現(xiàn)期望的結(jié)果。另外,可提供其它步驟,或者可從所描述的流程除去步驟,并且可向所描述的系統(tǒng)增加其它組件或者從其移除組件。因此,其它實(shí)現(xiàn)方式在所附權(quán)利要求的范圍內(nèi)。

當(dāng)前第1頁(yè)1 2 3 
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1