專利名稱:網(wǎng)頁最優(yōu)化的制作方法
網(wǎng)頁最優(yōu)化
背景技術(shù):
萬維網(wǎng)為共享信息提供了方便的平臺。通過網(wǎng)站而提供的眾多服務(wù)包括銀行、購物和電子郵件?,F(xiàn)在,為了提供更好的服務(wù),許多公司向各訪問者提供定制的網(wǎng)頁。舉例來說,所述定制包括基于訪問者的位置提供氣象預(yù)報(bào)、選擇目標(biāo)廣告和利用網(wǎng)站提供對訪問者賬戶的訪問。由于發(fā)送給訪問者的各網(wǎng)頁是定制的,因此,托管所述網(wǎng)站的網(wǎng)絡(luò)服務(wù)器必須如訪問者所要求的那樣,根據(jù)需要創(chuàng)建每個定制的網(wǎng)頁。因此,提供定制的網(wǎng)頁會造成網(wǎng)絡(luò)服務(wù)器的處理資源緊張。網(wǎng)頁的日益普及還增加了網(wǎng)絡(luò)資源上用于發(fā)送和接收網(wǎng)頁的通信負(fù)載
發(fā)明內(nèi)容
在一個實(shí)施例中,一種方法包括選擇初始源代碼,識別所述初始源代碼的服務(wù)器端的可執(zhí)行部分和所述初始源代碼的服務(wù)器端的靜態(tài)部分,向所述初始源代碼的服務(wù)器端的靜態(tài)部分分配標(biāo)識符,將所述初始源代碼的服務(wù)器端的可執(zhí)行部分和所述標(biāo)識符組合以創(chuàng)建中間源代碼,其中,所述標(biāo)識符替換所述初始源代碼的服務(wù)器端的靜態(tài)部分,以及創(chuàng)建客戶機(jī)端的可執(zhí)行程序,其包括服務(wù)器端的靜態(tài)部分和所述中間源代碼,并且當(dāng)被執(zhí)行時其用所述初始源代碼的服務(wù)器端的靜態(tài)部分來替換所述中間源代碼中的所述標(biāo)識符。在某些實(shí)施例中,所述客戶機(jī)端的可執(zhí)行程序可被編碼,比如通過壓縮。在另一個實(shí)施例中,一種用于控制服務(wù)器計(jì)算機(jī)的方法包括在所述服務(wù)器計(jì)算機(jī)處接收請求,檢索與所述請求相關(guān)的最優(yōu)化源代碼,執(zhí)行一部分所述最優(yōu)化源代碼,替換執(zhí)行結(jié)果中的字符,并響應(yīng)于所述請求提供帶有替換字符的執(zhí)行結(jié)果。在又一個實(shí)施例中,一種設(shè)備包括耦合的網(wǎng)絡(luò)服務(wù)器計(jì)算機(jī),以通過網(wǎng)絡(luò)接收網(wǎng)頁請求,并響應(yīng)于該請求,選擇所請求的網(wǎng)頁的最優(yōu)化版本、執(zhí)行所述最優(yōu)化版本中的服務(wù)器端的可執(zhí)行代碼以及向請求者提供帶響應(yīng)首部(response header)的執(zhí)行結(jié)果,所述響應(yīng)首部表明所述執(zhí)行結(jié)果處于壓縮格式。在其它另一個實(shí)施例中,一種方法包括選擇初始源代碼,識別所述初始源代碼的服務(wù)器端的可執(zhí)行部分和所述初始源代碼的服務(wù)器端的靜態(tài)部分,向所述初始源代碼的服務(wù)器端的可執(zhí)行部分分配標(biāo)識符,將所述初始源代碼的服務(wù)器端的靜態(tài)部分和所述標(biāo)識符組合以創(chuàng)建中間源代碼,其中,所述標(biāo)識符替換所述初始源代碼的服務(wù)器端的可執(zhí)行部分,以及創(chuàng)建客戶機(jī)端的可執(zhí)行程序,其包括服務(wù)器端的可執(zhí)行部分和所述中間源代碼,并且當(dāng)被執(zhí)行時其用所述初始源代碼的服務(wù)器端的可執(zhí)行部分來替換所述標(biāo)識符。
結(jié)合附圖,根據(jù)下面的詳細(xì)說明可完全透徹地理解本公開。要強(qiáng)調(diào)的是,根據(jù)行業(yè)中的常規(guī)作法,許多特征并未按比例繪制。事實(shí)上,為了討論清楚,可任意地增加或減少許多特征的尺寸。此外,為簡單起見,未在所有附圖中示出所有特征。圖I示出用于實(shí)現(xiàn)網(wǎng)頁最優(yōu)化的系統(tǒng)。
圖2-7示出被處理的各個階段的實(shí)例文檔。圖8示出顯示由圖2-7中示出的實(shí)例文檔所產(chǎn)生的內(nèi)容的網(wǎng)絡(luò)瀏覽器窗口。圖9示出用于準(zhǔn)備壓縮文檔的處理。圖10示出用于送交最優(yōu)化網(wǎng)頁的處理。圖11示出用于從網(wǎng)絡(luò)服務(wù)器請求和接收最優(yōu)化內(nèi)容的處理。圖12-13和15示出被處理以創(chuàng)建最優(yōu)化文檔的各個階段的實(shí)例文檔。圖14示出替換的字符在存儲器中的存儲位置。·圖16示出用于準(zhǔn)備壓縮網(wǎng)頁的處理。圖17示出用于送交網(wǎng)頁的處理,其適用于以壓縮網(wǎng)頁的方式使用。圖18示出用于從網(wǎng)絡(luò)服務(wù)器請求和接收內(nèi)容的處理。圖19示出文檔,該文檔使用DIV標(biāo)簽來存儲網(wǎng)頁的所述靜態(tài)內(nèi)容和服務(wù)器端的可執(zhí)行部分。圖20示出用于測試最優(yōu)化網(wǎng)頁的處理。圖21說明另一個用于測試所述最優(yōu)化處理的處理。圖22示出用于將網(wǎng)絡(luò)服務(wù)器計(jì)算機(jī)的服務(wù)能力進(jìn)行最優(yōu)化的系統(tǒng)。圖23示出另一用于將網(wǎng)絡(luò)服務(wù)器計(jì)算機(jī)的服務(wù)能力進(jìn)行最優(yōu)化的系統(tǒng)。
具體實(shí)施例方式本說明書總體上涉及萬維網(wǎng)和一種改善網(wǎng)頁的方法。然而,應(yīng)當(dāng)理解的是,下述說明提供許多不同的實(shí)施例或?qū)嵗?,用于?shí)現(xiàn)本發(fā)明的不同特征。為簡化本說明書,組件和配置的特定實(shí)例描述如下。當(dāng)然,這些僅僅是實(shí)例而不旨在限制。參考圖1,示出用于實(shí)現(xiàn)網(wǎng)頁最優(yōu)化技術(shù)的系統(tǒng)100。所述系統(tǒng)包括服務(wù)器計(jì)算機(jī)102,其提供對文檔(如網(wǎng)頁)的訪問。服務(wù)器計(jì)算機(jī)102可執(zhí)行網(wǎng)絡(luò)服務(wù)器軟件,其接收網(wǎng)頁請求并通過傳輸網(wǎng)頁來響應(yīng)所述請求。實(shí)例網(wǎng)絡(luò)服務(wù)器軟件包括可從微軟獲得的國際互聯(lián)網(wǎng)絡(luò)信息服務(wù)器軟件和可從阿帕奇軟件基金會獲得的阿帕奇(Apache)軟件。響應(yīng)于請求,所述網(wǎng)絡(luò)服務(wù)器軟件選擇網(wǎng)頁文件,其包含用于產(chǎn)生所請求的網(wǎng)頁的源代碼。所述網(wǎng)絡(luò)服務(wù)器軟件執(zhí)行部分所述源代碼,并向客戶計(jì)算機(jī)104發(fā)送執(zhí)行結(jié)果??蛻粲?jì)算機(jī)104通過網(wǎng)絡(luò)106耦合至服務(wù)器計(jì)算機(jī)102??蛻粲?jì)算機(jī)104執(zhí)行網(wǎng)絡(luò)瀏覽器軟件,舉例來說,其通過向服務(wù)器計(jì)算機(jī)102請求網(wǎng)頁和向用戶顯示所接收的網(wǎng)頁,允許用戶訪問網(wǎng)絡(luò)應(yīng)用。所述網(wǎng)絡(luò)瀏覽器軟件也可執(zhí)行所接收的網(wǎng)頁的部分。網(wǎng)絡(luò)瀏覽器軟件的實(shí)例包括微軟的Internet Explorer、蘋果的Safari、Mozilla的Firefox和谷歌的Chrome。網(wǎng)絡(luò)106提供客戶計(jì)算機(jī)104與所述服務(wù)器計(jì)算機(jī)102之間的通信路徑。網(wǎng)絡(luò)106可包括多個有線或無線連接,并且,在客戶計(jì)算機(jī)104和服務(wù)器計(jì)算機(jī)102之間的所述通信路徑中,可存在零個或更多的額外計(jì)算機(jī)。網(wǎng)絡(luò)106可包括電連接、光學(xué)連接、射頻連接、任何其它適當(dāng)?shù)耐ㄐ胚B接或多種連接方法的組合。網(wǎng)絡(luò)106可包括設(shè)備,例如,交換機(jī)、路由器、集線器、多路復(fù)用器、信號分離器、調(diào)制器、解調(diào)器以及其它適當(dāng)?shù)脑O(shè)備?;蛘?,在環(huán)回接口(loopback interface)或虛擬化軟件的情況下,網(wǎng)絡(luò)106可是虛擬連接,其允許所述網(wǎng)絡(luò)瀏覽器軟件和所述網(wǎng)絡(luò)服務(wù)器軟件執(zhí)行于相同的計(jì)算機(jī)硬件上。網(wǎng)絡(luò)106還可包括未示出的額外的客戶機(jī)和服務(wù)器。網(wǎng)絡(luò)106的實(shí)例包括因特網(wǎng)(例如,公用的國際互聯(lián)網(wǎng))和內(nèi)部網(wǎng)(例如,非公用的聯(lián)合網(wǎng))。在其它實(shí)施例中,可通過客戶機(jī)104和服務(wù)器102請求和傳輸不同于網(wǎng)頁的文檔。舉例來說,所述文檔可以是可擴(kuò)展標(biāo)記語言(XML)文檔??蛻魴C(jī)104和服務(wù)器102可包括一個或多個設(shè)備(未示出),用于向計(jì)算機(jī)可讀介質(zhì)存儲數(shù)據(jù)和從其檢索數(shù)據(jù)。所述設(shè)備可并入客戶機(jī)104和/或服務(wù)器102,或直接或間接地附上所述設(shè)備,或者,也可通過網(wǎng)絡(luò)或數(shù)據(jù)總線或者它們的任意組合來訪問所述設(shè)備。示例設(shè)備包括寄存器、易失性存儲器(例如,隨機(jī)存取存儲器)和非易失存儲器(例如,硬盤驅(qū)動器或光驅(qū))。應(yīng)當(dāng)理解,對任何這些計(jì)算機(jī)可讀介質(zhì)來說,存儲數(shù)據(jù),其通常實(shí)質(zhì)上為二進(jìn)制,需要對有形物品(physical article)的狀態(tài)進(jìn)行轉(zhuǎn)換。舉例來說,向寄存器或向隨機(jī)存取存儲器存儲數(shù)據(jù)位通常包括對電容器充電或放電或是設(shè)置觸發(fā)器的狀態(tài)。向磁性介質(zhì)存儲數(shù)據(jù)位通常包括改變所述磁性介質(zhì)內(nèi)的一個或多個微粒子的磁性。向光盤存儲數(shù)據(jù)位通常包括燒灼有機(jī)染料或改變合金的狀態(tài)。因此,向計(jì)算機(jī)可讀介質(zhì)存儲數(shù)據(jù)位包括更新有形物品,以便它包含所述存儲數(shù)據(jù)位的表示。存儲更大或更復(fù)雜的數(shù)據(jù)是通過存儲它的所有組成位而實(shí)現(xiàn)的,或順序或同時或兩者兼有之。所有計(jì)算機(jī)存儲器或其它存儲設(shè)備的參考旨在覆蓋任何適當(dāng)?shù)挠?jì)算機(jī)可讀介質(zhì)。 圖2-7示出被處理的各個階段的實(shí)例文檔。圖2示出可存儲在服務(wù)器計(jì)算機(jī)102上的實(shí)例文檔202。如圖所示,實(shí)例文檔202是網(wǎng)頁文檔,其包含用于一個或多個計(jì)算機(jī)的指令,當(dāng)執(zhí)行所述指令時即產(chǎn)生視覺上可顯示的輸出,該輸出對人的肉眼來說實(shí)際可見的。例如,實(shí)例文檔202包括將由網(wǎng)絡(luò)服務(wù)器執(zhí)行的指令和將由網(wǎng)絡(luò)瀏覽器客戶機(jī)執(zhí)行的指令。所述指令確定可見輸出的內(nèi)容及其結(jié)構(gòu),例如,可顯示的元素相互之間的和相對于所述整個可見輸出的邊界的位置。實(shí)例文檔202包括首部203和主體部204。首部203包括服務(wù)器端包括聲明206,所述包括聲明206指示網(wǎng)絡(luò)服務(wù)器在送交實(shí)例文檔202的時侯合并另一個文檔的內(nèi)容。圖3示出對應(yīng)于第一處理步驟之后的實(shí)例文檔202的實(shí)例文檔302。具體地,實(shí)例文檔302包括參照服務(wù)器端包括聲明206而從所述文檔插入的內(nèi)容304。內(nèi)容304替換服務(wù)器端包括聲明206。圖4示出對應(yīng)于下一處理步驟之后的實(shí)例文檔302的實(shí)例文檔402。文檔302的服務(wù)器端的靜態(tài)部分已經(jīng)替換為標(biāo)識符404和406。所述標(biāo)識符具有結(jié)構(gòu),該結(jié)構(gòu)出現(xiàn)在初始文檔中的可能性不大。標(biāo)識符404為" |0001:01]〃的值,或是三個波浪字符,接著是管道符,然后是四位文件標(biāo)識符、冒號和兩位靜態(tài)文本標(biāo)識符。所述四位文件標(biāo)識符標(biāo)識文檔,比如實(shí)例文檔202。所述兩位靜態(tài)文本標(biāo)識符標(biāo)識文檔的一部分,比如在第一服務(wù)器端的可執(zhí)行部分之前的靜態(tài)文本的第一部分。標(biāo)識符406具有類似的結(jié)構(gòu),但是具有不同的兩位靜態(tài)文本標(biāo)識符,因?yàn)樗鼧?biāo)識相同文檔的不同部分。當(dāng)然,標(biāo)識符404和406僅僅是實(shí)例,并且所述標(biāo)識符可具有不同的結(jié)構(gòu),可能更長或更短,而且可以是數(shù)字、字母數(shù)字、二進(jìn)制或任何其它適當(dāng)?shù)母袷健D4還示出文檔302的被替換為標(biāo)識符404和406的部分現(xiàn)在存儲在存儲器408中。所替換的部分已經(jīng)位于可擴(kuò)展標(biāo)記語言(XML)標(biāo)簽之內(nèi),所述標(biāo)簽包括來自相關(guān)標(biāo)識符的值,其由文檔402中的內(nèi)容替換。因此,存儲器408包含對應(yīng)于標(biāo)識符404的第一部分410和對應(yīng)于標(biāo)識符406的第二部分412。
然后,通過壓縮操作,將存儲器408的內(nèi)容轉(zhuǎn)換成替代表示。通過這個壓縮操作,存儲器408中編碼的所述物理數(shù)據(jù)被轉(zhuǎn)換成不同的物理數(shù)據(jù)編碼,其可以存儲在相同的存儲器408或存儲在在不同的存儲器中。因此,所述壓縮編碼數(shù)據(jù)表示曾在存儲器408中的初始物理數(shù)據(jù)。可以使用任何適當(dāng)?shù)膲嚎s方法,比如ZIP、GZIP、壓縮、行程編碼、霍夫曼編碼、Lempel-Ziv編碼、開源ZLib庫或任何其它壓縮方法。一些壓縮方法具有對應(yīng)的解壓縮方法,其包括在多種不同的網(wǎng)絡(luò)瀏覽器中。舉例來說,許多網(wǎng)絡(luò)瀏覽器包括gzip解壓縮算法。因此,當(dāng)選擇gzip壓縮方法時,產(chǎn)生的文件可以由許多網(wǎng)絡(luò)瀏覽器解壓縮,而無需對所述網(wǎng)絡(luò)瀏覽器添加插件或進(jìn)行任何修改或補(bǔ)充。在某些實(shí)施例中,可使用不同于壓縮的編碼技術(shù)。例如,所述內(nèi)容可以被加密。對于許多壓縮庫,產(chǎn)生的輸出為二進(jìn)制格式并包括語法字符(包括字符串),其被認(rèn)為無效的,或者,在后面的步驟中,其在處理輸出的程序中具有特定的句法意義。因此,所述壓縮輸出可要求某些字符替換。舉例來說,空字符可由相應(yīng)的轉(zhuǎn)義碼替換,例如"\0"?!ぷ鳛榱硪粋€實(shí)例,換行字符的語法表示,例如"\r"和"\n"可以替換為轉(zhuǎn)義序列,例如"\\r"和"\\n",當(dāng)被評價時,其產(chǎn)生初始的文字文本??梢詫㈩愃频募夹g(shù)用于代碼定界符,例如"<%"和"%>"和"<!。替代地,所述二進(jìn)制輸出可由二進(jìn)制-文本編碼,例如uuencode或MME,來形成文本安全。作為另一個可選方案,可以使用下面參考圖19所述的處理技術(shù)來排除某些或所有字符替換的需要。圖5示出對應(yīng)于下一處理步驟之后的實(shí)例文檔402的實(shí)例文檔502。文檔502是適用于響應(yīng)于頁請求向網(wǎng)絡(luò)瀏覽器傳輸?shù)腏ava腳本網(wǎng)頁。文檔402的內(nèi)容被并入動態(tài)變量。文檔402中的引號被替換為所述引號的轉(zhuǎn)義碼。存儲器408的所述壓縮的和文本安全的表示被并入靜態(tài)變量。文檔502還引用外部的Java腳本源文件,build, js,其定義名稱SbuildPageO的函數(shù)。所述buildpage()函數(shù)接受所述靜態(tài)和動態(tài)變量作為參量,并執(zhí)行必要的處理,以解壓縮所述靜態(tài)數(shù)據(jù)和用來自解壓縮的靜態(tài)變量的對應(yīng)值來替換所述動態(tài)變量中的所述標(biāo)識符。圖6示出對應(yīng)于服務(wù)器端執(zhí)行之后的實(shí)例文檔502的實(shí)例文檔602。因此,圖6示出文檔,該文檔處于要從網(wǎng)絡(luò)服務(wù)器傳輸?shù)秸埱缶W(wǎng)絡(luò)瀏覽器的狀態(tài)中。所述動態(tài)變量中的服務(wù)器端可執(zhí)行代碼已經(jīng)被替換為所述代碼的結(jié)果。在本實(shí)例中,所述代碼產(chǎn)生一年中的月份列表。圖7示出對應(yīng)于執(zhí)行buildPage O函數(shù)之后的實(shí)例文檔602的實(shí)例文檔702。因此,圖7示出將被存儲在所述頁變量中的文檔。頁的靜態(tài)和動態(tài)部分已經(jīng)重新組合為如圖2和3中所示的它們的初始結(jié)構(gòu),但是所述服務(wù)器端的可執(zhí)行代碼已經(jīng)被執(zhí)行并被替換為所述執(zhí)行結(jié)果。因此,實(shí)例文檔702具有和所述網(wǎng)絡(luò)服務(wù)器已經(jīng)提供給所述網(wǎng)絡(luò)瀏覽器相同的內(nèi)容,前提是如果它已經(jīng)以常規(guī)的方式送交文檔302。圖8示出顯示由實(shí)例文檔702產(chǎn)生的內(nèi)容的網(wǎng)絡(luò)瀏覽器窗口 802。圖9示出用于準(zhǔn)備壓縮文檔的處理900。處理900開始于步驟902,對將要壓縮的一個或多個目標(biāo)文檔進(jìn)行標(biāo)識。所述文檔可以是網(wǎng)頁或其它文檔,其包括靜態(tài)內(nèi)容和可執(zhí)行代碼的混合。所述文檔可包括許多種類的可執(zhí)行代碼,包括可由文檔服務(wù)器或文檔接收器或二者執(zhí)行的代碼。然后,在步驟904中,標(biāo)識所述文檔的靜態(tài)部分和可執(zhí)行部分??梢灶A(yù)料的是,在大多數(shù)情況下,所述文檔將包括靜態(tài)和可執(zhí)行兩個部分,并且可具有各類型的許多部分,但所述文檔也可只包括一個部分,即靜態(tài)的或可執(zhí)行的。接下來,在步驟906中,所述靜態(tài)部分被從網(wǎng)頁的可執(zhí)行部分分離。給所述靜態(tài)部分分配標(biāo)識符。優(yōu)選地,在所述網(wǎng)頁中所述標(biāo)識符是唯一的,并且,它們可以在多個網(wǎng)頁中或整個網(wǎng)站上都是唯一的。所述標(biāo)識符用于標(biāo)記相對于所述可執(zhí)行部分的相應(yīng)的靜態(tài)部分的位置。替代地,標(biāo)識符可以分配給所述可執(zhí)行部分,并用于標(biāo)記它們相對于所述靜態(tài)部分的位置。接下來,在步驟908中,所述靜態(tài)部分被集中起來并被壓縮。所述靜態(tài)部分可以用它們的標(biāo)識符作標(biāo)簽。替代地,所述靜態(tài)部分可以連接在一起,并且它們相關(guān)的起始點(diǎn)連同它們的對應(yīng)標(biāo)識符一起存儲。也可存儲所述部分的長度,雖然這個信息可能并不必要,因?yàn)樗鲩L度可以由兩個連續(xù)部分的起始位置計(jì)算得出??梢允褂萌魏芜m當(dāng)?shù)膲嚎s方法,比如ZIP、GZIP、壓縮、行程編碼、霍夫曼編碼、Lempel-ZiV編碼、開源ZLib庫或任何其它壓縮方法。在某些實(shí)施例中,可以使用不同于壓縮的編碼技術(shù)。例如,所述內(nèi)容可以被加密。然后,在步驟908中,通過用對應(yīng)的轉(zhuǎn)義碼替換那些具有特定意義或通常不允許 在文本格式出現(xiàn)的字符,來將所述壓縮的靜態(tài)部分文本化。舉例來說,空字符(二進(jìn)制0x00)被替換為"\0",這是Java腳本中空字符的轉(zhuǎn)義碼。因此,產(chǎn)生的輸出是”文本安全的”。另一種將所述內(nèi)容文本化的方案是使用文本編碼方案,例如在MIIVIE中使用的base64編碼和如RFC 4648所述的它的變型。接著是步驟910,文本安全的被壓縮的靜態(tài)部分與來自步驟906的可執(zhí)行部分再次組合,以創(chuàng)建最優(yōu)化網(wǎng)頁。所述最優(yōu)化網(wǎng)頁可以是包括客戶機(jī)端可執(zhí)行代碼的Java腳本網(wǎng)頁,用于解壓縮所述被壓縮的靜態(tài)部分并將它們與所述服務(wù)器端的可執(zhí)行部分重新結(jié)合。圖10示出用于送交最優(yōu)化網(wǎng)頁(例如由處理900產(chǎn)生的網(wǎng)頁)的處理1000。舉例來說,所述處理1000可以由網(wǎng)絡(luò)服務(wù)器施用。處理1000從步驟1002開始,其中接收到對網(wǎng)頁的請求。接下來,在步驟1004中,檢索所請求的網(wǎng)頁的最優(yōu)化版本。在步驟1006中,由網(wǎng)絡(luò)服務(wù)器執(zhí)行所述網(wǎng)頁的任何服務(wù)器可執(zhí)行部分。接下來,在步驟1008,所述服務(wù)器端的結(jié)果被文本化。在由所述服務(wù)器端的可執(zhí)行代碼產(chǎn)生的所述輸出中檢索這樣的字符——其會在所述最優(yōu)化網(wǎng)頁的客戶機(jī)端的執(zhí)行過程中產(chǎn)生錯誤——例如引號。在前面圖2-8所示的實(shí)例中,所述服務(wù)器端的執(zhí)行結(jié)果被存儲在Java腳本變量中,而由所述服務(wù)器端的執(zhí)行所產(chǎn)生的引號會被解釋為結(jié)束那個變量的定義,從而導(dǎo)致譯碼器出錯。如果所述服務(wù)器端代碼產(chǎn)生引號,則那個字符必須由它的相應(yīng)的轉(zhuǎn)義字符串來替換,在引號前加反斜杠(\")。文本化這些字符防止了將要執(zhí)行所述最優(yōu)化網(wǎng)頁的網(wǎng)絡(luò)瀏覽器出錯。最后,在步驟1010中,產(chǎn)生的網(wǎng)頁被傳輸?shù)秸埱笳摺D11示出用于從網(wǎng)絡(luò)服務(wù)器請求和接收最優(yōu)化內(nèi)容的處理1100。處理1100適合于與處理1000結(jié)合使用。處理1100開始于步驟1102,傳輸對網(wǎng)頁的請求。所述請求可以是HTTP GET命令。接下來,在步驟1104中,接收最優(yōu)化網(wǎng)頁。在步驟1106中,由請求者執(zhí)行所述最優(yōu)化網(wǎng)頁。如前所述,所述最優(yōu)化網(wǎng)頁可以是Java腳本文檔,也可使用任何適當(dāng)?shù)某绦蛟O(shè)計(jì)語言。在客戶機(jī)上執(zhí)行所述最優(yōu)化網(wǎng)頁產(chǎn)生未壓縮網(wǎng)頁。接下來,在步驟1108中,顯示所述未壓縮網(wǎng)頁。如果所述未壓縮網(wǎng)頁包含額外的可執(zhí)行代碼,例如額外的Java腳本代碼,則也執(zhí)行該額外的可執(zhí)行代碼。在另一個實(shí)施例中,網(wǎng)頁最佳化系統(tǒng)可采用gzip inflate程序,其嵌入在許多常見的網(wǎng)絡(luò)瀏覽器中,例如,微軟的Internet Explorer、Mozilla的Firefox、谷歌的Chrome和蘋果的Safari等等。所述gzip文件格式和壓縮標(biāo)準(zhǔn)提供于RFC1951和1952中,其通過引用合并于此。如這些文獻(xiàn)中所述,gzip文件格式由數(shù)據(jù)塊序列組成。各數(shù)據(jù)塊可以使用不同的編碼技術(shù),包括deflate方法和存儲方法。因此,前面在圖2_11中所討論的最優(yōu)化方案可適用于在使用gzip解壓縮的同時仍允許執(zhí)行已壓縮文件內(nèi)的服務(wù)器端代碼。使用所述gzip文件格式來最優(yōu)化網(wǎng)頁的處理始于圖2中所示的文檔202。初步處理與之前參照圖3和4所述相同。隨后,處理文件以產(chǎn)生圖12中所示的實(shí)例文檔1202。實(shí)例文檔1202包含定義動態(tài)變量的Java腳本代碼,所述動態(tài)變量包含來自實(shí)例文檔402的服務(wù)器端可執(zhí)行部分。靜態(tài)變量包含來自存儲器408的服務(wù)器端靜態(tài)部分。如前所述,這些變量定義已經(jīng)被處理,從而為某些字符(例如,引號)添加轉(zhuǎn)義碼。實(shí)例文檔1202還引用Java腳本函數(shù)buildPage2,其定義于單獨(dú)的Java腳本文件build2. is中。實(shí)例文檔1202還包括帶有"http://EKK0_END_DYN !"值的令牌1204,以將所述文檔分為兩個部分。第一部分1206包括服務(wù)器端的可執(zhí)行部分,第二部分1208只包括服務(wù)器端的靜態(tài)部分。圖13示出對應(yīng)于下一處理步驟之后的文檔1202的文檔1302。文檔1302為gzip 兼容的文件格式,且包括第一塊1304和第二塊1306。第一塊1304包括多字節(jié)首部1308,其符合所述gzip文件格式。因?yàn)槭撞?308可包含無法打印的字符,所以在圖13中使用字符"X"來表示。首部1308指定第一塊使用gzip “存儲”編碼技術(shù)來進(jìn)行編碼。因此,第一部分1206中的人類可讀的內(nèi)容在第一塊1304中仍保持人類可讀。令牌1204用于確定第一塊1304的結(jié)尾,并且,如果不再需要則可以從第一塊1304除去令牌1204。第二塊1306包括多字節(jié)首部1310,其符合所述gzip文件格式。首部1310指定第二塊使用gzip “deflate”編碼技術(shù)來進(jìn)行編碼。因此,第二部分1208中的內(nèi)容已經(jīng)被壓縮,且在第二塊1306中不再是人類可讀的。將向網(wǎng)絡(luò)服務(wù)器提供文檔1302,以便可以執(zhí)行第一塊1304中的服務(wù)器端的可執(zhí)行代碼。正如至此所述,文檔1302可包含會引起所述網(wǎng)絡(luò)服務(wù)器譯碼錯誤的字符。舉例來說,首部1308和1310可以包括空字符(0x00),網(wǎng)絡(luò)服務(wù)器會將其錯誤地譯為對文件的結(jié)尾進(jìn)行標(biāo)記。類似地,第二塊1306可包括空字符。并且第二塊1306可包括字符串,所述服務(wù)器會將其譯為對服務(wù)器端的可執(zhí)行內(nèi)容的開始進(jìn)行標(biāo)記,例如,"<%"或" <一"。為了防止這些錯誤,文檔1302中可能引起出錯的字符和字符串已經(jīng)被替換為大寫X字符。當(dāng)然,在X字符的地方可使用任何其它適當(dāng)?shù)奶鎿Q字符。為了可在其它處理發(fā)生之后恢復(fù)文檔1302中的這些字符,存儲有關(guān)替換的信息。作為圖12和13所示的替換物,第一和第二塊的內(nèi)容可以交換,以便第一塊包含所述服務(wù)器端的靜態(tài)部分而第二塊包含所述服務(wù)器端的可執(zhí)行部分。當(dāng)然,可以理解的是,所述文檔可以包括多個塊,并且因此保持未壓縮的所述服務(wù)器端的可執(zhí)行部分可位于第一塊、最末塊或中間塊中。圖14示出替換的字符在存儲器1402中的存儲位置。存儲器1402是帶條目的序列,記錄著已經(jīng)被替換的字符的位置1404和值1406。位置1404可從文檔1302的開始、文檔1302的結(jié)尾或從任何其它適當(dāng)?shù)奈恢脕磉M(jìn)行計(jì)量。從文檔1302的結(jié)尾計(jì)量所述位置的一個優(yōu)點(diǎn)是當(dāng)隨后由所述網(wǎng)絡(luò)服務(wù)器執(zhí)行服務(wù)器端的可執(zhí)行代碼時,如果第一塊1304的長度改變,則位置1404相對于所述文檔1302的結(jié)尾并不會改變。如果位置1404是相對于文檔1302的開始計(jì)量的,那么它們必須根據(jù)第一塊1304的尺寸或長度的任何后續(xù)變化來對賬戶進(jìn)行更新。存儲器1402可不包括任何在第一塊首部1308中被替換的字符的條目,這是因?yàn)樵趫?zhí)行所述服務(wù)器端的可執(zhí)行代碼的時候?qū)⒉坏貌槐桓逻@個首部。雖然存儲器1402以序列示出,但是可以使用任何適當(dāng)?shù)拇鎯ζ鹘Y(jié)構(gòu),例如,鏈表或動態(tài)數(shù)組。替代地,可使用多個存儲器結(jié)構(gòu)。舉例來說,一個存儲器結(jié)構(gòu)可存儲空字符的位置,而第二存儲器結(jié)構(gòu)存儲另一個字符的位置,比如百分比符號。因此,字符值可以被暗中存儲,而不是明確地。圖15示出對應(yīng)于下一處理步驟之后的文檔1302的文檔1502。具體地,文檔1502顯示網(wǎng)絡(luò)服務(wù)器執(zhí)行文檔1302的第一塊1304中的服務(wù)器端的可執(zhí)行代碼的結(jié)果。文檔1502包括第一塊1504,其中所述服務(wù)器端的可執(zhí)行代碼已經(jīng)被替換為執(zhí)行結(jié)果。在示出的實(shí)例中,所述執(zhí)行結(jié)果是一年中的月份列表,但是,當(dāng)然,所述服務(wù)器結(jié)果可是任何適當(dāng)?shù)妮敵?。所述?zhí)行結(jié)果不包括任何需要轉(zhuǎn)義碼的字符。在其它情況中,所述執(zhí)行結(jié)果可包括需要轉(zhuǎn)義碼的字符,比如引號字符。在這些情況下,處理所述執(zhí)行結(jié)果,以用它們各自的轉(zhuǎn)義碼來替換所述字符。例如,引號字符(")可用反斜杠加引號字符(\")來替換。在完·成此處理之后,確定第一塊1504的長度,以便可以根據(jù)所述正確的塊長度來更新第一塊首部1508。最后,使用先前存儲在存儲器1402中的信息將所述語法字符插入回文檔1502。接著,產(chǎn)生的文檔可被傳輸?shù)秸埱缶W(wǎng)絡(luò)瀏覽器。清楚的是,執(zhí)行服務(wù)器端代碼可以提供小于、大于或與服務(wù)器端代碼本身大小相等的執(zhí)行結(jié)果。因此,第一塊1504可以大于所述gzip文件格式,允許單個數(shù)據(jù)塊。通常,所述gzip文件格式支持最多64千字節(jié)的單獨(dú)數(shù)據(jù)塊。為了應(yīng)付服務(wù)器端的執(zhí)行結(jié)果大于可以存儲在gzip數(shù)據(jù)塊中的情況,第一塊1504可被分成兩個或更多的gzip數(shù)據(jù)塊。通過在合適的塊邊界處簡單地插入一個或多個合適的gzip塊首部,可以輕易地將第一塊1504分成多個塊。因此,如果所述服務(wù)器端的執(zhí)行結(jié)果的大小為70千字節(jié),則第一塊1504被分成兩個快,第一個塊為64千字節(jié),第二個塊為6千字節(jié)。第二個塊會需要與第一塊首部1508相似的塊首部。Gzip塊首部的長度是5字節(jié),因此,將第一塊1504分成兩個塊將使文檔1502的總尺寸增加5個字節(jié)。在程序設(shè)計(jì)的層面上來講,增加文檔1502的大小可能需要分配新的和更大的存儲空間以容納文檔1502,因此,在某些實(shí)施例中,文檔1302和1502可以在第一塊1504和第二塊1506之間包括一個或多個虛假塊首部。虛假塊首部指定它的相關(guān)數(shù)據(jù)長度是零。通過將虛假塊首部包括在文檔1302,文檔1502將包括虛假塊,需要該虛假塊來處理第一塊1504大于可以存儲在單個gzip塊中的情況,而無需增加文檔1502的大小。如果不需要虛假塊,則它可以要么留在文檔1502中,要么被刪除。如果留在文檔1502中,則所述虛假首部塊并不會引起網(wǎng)絡(luò)瀏覽器或其它解壓縮所述gzip文件格式的程序出錯,這是因?yàn)樗鎏摷賶K首部塊指定它的相關(guān)塊的長度為零。因此,網(wǎng)絡(luò)瀏覽器或其它程序?qū)⑻幚硭鍪撞坎⒃陬A(yù)見下一首部塊(例如,塊1506的首部)之前讀取零字節(jié)。值得注意的是,第一塊1304中的服務(wù)器端的可執(zhí)行代碼是否超過64千字節(jié)或任何其它由所述gzip文件格式所施加的尺寸限制并非是對所公開的處理的限制。這主要是因?yàn)槲臋n1302并非必須是完全嚴(yán)格形成的gzip文件,因?yàn)樗荒苡蒰zip文件處理機(jī)解釋。此外,文檔1302被傳遞至網(wǎng)絡(luò)服務(wù)器,用于執(zhí)行所述服務(wù)器端的可執(zhí)行代碼。所述網(wǎng)絡(luò)服務(wù)器并不試圖解釋所述文件的gzip特征;它只是執(zhí)行所述服務(wù)器端的可執(zhí)行代碼。因此,第一塊1304是否超過gzip文件格式下允許的塊的大小是無所謂的。只有在執(zhí)行文檔1302之后(并被轉(zhuǎn)換成文檔1502),才需要考慮塊的大小。圖16示出用于準(zhǔn)備壓縮網(wǎng)頁的處理1600。所述處理1600開始于步驟1602,對將要壓縮的一個或多個目標(biāo)網(wǎng)頁進(jìn)行標(biāo)識。所述網(wǎng)頁可包括靜態(tài)內(nèi)容和可執(zhí)行代碼的混合,并且,所述可執(zhí)行代碼可以有許多形式,包括可由網(wǎng)絡(luò)服務(wù)器執(zhí)行的代碼和可由網(wǎng)絡(luò)瀏覽器執(zhí)行的代碼。然后,在步驟1604中,標(biāo)識所述網(wǎng)頁的靜態(tài)部分和服務(wù)器端的可執(zhí)行部分??梢灶A(yù)料的是,在大多數(shù)情況下,所述網(wǎng)頁將包括靜態(tài)部分和服務(wù)器端的可執(zhí)行部分這兩個部分,并且可以有各類型的多個部分,但是,所述網(wǎng)頁也有可只包括一個部分,即靜態(tài)部分或服務(wù)器端的可執(zhí)行部分。接下來,在步驟1606中,所述靜態(tài)部分被從網(wǎng)頁服務(wù)器端的可執(zhí)行部分分離出來。給所述靜態(tài)部分分配標(biāo)識符。優(yōu)選地,在所述網(wǎng)頁中所述標(biāo)識符是唯一的,并且它們在多個網(wǎng)頁中或整個網(wǎng)站上都可以是唯一。所述標(biāo)識符用于標(biāo)記相應(yīng)的靜態(tài)部分相對于所述服務(wù)器端的可執(zhí)行部分的位置。替代地,標(biāo)識符可分配給所述服務(wù)器端的可執(zhí)行部分,并被用于標(biāo)記它們相對于所述靜態(tài)部分的位置。
·
接下來,在步驟1608中,使用網(wǎng)絡(luò)瀏覽器可執(zhí)行程序模板,例如Java腳本模板,將所述靜態(tài)部分和服務(wù)器端的可執(zhí)行部分重新組合起來。所述Java腳本模板包括可由網(wǎng)絡(luò)瀏覽器執(zhí)行的代碼,當(dāng)被執(zhí)行時,其將導(dǎo)致網(wǎng)絡(luò)瀏覽器按照它們原來在步驟1602中所標(biāo)識的目標(biāo)網(wǎng)頁中已有的順序和結(jié)構(gòu)來重建所述靜態(tài)部分和所述服務(wù)器端的可執(zhí)行部分。所述Java腳本模板還包括標(biāo)記部分的結(jié)尾的令牌,其中,該部分包括所述服務(wù)器端的可執(zhí)行部分。替代地,所述模板可為非Java腳本程序。其它種類的模板的實(shí)例包括VB腳本程序、Flash程序、Java程序、Java小程序、AJAX組件、AJAX程序、微軟的SilverLight程序、微軟的ActiveX程序、動態(tài)鏈接庫(DLL)和cabinet (CAB)文件。繼續(xù)所述處理1600,在步驟1610中,使用修改的gzip編碼來壓縮所述Java腳本程序。使用所述gzip STORE技術(shù)對包括服務(wù)器端的可執(zhí)行代碼的所述Java腳本程序的部分進(jìn)行編碼,并使用gzip DEFLATE技術(shù)對Java腳本程序的其它部分進(jìn)行編碼。然后,在步驟1612中,將壓縮的Java腳本程序文本化。所述文本化處理包括用替換字符,例如字母X,來替換空字符。文本化還包括替換用于指示服務(wù)器端的可執(zhí)行代碼的開始的部分或所有標(biāo)記,例如"<%"。所替換字符的位置也被存儲起來,以便以后可將所述字符恢復(fù)為它們的初始值。取決于網(wǎng)絡(luò)服務(wù)器軟件的能力,某些或所有這些文本化步驟可能是不必要的。舉例來說,如果所述網(wǎng)絡(luò)服務(wù)器軟件可以處理空字符而不造成錯誤,則不需要將空字符文本化。圖17示出用于送交網(wǎng)頁的處理1700,其適用于使用由處理1600壓縮的網(wǎng)頁。舉例來說,可由網(wǎng)絡(luò)服務(wù)器進(jìn)行所述處理1700。處理1700從步驟1702開始,其中接收到對網(wǎng)頁的請求。請求的實(shí)例包括HTTPGET或POST消息。接下來,在步驟1704中,檢索所請求的網(wǎng)頁的最優(yōu)化版本。所述最優(yōu)化版本是使用例如處理1600的最優(yōu)化處理而創(chuàng)建的網(wǎng)頁的版本。舉例來說,所述網(wǎng)頁的最優(yōu)化版本可以與所述網(wǎng)頁的非最優(yōu)化版本進(jìn)行比較,以便確定自所述最優(yōu)化版本被創(chuàng)建以來所述網(wǎng)頁的非最優(yōu)化版本是否已經(jīng)修改。如果所述非最優(yōu)化版本已被更新,則所述最優(yōu)化版本可以例如通過執(zhí)行處理1600的步驟而得以更新。在步驟1706中,執(zhí)行所述最優(yōu)化網(wǎng)頁中的所述服務(wù)器端的可執(zhí)行代碼。這可以通過向網(wǎng)絡(luò)服務(wù)器執(zhí)行引擎提供所述最優(yōu)化網(wǎng)頁來實(shí)現(xiàn)。執(zhí)行所述最優(yōu)化網(wǎng)頁使得所述服務(wù)器端的可執(zhí)行代碼由所述執(zhí)行結(jié)果來替代。接下來,在步驟1708中,所述服務(wù)器端的結(jié)果被文本化。在由所述服務(wù)器端的可執(zhí)行代碼產(chǎn)生的輸出中檢索這樣的字符——其會在所述最優(yōu)化網(wǎng)頁的客戶機(jī)端執(zhí)行過程中產(chǎn)生錯誤——例如引號。在前面圖12-15所示的實(shí)例中,所述服務(wù)器端的執(zhí)行結(jié)果被存儲在Java腳本變量中,而由所述服務(wù)器端的執(zhí)行所產(chǎn)生的引號會被解釋為結(jié)束那個變量的定義,從而導(dǎo)致譯碼器出錯。如果所述服務(wù)器端代碼產(chǎn)生引號,則那個字符必須由它的相應(yīng)的轉(zhuǎn)義字符串來替換,引號前加反斜杠(Y )。文本化這些字符防止了將要執(zhí)行所述最優(yōu)化網(wǎng)頁的網(wǎng)絡(luò)瀏覽器出錯。然后,在步驟1710中,存儲前面被替換的字符。簡而言之,這個步驟涉及消除處理1600中的文本化步驟1612的影響。因此,空字符和百分比字符字符被恢復(fù)到存儲器(例如,存儲器1400)中所存儲的位置。在步驟1712中,修改所述HTTP響應(yīng)首部,以表明所述響應(yīng)內(nèi)容是使用gzip編碼的。最后,在步驟1714中,所述最優(yōu)化的網(wǎng)頁被傳輸?shù)秸埱笳?。圖18示出用于從網(wǎng)絡(luò)服務(wù)器請求和接收內(nèi)容的處理1800。處理1800適合于與處理1700結(jié)合使用。處理1800開始于步驟1802,其傳輸對網(wǎng)頁的請求。所述請求可以是HTTP GET命令、HTTP POST命令或任何其它適當(dāng)?shù)恼埱?。接下來,在步驟1804中,接收最·優(yōu)化網(wǎng)頁。在步驟1806中,所述最優(yōu)化網(wǎng)頁被解壓縮,例如,通過使用gzip inflate方法。因此,所述解壓縮步驟可以采用嵌入在許多網(wǎng)絡(luò)瀏覽器軟件程序中的解壓縮程序,其總體·上執(zhí)行起來要比解釋的解壓縮程序(例如以Java腳本寫就的)更快。接下來,在步驟1808中,執(zhí)行所述解壓縮的網(wǎng)頁。如前所述,所述最優(yōu)化網(wǎng)頁可以是Java腳本文檔,也可使用任何適當(dāng)?shù)某绦蛟O(shè)計(jì)語言。在客戶機(jī)上執(zhí)行所述最優(yōu)化網(wǎng)頁產(chǎn)生網(wǎng)頁結(jié)果。最后,在步驟1810中,顯示所述網(wǎng)頁結(jié)果。如果所述網(wǎng)頁結(jié)果包含額外的可執(zhí)行代碼,例如額外的Java腳本密碼,則也執(zhí)行該額外的可執(zhí)行代碼。上述技術(shù)使用由網(wǎng)絡(luò)瀏覽器執(zhí)行的Java腳本程序,來重構(gòu)和在有些情況下來解壓縮由網(wǎng)絡(luò)服務(wù)器提供的最優(yōu)化網(wǎng)頁。如上所述,初始網(wǎng)頁的所述靜態(tài)和動態(tài)部分被分離并放入Java腳本變量,例如圖5和12中所示的靜態(tài)和動態(tài)變量。將這些網(wǎng)頁部分放入Java腳本變量需要將某些字符(例如引號)“轉(zhuǎn)義”,以免執(zhí)行Java腳本程序時譯碼器出錯。這個要求增加了在準(zhǔn)備最優(yōu)化網(wǎng)頁時所必需的處理并且增大了產(chǎn)生的文件的大小,因?yàn)樗鲛D(zhuǎn)義字符序列長于它們所替換的字符。替換將所述靜態(tài)和動態(tài)部分放入Java腳本變量,它們可以被放入HTML DIV部分。這個變化示于圖19。圖19示出使用DIV標(biāo)簽來存儲網(wǎng)頁的所述靜態(tài)內(nèi)容和服務(wù)器端的可執(zhí)行部分的文檔1902。文檔1902包括第一 DIV部分1904,其提供所述服務(wù)器端的可執(zhí)行部分。第二DIV部分1906提供所述服務(wù)器端的靜態(tài)部分。在第三部分1908中創(chuàng)建代碼的所述Java腳本頁面加載兩個變量,dyn和stat,分別帶有第一 DIV部分1904和第二 DIV部分1906的內(nèi)容。因?yàn)閐yn和stat變量的內(nèi)容是從DIV部分加載的,所以在DIV部分內(nèi)不需要對字符(例如,引號)進(jìn)行轉(zhuǎn)義編碼。當(dāng)然,可以理解的是,圖19的技術(shù)可能無法完全避免處理某些語法字符的需要,例如空字符??偟膩碚f,使用如上所述的技術(shù)接收最優(yōu)化網(wǎng)頁的網(wǎng)絡(luò)瀏覽器將不能開始為用戶描畫或顯示未壓縮、重構(gòu)的網(wǎng)頁,直到該網(wǎng)絡(luò)瀏覽器已經(jīng)接收了完整的最優(yōu)化網(wǎng)頁。舉例來說,只是在全部的或幾乎全部的網(wǎng)頁602被接收以后,接收網(wǎng)頁602的網(wǎng)絡(luò)瀏覽器才開始創(chuàng)建網(wǎng)頁702。一旦所述網(wǎng)絡(luò)瀏覽器建立了網(wǎng)頁702,那么它必須翻譯網(wǎng)頁702,以便為用戶產(chǎn)生最終輸出,如在網(wǎng)絡(luò)瀏覽器窗口 802中所示。為了在網(wǎng)絡(luò)瀏覽器接收整個最優(yōu)化網(wǎng)頁之前允許該網(wǎng)絡(luò)瀏覽器開始解壓縮、重構(gòu)和顯示最優(yōu)化網(wǎng)頁,所述最優(yōu)化網(wǎng)頁可能被分成兩個或更多個大塊,它們可以被分別重構(gòu)。因此,網(wǎng)絡(luò)瀏覽器可以在開始重構(gòu)和顯示第一大塊的同時,繼續(xù)下載第二大塊。驗(yàn)證最優(yōu)化結(jié)果對于使用如上所述的最優(yōu)化技術(shù)而作出的網(wǎng)頁的顯示來說,通常首選的是,在視覺上不能與相應(yīng)的初始網(wǎng)頁的顯示區(qū)別開來。換句話說,對于所述最優(yōu)化處理來說,最好是按照從網(wǎng)絡(luò)瀏覽器輸出的那樣而不修改所述網(wǎng)頁,無論是在顯示器上、通過打印機(jī)或是其它方式。為了確保所述最優(yōu)化處理沒有負(fù)面地影響網(wǎng)頁,可以使用測試。圖20示出用于測試最優(yōu)化網(wǎng)頁的處理2000。處理2000開始于步驟2002,其產(chǎn)生最優(yōu)化網(wǎng)頁的定制版本。所述定制版本是使用類似于如上所述的那些處理而創(chuàng)建的,除了Java腳本包裝器稍加修改以外。特別地,所述包裝器包括聲明,以將未壓縮網(wǎng)頁的內(nèi)容作為文件保存在計(jì)算機(jī)可讀介質(zhì)上。這種保存可以補(bǔ)充或替換顯示未壓縮網(wǎng)頁的命令。舉例來說,所述Java腳本包裝器可以用對file, write O的調(diào)用來補(bǔ)充(或替換)對doc. write O 的調(diào)用。所述處理繼續(xù)到步驟2006,檢索初始網(wǎng)頁。這個步驟可以這樣實(shí)現(xiàn)通過暫時停止網(wǎng)絡(luò)服務(wù)器上的最優(yōu)化處理,或通過向不實(shí)施上述最優(yōu)化技術(shù)的網(wǎng)絡(luò)服務(wù)器請求網(wǎng)頁。產(chǎn)生的網(wǎng)頁可被保存為文件,例如,通過許多網(wǎng)絡(luò)瀏覽器中可用的“另存為”命令。接下來,在步驟2008中,將初始網(wǎng)頁結(jié)果與未壓縮的網(wǎng)頁結(jié)果進(jìn)行比較。如果該比較標(biāo)識兩個結(jié)果之間有差異,則可指示所述最優(yōu)化網(wǎng)頁可向終端用戶提供不同的顯示。其它情況下,所述差異也許沒關(guān)系。例如,所述差異可以包括網(wǎng)頁的空白、注釋或其它非功能的特征。用于步驟1508的比較處理可以排除報(bào)告差異,其被認(rèn)為是由某些種類的非功能內(nèi)容所引起的。如果比較步驟2008沒有標(biāo)識初始網(wǎng)頁結(jié)果和未壓縮網(wǎng)頁結(jié)果之間有任何差異,則將向終端用戶產(chǎn)生相同的網(wǎng)頁顯示,并且所述最優(yōu)化處理已經(jīng)證實(shí)未影響網(wǎng)頁內(nèi)容。圖21說明另一個用于測試所述最優(yōu)化處理的處理2100。處理2100始于步驟2102,其中,檢索最優(yōu)化網(wǎng)頁。接下來,在步驟2104中,使用網(wǎng)絡(luò)瀏覽器渲染引擎渲染所述最優(yōu)化網(wǎng)頁。所述渲染引擎的輸出是第一圖像,其包含網(wǎng)絡(luò)瀏覽器將向終端用戶顯示的內(nèi)容。然后,在步驟2106中,檢索與所述最優(yōu)化網(wǎng)頁對應(yīng)的初始網(wǎng)頁。并且,在步驟2108中,網(wǎng)絡(luò)瀏覽器渲染引擎將初始網(wǎng)頁渲染為第二圖像。接下來,在步驟2110狀,將第一圖像與第二圖像進(jìn)行對比。這個比較可以是所述圖像的逐個像素的比較。因此,所述比較包括產(chǎn)生初始和最優(yōu)化網(wǎng)頁的直觀表示,這可以是有形輸出。如果第一圖像與第二圖像吻合,則所述處理繼續(xù)到步驟2112,其中,所述最優(yōu)化處理被確認(rèn)為沒有影響網(wǎng)頁內(nèi)容。如果所述比較標(biāo)識在第一和第二圖像之間有一個或多個差異,在所述處理繼續(xù)到步驟2114,其中,報(bào)告所述差別。替代地,所述比較步驟可以只報(bào)告那些滿足某個閾值的差異,例如像素的數(shù)量或整個圖像面積的百分比。在步驟2114中,可以以任何適當(dāng)?shù)姆绞綀?bào)告由步驟2110中的比較所檢測到的差異。舉例來說,所述處理可以創(chuàng)建高亮度顯示所檢測到的差異的位置的第三圖像,例如,通過使用箭頭、圓圈或引起對所檢測到圖像的差異部分的注意的其它技術(shù)。替代或附加地,步驟2114可包括創(chuàng)建文本報(bào)告,其標(biāo)識是檢測到的差別的位置。然后,所述處理可以繼續(xù)進(jìn)行步驟2116,其中,對造成所述差別的一個或多個原因進(jìn)行調(diào)查和解決。
對于具有動態(tài)內(nèi)容的網(wǎng)頁來說,可能希望使用網(wǎng)頁渲染引擎的不同設(shè)定來重復(fù)處理1600。舉例來說,網(wǎng)頁可以合并基于鼠標(biāo)光標(biāo)的位置而動態(tài)調(diào)整的內(nèi)容(例如,所述網(wǎng)頁具有“鼠標(biāo)經(jīng)過”的內(nèi)容)。取決于鼠標(biāo)光標(biāo)的位置,所述網(wǎng)頁渲染引擎將產(chǎn)生不同的輸出。因此,對于幾個不同的鼠標(biāo)光標(biāo)位置來說,可以重復(fù)處理2100,以確保最優(yōu)化網(wǎng)頁結(jié)果與初始網(wǎng)頁結(jié)果匹配,包括它基于鼠標(biāo)光標(biāo)位置的動態(tài)反應(yīng)??梢噪S意選擇鼠標(biāo)光標(biāo)的測試位置,也可以由測試操作者來選擇以對準(zhǔn)網(wǎng)頁的某些部分。替代地,可為每個可能的鼠標(biāo)位置執(zhí)行處理2100。圖20和21中所述的兩個比較方法有著各自的優(yōu)點(diǎn)。圖21的圖像比較方法使用渲染的網(wǎng)頁內(nèi)容的圖像,因此,它以二者之一會呈現(xiàn)給終端用戶的形式將所述最優(yōu)化網(wǎng)頁結(jié)果與所述初始網(wǎng)頁結(jié)果進(jìn)行比較。因此,圖21的方法更直接地比較網(wǎng)頁的視覺結(jié)果。另一方面,圖20的所述方法比較用于產(chǎn)生所述網(wǎng)頁的底層代碼。因此,圖20的方法標(biāo)識可以造成網(wǎng)絡(luò)瀏覽器的視覺輸出差異的代碼。并且,因?yàn)閳D20的所述方法比較所有的底層代碼,因此它可標(biāo)識出最初視覺上并不明顯的差別。例如,圖20的所述方法可以標(biāo)識包括動態(tài)內(nèi)容的差別,它不僅僅取決于鼠標(biāo)光標(biāo)位置。 容易理解,圖20和21的兩個方法是相輔相成的。舉例來說,視覺差別可以由圖21的方法來檢測。為了幫助標(biāo)識視覺差別的根本原因,圖20的方法可用于高亮度顯示網(wǎng)頁被檢測到視覺差別的部分的代碼差別。現(xiàn)在說明圖22,其示出用于將網(wǎng)絡(luò)服務(wù)器計(jì)算機(jī)2202的服務(wù)能力進(jìn)行最優(yōu)化的系統(tǒng)2200??墒褂密浖?、硬件或兩者相結(jié)合的方法來實(shí)現(xiàn)系統(tǒng)2200。網(wǎng)絡(luò)服務(wù)器最優(yōu)化過濾器2204接收來自網(wǎng)絡(luò)2206的網(wǎng)頁請求。網(wǎng)絡(luò)2206可以是公用的國際互聯(lián)網(wǎng)、非公用的內(nèi)部網(wǎng)(例如,公司或本地網(wǎng)絡(luò))或任何其它種類的網(wǎng)絡(luò)。過濾器2204確定所請求的網(wǎng)頁是否存在最優(yōu)化版本。如果存在最優(yōu)化版本,則過濾器2204確定自從創(chuàng)建該最優(yōu)化版本以來是否更新了所述網(wǎng)頁的初始、非最優(yōu)化版本。如果需要,過濾器2204重新創(chuàng)建網(wǎng)頁的最優(yōu)化版本?;蛘?,過濾器2204可以使用網(wǎng)頁的非最優(yōu)化版本來處理所接收的請求,并標(biāo)記所述最優(yōu)化版本為要求重新創(chuàng)建。隨后,可重新創(chuàng)建最優(yōu)化版本,例如通過分別執(zhí)行線程或處理,因此防止請求響應(yīng)延遲。過濾器2204從數(shù)據(jù)存儲器2206檢索所請求的網(wǎng)頁最新的最優(yōu)化版本。數(shù)據(jù)存儲器2206可以是一個或多個硬盤驅(qū)動器、易失性存儲器(例如,RAM)、存儲陣列、存儲區(qū)域網(wǎng)絡(luò)或任何其它適當(dāng)?shù)臄?shù)據(jù)存儲器或系統(tǒng)。數(shù)據(jù)存儲器2206作為網(wǎng)絡(luò)服務(wù)器計(jì)算機(jī)2202的部分而示出,但是存儲數(shù)據(jù)2206也可以在計(jì)算機(jī)以外,并可經(jīng)由網(wǎng)絡(luò)2206或另一個網(wǎng)絡(luò)或接口而得以訪問。然后,過濾器2204向網(wǎng)絡(luò)服務(wù)器軟件2208提交請求,以處理所請求的網(wǎng)頁的最新的最優(yōu)化版本。網(wǎng)絡(luò)服務(wù)器軟件2208可以是可從微軟獲得的國際互聯(lián)網(wǎng)絡(luò)信息服務(wù)器、可從阿帕奇軟件基金會獲得的Apache或任何其它適當(dāng)?shù)木W(wǎng)絡(luò)服務(wù)器軟件。過濾器2204可向網(wǎng)絡(luò)服務(wù)器軟件2208提供所請求的網(wǎng)頁的最新的最優(yōu)化版本,或者,它可以向網(wǎng)絡(luò)服務(wù)器軟件2208提交HTTP或其它請求,其指定所請求的網(wǎng)頁的最新的最優(yōu)化版本為存儲在數(shù)據(jù)存儲器2206上的所請求網(wǎng)頁。網(wǎng)絡(luò)服務(wù)器軟件2208檢索所請求的網(wǎng)頁,必要時,執(zhí)行任何服務(wù)器端的可執(zhí)行代碼。然后,網(wǎng)絡(luò)服務(wù)器軟件2208向過濾器2204提供結(jié)果。過濾器2204執(zhí)行任何需要的后服務(wù)器端的執(zhí)行處理,例如恢復(fù)語法字符,如空字符和百分比符號。必要時,過濾器2204還修改HTTP響應(yīng)首部,以指示最優(yōu)化網(wǎng)頁的編碼類型,例如gzip。最后,過濾器2204通過網(wǎng)絡(luò)2206向請求者提供所述結(jié)果。過濾器2204可實(shí)現(xiàn)為軟件組件,其與網(wǎng)絡(luò)服務(wù)器軟件2208結(jié)合。舉例來說,所述過濾器可以是微軟IIS的插件。在其它實(shí)施例中,過濾器2204可以是單獨(dú)的計(jì)算機(jī),其邏輯上或物理上位于網(wǎng)絡(luò)服務(wù)器軟件2208和網(wǎng)絡(luò)2206之間。因此,過濾器2204可以是獨(dú)立的應(yīng)用類型設(shè)備。如系統(tǒng)2300中所示,因此對于兩個或更多個服務(wù)器來說向客戶機(jī)2302提供網(wǎng)頁源代碼的部分是可能的。例如,服務(wù)器端的靜態(tài)部分2312可以由服務(wù)器2304提供,作為中間客戶機(jī)端的可執(zhí)行程序2314的部分。服務(wù)器端的可執(zhí)行部分2310由服務(wù)器2306提供。 因?yàn)榉?wù)器端的靜態(tài)部分2312和中間客戶機(jī)端的可執(zhí)行程序2314在服務(wù)器端處于靜態(tài),因此服務(wù)器2304不需要訪問任何特定用戶或特定環(huán)境信息以響應(yīng)于請求而供給它們。因此,它們可以輕易地在許多服務(wù)器2304a間復(fù)制,這允許在靠近請求者的服務(wù)器處對該部分進(jìn)行預(yù)定位。舉例來說,這可以通過使用內(nèi)容分發(fā)網(wǎng)絡(luò)(例如Akamai)而得以實(shí)現(xiàn)。服務(wù)器2304 (或復(fù)制服務(wù)器2304a之一)接收請求和按照響應(yīng)提供中間客戶機(jī)端的可執(zhí)行程序2314,其包括服務(wù)器端的靜態(tài)部分2312??梢砸詨嚎s格式提供中間客戶機(jī)端的可執(zhí)行程序2314,例如gzip或zlib壓縮格式。中間客戶機(jī)端的可執(zhí)行程序2314包括將由接收客戶機(jī)2302執(zhí)行的命令,其將啟動指向服務(wù)器2306的第二請求,以接收所請求的網(wǎng)頁的服務(wù)器端的可執(zhí)行部分2310。優(yōu)選地,這個命令位置靠近中間客戶機(jī)端的可執(zhí)行程序2314的開始,以便可以由所述客戶機(jī)執(zhí)行之,而客戶機(jī)則繼續(xù)接收包括服務(wù)器端的靜態(tài)部分的后部分程序。當(dāng)客戶機(jī)2302從服務(wù)器2306接收服務(wù)器端的可執(zhí)行部分2310時,如前所述,服務(wù)器端的可執(zhí)行部分2310和服務(wù)器端的靜態(tài)部分2312被合并,并且產(chǎn)生的網(wǎng)頁被呈現(xiàn)給用戶。當(dāng)然,系統(tǒng)2300可以被進(jìn)一步修改,以便中間客戶機(jī)端的可執(zhí)行程序不包括服務(wù)器端的靜態(tài)部分,而是包括由客戶機(jī)執(zhí)行的命令,以從服務(wù)器2304和2304a之一檢索服務(wù)器端的靜態(tài)部分。因此,系統(tǒng)2300說明一種將服務(wù)器2306的服務(wù)能力最大化的方法,服務(wù)器2306是唯一要求訪問對請求來說特定的數(shù)據(jù)的服務(wù)器。例如,如果網(wǎng)頁用于提供對客戶的銀行事務(wù)的訪問,則只有服務(wù)器2306要求訪問客戶的銀行財(cái)務(wù)記錄。因?yàn)榉?wù)器2306不提供對于每個用戶相同的網(wǎng)頁部分,因此服務(wù)器2306可以更加有效地響應(yīng)客戶請求并可以響應(yīng)更多的顧客請求。本公開在通過網(wǎng)絡(luò)請求和送交網(wǎng)頁的環(huán)境中進(jìn)行描述。但是本領(lǐng)域技術(shù)人員會認(rèn)識到本公開可用于其它環(huán)境。例如,所述技術(shù)可以用在單個計(jì)算機(jī)內(nèi)而不需要網(wǎng)絡(luò)。作為另一個實(shí)例,所公開的技術(shù)也可應(yīng)用于網(wǎng)頁以外的文檔,例如解釋或編譯腳本或程序、XML文檔、數(shù)據(jù)庫記錄或任何其它類型的文檔。本公開已經(jīng)針對優(yōu)選方案進(jìn)行了描述。本領(lǐng)域技術(shù)人員在閱讀本公開之后而做出的顯而易見的改進(jìn)或修改視為在本申請的精神和范圍以內(nèi)??梢岳斫獾氖?,可以對上述公開進(jìn)行一些修改、改變和替換,并且在有些情況下本發(fā)明的一些特征將被采用,而不用對應(yīng)使用其它特征。因此,廣泛地解釋所附的權(quán)利要求是合適的,在某種意義上也符合本發(fā)明范圍。
權(quán)利要求
1.一種實(shí)現(xiàn)在與計(jì)算機(jī)可讀存儲介質(zhì)通信的計(jì)算機(jī)上的方法,所述方法包括 選擇包括指令的初始源代碼,當(dāng)所述指令被一個或多個計(jì)算機(jī)執(zhí)行時產(chǎn)生視覺輸出;標(biāo)識所述初始源代碼的服務(wù)器端的可執(zhí)行部分和所述初始源代碼的服務(wù)器端的靜態(tài)部分; 給所述初始源代碼的服務(wù)器端的靜態(tài)部分分配標(biāo)識符; 將初始源代碼的服務(wù)器端的可執(zhí)行部分與初始源代碼的服務(wù)器端的靜態(tài)部分分離; 組合所述初始源代碼的服務(wù)器端的可執(zhí)行部分和所述標(biāo)識符以創(chuàng)建中間源代碼,其中,所述標(biāo)識符替換所述初始源代碼的服務(wù)器端的靜態(tài)部分; 創(chuàng)建包含客戶機(jī)端的可執(zhí)行程序的服務(wù)器端的可執(zhí)行程序,其可操作為用所述初始源代碼的服務(wù)器端的靜態(tài)部分來替換所述中間源代碼的標(biāo)識符,其中,所述服務(wù)器端的可執(zhí)行程序包括所述中間源代碼和所述初始源代碼的服務(wù)器端的靜態(tài)部分,其中,當(dāng)服務(wù)器端的可執(zhí)行程序被一個或多個計(jì)算機(jī)執(zhí)行時產(chǎn)生視覺輸出;和 更新至少一部分計(jì)算機(jī)可讀介質(zhì),以包括所述服務(wù)器端的可執(zhí)行程序的表示。
2.如權(quán)利要求I所述的方法,還包括 壓縮所述服務(wù)器端的可執(zhí)行程序,以創(chuàng)建壓縮的服務(wù)器端的可執(zhí)行程序,其中,所述壓縮存儲所述中間程序。
3.如權(quán)利要求2所述的方法,其中所述壓縮以其初始格式存儲所述中間源代碼。
4.如權(quán)利要求2所述的方法,其中所述壓縮步驟使用下列之一gzip壓縮和zlib壓縮。
5.如權(quán)利要求2所述的方法,其中所述壓縮將所述中間源代碼存儲為第一數(shù)據(jù)塊。
6.如權(quán)利要求2所述的方法,其中所述壓縮將所述中間源代碼存儲為最后數(shù)據(jù)塊。
7.如權(quán)利要求2所述的方法,其中所述壓縮將所述中間源代碼存儲為數(shù)據(jù)塊,該數(shù)據(jù)塊既不是第一數(shù)據(jù)塊也不是最后數(shù)據(jù)塊。
8.如權(quán)利要求2所述的方法,還包括 確定語法字符在所述壓縮的服務(wù)器端的可執(zhí)行程序中的位置; 用變更的字符替換所述語法字符;和 存儲指示所述替換的語法字符的位置的數(shù)據(jù)。
9.如權(quán)利要求8所述的方法,其中所述數(shù)據(jù)將相對于所述壓縮服務(wù)器端的可執(zhí)行程序的結(jié)尾的位置進(jìn)行編碼。
10.如權(quán)利要求8所述的方法,還包括 在執(zhí)行過所述壓縮服務(wù)器端的可執(zhí)行程序之后,用語法字符替換所述變更的字符。
11.如權(quán)利要求2所述的方法,還包括 確定語法字符在所述壓縮的服務(wù)器端的可執(zhí)行程序中的位置;和 用所述語法字符的合乎句法的表示來替換所述語法字符。
12.如權(quán)利要求I所述的方法,其中所述客戶機(jī)端的可執(zhí)行程序是下列之一Java腳本程序、VB腳本程序、Flash程序、Java程序、Java小程序、AJAX組件、AJAX程序、SiIverLight程序、ActiveX程序、動態(tài)鏈接庫和cabinet文件。
13.如權(quán)利要求I所述的方法,其中在所述創(chuàng)建步驟中使用程序模板。
14.如權(quán)利要求I所述的方法,其中所述初始源代碼是部分網(wǎng)絡(luò)應(yīng)用程序的源代碼。
15.如權(quán)利要求14所述的方法,其中所述初始源代碼是網(wǎng)頁的源代碼。
16.如權(quán)利要求14所述的方法,其中,所示標(biāo)識符在所述網(wǎng)絡(luò)應(yīng)用中或者在整個網(wǎng)站上都是唯一的。
17.—種控制與計(jì)算機(jī)可讀存儲介質(zhì)通信的服務(wù)器計(jì)算機(jī)的方法,所述方法包括 在服務(wù)器計(jì)算機(jī)處接收請求; 確定對應(yīng)于所述請求的源代碼; 從計(jì)算機(jī)可讀存儲介質(zhì)檢索所述源代碼的最優(yōu)化版本; 由所述服務(wù)器計(jì)算機(jī)執(zhí)行所述源代碼的最優(yōu)化版本的服務(wù)器端的可執(zhí)行部分,以產(chǎn)生服務(wù)器端的執(zhí)行結(jié)果; 檢索被替換字符的位置; 在所述位置用第二字符替換服務(wù)器端的執(zhí)行結(jié)果中的第一字符;和 響應(yīng)于所述請求,在所述位置向服務(wù)器端的執(zhí)行結(jié)果提供第二字符。
18.如權(quán)利要求17所述的方法,還包括 修改響應(yīng)首部,以表明所述響應(yīng)的內(nèi)容被壓縮。
19.如權(quán)利要求18所述的方法,其中所述修改包括表明所述內(nèi)容選自下列之一gzip編碼和zlib編碼。
20.如權(quán)利要求18所述的方法,其中所述修改包括更新數(shù)據(jù)塊的塊首部,以指示所述塊的長度。
21.一種裝置,包括 包含在計(jì)算機(jī)上可執(zhí)行的指令的計(jì)算機(jī)可讀物理介質(zhì),并且當(dāng)該指令被執(zhí)行時使得計(jì)算機(jī) 選擇初始源代碼; 標(biāo)識初始源代碼的服務(wù)器端的可執(zhí)行部分和初始源代碼的服務(wù)器端的靜態(tài)部分; 向初始源代碼的服務(wù)器端的靜態(tài)部分分配標(biāo)識符; 將所述初始源代碼的服務(wù)器端的可執(zhí)行部分與所述初始源代碼的服務(wù)器端的靜態(tài)部分分離; 組合所述初始源代碼的服務(wù)器端的可執(zhí)行部分和所述標(biāo)識符,以創(chuàng)建中間源代碼,其中,所述標(biāo)識符替換所述初始源代碼的服務(wù)器端的靜態(tài)部分;和 創(chuàng)建客戶機(jī)端的可執(zhí)行程序,其可操作為用所述初始源代碼的服務(wù)器端的靜態(tài)部分來替換中間源代碼的標(biāo)識符,其中,所述客戶機(jī)端的可執(zhí)行程序包括所述中間源代碼和所述初始源代碼的服務(wù)器端的靜態(tài)部分,其中,當(dāng)由一個或多個計(jì)算機(jī)執(zhí)行所述客戶機(jī)端的可執(zhí)行程序時,產(chǎn)生視覺輸出。
22.—種設(shè)備,包括 可通信地耦合至網(wǎng)絡(luò)的網(wǎng)絡(luò)服務(wù)器計(jì)算機(jī),其可操作為接收來自請求者的網(wǎng)頁請求,并且響應(yīng)于所述請求的接收,可操作為選擇所請求的網(wǎng)頁的最優(yōu)化版本,以執(zhí)行所述最優(yōu)化版本中的服務(wù)器端的可執(zhí)行代碼,并向請求者提供帶應(yīng)答首部的執(zhí)行結(jié)果,所述應(yīng)答首部指示所述執(zhí)行結(jié)果為壓縮格式,其中所述網(wǎng)絡(luò)服務(wù)器計(jì)算機(jī)并不響應(yīng)于所述請求而執(zhí)行壓縮步驟。
23.如權(quán)利要求22所述的設(shè)備,其中所述最優(yōu)化版本包括以下列之一編碼的數(shù)據(jù)塊gzip壓縮格式和zlib壓縮格式。
24.如權(quán)利要求22所述的設(shè)備,其中所述網(wǎng)絡(luò)服務(wù)器計(jì)算機(jī)以壓縮格式向所述請求者提供定制響應(yīng),而沒有以該定制響應(yīng)壓縮任何數(shù)據(jù)。
25.如權(quán)利要求22所述的設(shè)備,其中所述網(wǎng)絡(luò)服務(wù)器計(jì)算機(jī)以壓縮格式向所述請求者提供定制響應(yīng),而沒有在接收所述請求之后壓縮任何數(shù)據(jù)。
26.如權(quán)利要求22所述的設(shè)備,其中所述響應(yīng)首部是HTTP響應(yīng)首部,并且其中所述網(wǎng)絡(luò)服務(wù)器計(jì)算機(jī)修改所述HTTP響應(yīng)首部,以便HTTP響應(yīng)首部表明所述執(zhí)行結(jié)果為壓縮格式。
27.如權(quán)利要求22所述的設(shè)備,其中所述網(wǎng)絡(luò)服務(wù)器計(jì)算機(jī)在向請求者提供所述執(zhí)行結(jié)果之前通過用空字符替換結(jié)果中的字符來修改所述執(zhí)行結(jié)果。
28.一種實(shí)現(xiàn)在與計(jì)算機(jī)可讀存儲介質(zhì)通信的計(jì)算機(jī)上的方法,所述方法包括 選擇包括指令的初始源代碼,當(dāng)所述指令被一個或多個計(jì)算機(jī)執(zhí)行時產(chǎn)生視覺輸出; 標(biāo)識初始源代碼的服務(wù)器端的可執(zhí)行部分和初始源代碼的服務(wù)器端的靜態(tài)部分; 給所述初始源代碼的服務(wù)器端的可執(zhí)行部分分配標(biāo)識符; 將初始源代碼的服務(wù)器端的靜態(tài)部分與初始源代碼的服務(wù)器端的可執(zhí)行部分分離; 組合所述初始源代碼的服務(wù)器端的靜態(tài)部分和所述標(biāo)識符以創(chuàng)建中間源代碼,其中,所述標(biāo)識符替換所述初始源代碼的服務(wù)器端的可執(zhí)行部分; 創(chuàng)建包含客戶機(jī)端的可執(zhí)行程序的服務(wù)器端的可執(zhí)行程序,其可操作為用所述初始源代碼的服務(wù)器端的可執(zhí)行部分來替換所述中間源代碼的標(biāo)識符,其中,所述服務(wù)器端的可執(zhí)行程序包括所述中間源代碼和所述初始源代碼的服務(wù)器端的可執(zhí)行部分,其中,當(dāng)服務(wù)器端可執(zhí)行程序被一個或多個計(jì)算機(jī)執(zhí)行時產(chǎn)生視覺輸出;和 更新至少一部分計(jì)算機(jī)可讀介質(zhì),以包括所述服務(wù)器端的可執(zhí)行程序的表示。
全文摘要
一種送交網(wǎng)頁的方法,包括將初始網(wǎng)頁分成服務(wù)器端的可執(zhí)行部分和服務(wù)器端的靜態(tài)部分。所述服務(wù)器端的靜態(tài)部分被替換為標(biāo)識符,然后,創(chuàng)建客戶機(jī)端的可執(zhí)行程序,其將用所述服務(wù)器端的靜態(tài)部分來替換所述標(biāo)識符??梢赃@樣壓縮客戶機(jī)端的可執(zhí)行程序以初始格式保存服務(wù)器端的可執(zhí)行部分。響應(yīng)于客戶機(jī)請求,所述網(wǎng)絡(luò)服務(wù)器執(zhí)行產(chǎn)生的程序并將所述輸出傳輸?shù)剿稣埱罂蛻魴C(jī)。在所述客戶機(jī)處,必要時解壓縮所述響應(yīng),并且執(zhí)行客戶機(jī)端的可執(zhí)行程序,以將所述服務(wù)器端的靜態(tài)部分與所述服務(wù)器端的執(zhí)行結(jié)果相結(jié)合。
文檔編號G06F17/00GK102804166SQ201080024233
公開日2012年11月28日 申請日期2010年6月1日 優(yōu)先權(quán)日2009年6月3日
發(fā)明者D·L·班諾拉, A·安格爾 申請人:克德科軟件股份有限公司