本發(fā)明涉及互聯(lián)網(wǎng)技術(shù),具體涉及一種網(wǎng)頁(yè)呈現(xiàn)方法、網(wǎng)頁(yè)數(shù)據(jù)處理方法和服務(wù)器。
背景技術(shù):
隨著互聯(lián)網(wǎng)應(yīng)用領(lǐng)域的不斷擴(kuò)展,通用計(jì)算機(jī)終端以及移動(dòng)終端越來(lái)越多地依賴于網(wǎng)頁(yè)來(lái)進(jìn)行信息展示和人機(jī)交互?,F(xiàn)有的瀏覽器支持使用HTML5(超文本標(biāo)記語(yǔ)言5)、CSS3(層疊樣式表3)、JavaScript等更新的技術(shù)來(lái)開(kāi)發(fā)豐富的功能,網(wǎng)頁(yè)已經(jīng)不僅僅是完成瀏覽的基本需求,并且越來(lái)越多的基于網(wǎng)頁(yè)(WEB)的應(yīng)用通常是一個(gè)單頁(yè)面應(yīng)用,每一個(gè)視圖通過(guò)異步的方式加載,這導(dǎo)致頁(yè)面初始化和使用過(guò)程中會(huì)加載越來(lái)越多的JavaScript代碼和CSS代碼。通常,在前端開(kāi)發(fā)中,會(huì)將網(wǎng)頁(yè)的超文本標(biāo)記文件(HTML)和超文本標(biāo)記文件引用的基于其它語(yǔ)言的文本分別作為單獨(dú)的文件存儲(chǔ)。在超文本標(biāo)記文件中對(duì)靜態(tài)資源文件進(jìn)行引用,以方便瀏覽器以增量方式加載來(lái)呈現(xiàn)。但是,隨著網(wǎng)頁(yè)越來(lái)越復(fù)雜,一個(gè)網(wǎng)頁(yè)往往會(huì)引用大量的靜態(tài)資源文件,這在拖慢網(wǎng)頁(yè)加載速度的同時(shí),會(huì)造成頁(yè)面訪問(wèn)時(shí)對(duì)服務(wù)器的請(qǐng)求量劇增,在增加服務(wù)器負(fù)擔(dān)的同時(shí),占用服務(wù)器和終端側(cè)的網(wǎng)絡(luò)帶寬,消耗終端的流量。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明提供一種網(wǎng)頁(yè)呈現(xiàn)方法、網(wǎng)頁(yè)數(shù)據(jù)處理方法和服務(wù)器,以加快瀏覽器對(duì)網(wǎng)頁(yè)的加載速度,同時(shí)減輕服務(wù)器的負(fù)擔(dān),較少對(duì)于網(wǎng)絡(luò)帶寬的占用和流量的消耗。
根據(jù)本發(fā)明的第一方面,提供一種網(wǎng)頁(yè)呈現(xiàn)方法,包括:
服務(wù)器將待展示網(wǎng)頁(yè)的靜態(tài)資源文件合并壓縮為至少一個(gè)靜態(tài)資源數(shù)據(jù)包并基于壓縮獲得的靜態(tài)資源數(shù)據(jù)包修改網(wǎng)頁(yè)的超文本標(biāo)記文件;
客戶端獲取網(wǎng)頁(yè)訪問(wèn)請(qǐng)求;
服務(wù)器根據(jù)所述網(wǎng)頁(yè)訪問(wèn)請(qǐng)求生成響應(yīng)頭,所述響應(yīng)頭包括表征請(qǐng)求訪問(wèn)的網(wǎng)頁(yè)的靜態(tài)資源文件包的內(nèi)容的一致性摘要信息;
客戶端根據(jù)所述響應(yīng)頭中的一致性摘要信息檢測(cè)所請(qǐng)求訪問(wèn)的網(wǎng)頁(yè)數(shù)據(jù)是否緩存在本地;客戶端在緩存有所請(qǐng)求訪問(wèn)的網(wǎng)頁(yè)數(shù)據(jù)時(shí),從緩存中讀取緩存的網(wǎng)頁(yè)的超文本標(biāo)記文件以及被引用的靜態(tài)資源數(shù)據(jù)包呈現(xiàn)所述網(wǎng)頁(yè)。
優(yōu)選地,所述方法還包括:
客戶端在未緩存所請(qǐng)求訪問(wèn)的網(wǎng)頁(yè)數(shù)據(jù)時(shí),根據(jù)所述網(wǎng)頁(yè)訪問(wèn)請(qǐng)求向所述服務(wù)器請(qǐng)求下載網(wǎng)頁(yè)的超文本標(biāo)記文件和被引用的靜態(tài)資源文件包呈現(xiàn)所述網(wǎng)頁(yè);以及,
將下載超文本標(biāo)記文件和靜態(tài)資源數(shù)據(jù)包進(jìn)行緩存。
優(yōu)選地,將待展示網(wǎng)頁(yè)的靜態(tài)資源文件合并壓縮為至少一個(gè)靜態(tài)資源數(shù)據(jù)包包括:
根據(jù)引用關(guān)系將被引用的靜態(tài)資源文件合并壓縮為至少一個(gè)靜態(tài)資源數(shù)據(jù)包;
在靜態(tài)資源數(shù)據(jù)包的文件名中增加一致性摘要信息,所述一致性摘要信息用于唯一表征所述靜態(tài)資源數(shù)據(jù)包的內(nèi)容。
優(yōu)選地,基于壓縮獲得的靜態(tài)資源數(shù)據(jù)包修改網(wǎng)頁(yè)的超文本標(biāo)記文件包括:
根據(jù)所述靜態(tài)資源數(shù)據(jù)包的路徑以及與靜態(tài)資源文件的對(duì)應(yīng)關(guān)系修改網(wǎng)頁(yè)的超文本標(biāo)記文件中對(duì)于靜態(tài)資源文件的引用內(nèi)容。
優(yōu)選地,客戶端根據(jù)所述響應(yīng)頭中的一致性摘要信息檢測(cè)所請(qǐng)求訪問(wèn)的網(wǎng)頁(yè)數(shù)據(jù)是否緩存在本地包括:
檢測(cè)本地是否緩存有文件名包括所述一致性摘要信息的靜態(tài)資源數(shù)據(jù)包。
優(yōu)選地,客戶端在緩存有所請(qǐng)求訪問(wèn)的網(wǎng)頁(yè)數(shù)據(jù)且所述網(wǎng)頁(yè)數(shù)據(jù)未過(guò)期時(shí),從緩存中讀取緩存的網(wǎng)頁(yè)的超文本標(biāo)記文件以及被引用的靜態(tài)資源數(shù)據(jù)包呈現(xiàn)所述網(wǎng)頁(yè);
其中,所述網(wǎng)頁(yè)數(shù)據(jù)過(guò)期期限從所述響應(yīng)頭中獲取。
根據(jù)本發(fā)明的第二方面,提供一種網(wǎng)頁(yè)數(shù)據(jù)處理方法,包括:
將待展示網(wǎng)頁(yè)的靜態(tài)資源文件合并壓縮為至少一個(gè)靜態(tài)資源數(shù)據(jù)包并基于壓縮獲得的靜態(tài)資源數(shù)據(jù)包修改網(wǎng)頁(yè)的超文本標(biāo)記文件;
根據(jù)接收的網(wǎng)頁(yè)訪問(wèn)請(qǐng)求生成響應(yīng)頭,所述響應(yīng)頭包括表征請(qǐng)求訪問(wèn)的網(wǎng)頁(yè)的靜態(tài)資源文件包的內(nèi)容的一致性摘要信息;
根據(jù)請(qǐng)求向客戶端發(fā)送修改后的超文本標(biāo)記文件和所述靜態(tài)資源數(shù)據(jù)包。
優(yōu)選地,將待展示網(wǎng)頁(yè)的靜態(tài)資源文件合并壓縮為至少一個(gè)靜態(tài)資源數(shù)據(jù)包包括:
根據(jù)引用關(guān)系將被引用的靜態(tài)資源文件合并壓縮為至少一個(gè)靜態(tài)資源數(shù)據(jù)包;
在靜態(tài)資源數(shù)據(jù)包的文件名中增加一致性摘要信息,所述一致性摘要信息用于唯一表征所述靜態(tài)資源數(shù)據(jù)包的內(nèi)容。
優(yōu)選地,基于壓縮獲得的靜態(tài)資源數(shù)據(jù)包修改網(wǎng)頁(yè)的超文本標(biāo)記文件包括:
根據(jù)所述靜態(tài)資源數(shù)據(jù)包的路徑以及與靜態(tài)資源文件的對(duì)應(yīng)關(guān)系修改網(wǎng)頁(yè)的超文本標(biāo)記文件中對(duì)于靜態(tài)資源文件的引用內(nèi)容。
根據(jù)本發(fā)明的第三方面,提供一種服務(wù)器,用于向客戶端提供網(wǎng)頁(yè)數(shù)據(jù),所述服務(wù)器包括:
處理器;以及,
用于存儲(chǔ)處理器可執(zhí)行指令的存儲(chǔ)器;
其中,所述處理器被配置為執(zhí)行如上所述的方法。
通過(guò)在服務(wù)器端將開(kāi)發(fā)獲取的網(wǎng)頁(yè)靜態(tài)資源文件進(jìn)行合并壓縮為靜態(tài)資源數(shù)據(jù)包,同時(shí),根據(jù)靜態(tài)資源數(shù)據(jù)包修改對(duì)應(yīng)的網(wǎng)頁(yè)超文本標(biāo)記文件,并在接收到訪問(wèn)請(qǐng)求時(shí)向客戶端反饋靜態(tài)資源數(shù)據(jù)包的一致性摘要信息,由此,可以使得客戶端瀏覽器以較小的空間對(duì)已經(jīng)訪問(wèn)過(guò)的網(wǎng)頁(yè)進(jìn)行緩存,在再次訪問(wèn)時(shí)不需要重新向服務(wù)器進(jìn)行請(qǐng)求,基于本地緩存的網(wǎng)頁(yè)數(shù)據(jù)進(jìn)行加載就可以實(shí)現(xiàn)網(wǎng)頁(yè)呈現(xiàn),本發(fā)明可以加快瀏覽器對(duì)網(wǎng)頁(yè)的加載速度,同時(shí)減輕服務(wù)器的負(fù)擔(dān),較少對(duì)于網(wǎng)絡(luò)帶寬的占用和流量的消耗。
附圖說(shuō)明
通過(guò)以下參照附圖對(duì)本發(fā)明實(shí)施例的描述,本發(fā)明的上述以及其它目的、特征和優(yōu)點(diǎn)將更為清楚,在附圖中:
圖1是現(xiàn)有技術(shù)的網(wǎng)頁(yè)呈現(xiàn)方法的流程圖;
圖2是本發(fā)明實(shí)施例的網(wǎng)頁(yè)呈現(xiàn)方法的流程圖;
圖3是本發(fā)明實(shí)施例將靜態(tài)資源文件合并壓縮為靜態(tài)資源數(shù)據(jù)包的示意圖;
圖4是應(yīng)用本發(fā)明實(shí)施例網(wǎng)頁(yè)呈現(xiàn)方法時(shí)客戶端一側(cè)的流程圖;
圖5是本發(fā)明實(shí)施例的用于進(jìn)行網(wǎng)頁(yè)呈現(xiàn)的服務(wù)器的示意圖。
具體實(shí)施方式
以下基于實(shí)施例對(duì)本發(fā)明進(jìn)行描述,但是本發(fā)明并不僅僅限于這些實(shí)施例。在下文對(duì)本發(fā)明的細(xì)節(jié)描述中,詳盡描述了一些特定的細(xì)節(jié)部分。對(duì)本領(lǐng)域技術(shù)人員來(lái)說(shuō)沒(méi)有這些細(xì)節(jié)部分的描述也可以完全理解本發(fā)明。為了避免混淆本發(fā)明的實(shí)質(zhì),公知的方法、過(guò)程、流程、元件和電路并沒(méi)有詳細(xì)敘述。
此外,本領(lǐng)域普通技術(shù)人員應(yīng)當(dāng)理解,在此提供的附圖都是為了說(shuō)明的目的,并且附圖不一定是按比例繪制的。
除非上下文明確要求,否則整個(gè)說(shuō)明書和權(quán)利要求書中的“包括”、“包含”等類似詞語(yǔ)應(yīng)當(dāng)解釋為包含的含義而不是排他或窮舉的含義;也就是說(shuō),是“包括但不限于”的含義。
在本發(fā)明的描述中,需要理解的是,術(shù)語(yǔ)“第一”、“第二”等僅用于描述目的,而不能理解為指示或暗示相對(duì)重要性。此外,在本發(fā)明的描述中,除非另有說(shuō)明,“多個(gè)”的含義是兩個(gè)或兩個(gè)以上。
下述具體表述的一些部分通過(guò)以下方面進(jìn)行闡述,包括過(guò)程、步驟、邏輯模塊、功能模塊、處理、原理圖,或者其他的符號(hào)化的表示,如編碼、數(shù)據(jù)位、數(shù)據(jù)流、信號(hào),或者計(jì)算機(jī)、處理器、控制器、器件或者存儲(chǔ)器的波形等。這些描述和表述常被熟悉數(shù)據(jù)處理領(lǐng)域的技術(shù)人員用來(lái)向同行有效地解釋他們的工作。這里的過(guò)程、流程、邏輯塊、功能等,一般被認(rèn)為是達(dá)到期望或預(yù)想結(jié)果的步驟或指示的自洽序列。步驟一般指物理量的物理操縱。通常,但非必要地,這些物理量采用電、磁、光學(xué)或量子信號(hào)等形式來(lái)表示,這些物理量能夠被儲(chǔ)存,轉(zhuǎn)移,合并,比較,并可在計(jì)算機(jī)或數(shù)據(jù)處理系統(tǒng)中操作控制。主要為了通用性,通常把這些信號(hào)稱作為位、波、波形、流、值、元素、符號(hào)、字母、術(shù)語(yǔ)、數(shù)字等類似的名稱,在計(jì)算機(jī)程序或軟件中則稱之為代碼(可能是目標(biāo)代碼,源代碼或二進(jìn)制代碼),這已經(jīng)被證明是方便的。
圖1是現(xiàn)有技術(shù)的網(wǎng)頁(yè)呈現(xiàn)方法的流程圖。如圖1所示,在現(xiàn)有技術(shù)中,網(wǎng)頁(yè)呈現(xiàn)按如下方式進(jìn)行:
步驟S110、獲取網(wǎng)頁(yè)訪問(wèn)請(qǐng)求。
步驟S120、根據(jù)網(wǎng)頁(yè)訪問(wèn)請(qǐng)求向網(wǎng)頁(yè)服務(wù)器請(qǐng)求網(wǎng)頁(yè)數(shù)據(jù)。
其中,存儲(chǔ)在服務(wù)器端的網(wǎng)頁(yè)數(shù)據(jù)包括網(wǎng)頁(yè)的超文本標(biāo)記文件和其引用的大量靜態(tài)資源文件,例如CSS文件,JavaScript文件以及圖片等。
步驟S130、根據(jù)下載獲得的網(wǎng)頁(yè)數(shù)據(jù)進(jìn)行呈現(xiàn)。
也就是說(shuō),現(xiàn)有技術(shù)在每次加載網(wǎng)頁(yè)時(shí),都會(huì)向服務(wù)器請(qǐng)求網(wǎng)頁(yè)數(shù)據(jù)文件,對(duì)于靜態(tài)資源文件都需要進(jìn)行重新下載。雖然,現(xiàn)有的瀏覽器也可以支持進(jìn)行緩存,但是,如上所述,由于網(wǎng)頁(yè)靜態(tài)資源文件越來(lái)越多,使得服務(wù)器會(huì)接收到大量的資源下載請(qǐng)求,對(duì)帶寬和服務(wù)器的計(jì)算能力都提出挑戰(zhàn)。
圖2是本發(fā)明實(shí)施例的網(wǎng)頁(yè)呈現(xiàn)方法的流程圖。如圖2所示,本發(fā)明實(shí)施例的網(wǎng)頁(yè)呈現(xiàn)方法包括如下步驟:
步驟S210、服務(wù)器將待展示網(wǎng)頁(yè)的靜態(tài)資源文件合并壓縮為至少一個(gè)靜態(tài)資源數(shù)據(jù)包并基于壓縮獲得的靜態(tài)資源數(shù)據(jù)包修改網(wǎng)頁(yè)的超文本標(biāo)記文件。
圖3是本發(fā)明實(shí)施例將靜態(tài)資源文件合并壓縮為靜態(tài)資源數(shù)據(jù)包的示意圖。在進(jìn)行網(wǎng)頁(yè)的前端開(kāi)發(fā)時(shí),網(wǎng)頁(yè)數(shù)據(jù)會(huì)包括超文本標(biāo)記文件、CSS文件、JavaScript文件以及圖片文件。其中,超文本標(biāo)記文件通常以.htm為擴(kuò)展名或.html為擴(kuò)展名,標(biāo)準(zhǔn)的超文本標(biāo)記文件都具有一個(gè)基本的整體結(jié)構(gòu),標(biāo)記一般都是成對(duì)出現(xiàn)(部分標(biāo)記除外例如:<br/>),即超文本標(biāo)記語(yǔ)言文件的開(kāi)頭與結(jié)尾標(biāo)志和超文本標(biāo)記語(yǔ)言的頭部與實(shí)體兩大部分。超文本標(biāo)記文件可以對(duì)網(wǎng)頁(yè)的結(jié)構(gòu)進(jìn)行規(guī)劃和限定,并通過(guò)引用靜態(tài)資源改變網(wǎng)頁(yè)內(nèi)容的排版或引入特殊控件或構(gòu)造動(dòng)態(tài)效果。
例如,超文本標(biāo)記文件可以引用CSS文件來(lái)改變網(wǎng)頁(yè)內(nèi)容的排版。在使用HTML定義頁(yè)面效果的網(wǎng)站中,往往需要大量或重復(fù)的表格和字體元素形成各種規(guī)格的文字樣式,這樣做的后果就是會(huì)產(chǎn)生大量的HTML標(biāo)簽,從而使頁(yè)面文件的大小增加。而將樣式的聲明單獨(dú)放到CSS樣式表中,可以大大的減小頁(yè)面的體積,這樣在加載頁(yè)面時(shí)使用的時(shí)間也會(huì)大大的減少。CSS是一種定義樣式結(jié)構(gòu)如字體、顏色、位置等的語(yǔ)言,被用于描述網(wǎng)頁(yè)上的信息格式化和現(xiàn)實(shí)的方式。CSS樣式可以直接存儲(chǔ)于超文本標(biāo)記文件中或者通過(guò)單獨(dú)的樣式單文件存儲(chǔ)。無(wú)論哪一種方式,樣式表包含將樣式應(yīng)用到指定類型的元素的規(guī)則。外部使用時(shí),樣式表規(guī)則被放置在一個(gè)帶有文件擴(kuò)展名_css的外部樣式單文檔中。樣式規(guī)則是可應(yīng)用于網(wǎng)頁(yè)中元素,如文本段落或鏈接的格式化指令。樣式規(guī)則由一個(gè)或多個(gè)樣式屬性及其值組成。內(nèi)部樣式表直接放在網(wǎng)頁(yè)中,外部樣式表保存在獨(dú)立的文檔中,網(wǎng)頁(yè)通過(guò)一個(gè)特殊標(biāo)簽鏈接引用外部樣式單。名稱CSS中的“層疊(cascading)”表示樣式單規(guī)則應(yīng)用于HTML文檔元素的方式。具體地說(shuō),CSS樣式單中的樣式形成一個(gè)層次結(jié)構(gòu),更具體的樣式覆蓋通用樣式。樣式規(guī)則的優(yōu)先級(jí)由CSS根據(jù)這個(gè)層次結(jié)構(gòu)決定,從而實(shí)現(xiàn)級(jí)聯(lián)效果。
同時(shí),超文本標(biāo)記文件可以引用JavaScript文件來(lái)增加網(wǎng)頁(yè)的動(dòng)態(tài)效果或增加交互控件。JavaScript是一種屬于網(wǎng)絡(luò)的腳本語(yǔ)言,已經(jīng)被廣泛用于Web應(yīng)用開(kāi)發(fā),常用來(lái)為網(wǎng)頁(yè)添加各式各樣的動(dòng)態(tài)功能,為用戶提供更流暢美觀的瀏覽效果。
隨著網(wǎng)絡(luò)帶寬的增加和開(kāi)發(fā)者對(duì)于網(wǎng)頁(yè)效果的不斷改進(jìn),現(xiàn)有的網(wǎng)頁(yè)的復(fù)雜程度不斷增加,同時(shí)由于很多網(wǎng)頁(yè)通過(guò)程序自動(dòng)生成,為了滿足程序生成的需要,網(wǎng)頁(yè)數(shù)據(jù)會(huì)被碎片化為大量的超文本標(biāo)記文件和其引用的靜態(tài)資源文件(例如CSS文件或JavaScript文件)。如果直接緩存這些文件,一方面會(huì)在本地存儲(chǔ)大量小文件,這會(huì)增加終端側(cè)的計(jì)算壓力和存儲(chǔ)壓力,另一方面,大量的文件導(dǎo)致可能出現(xiàn)文件重名,從而導(dǎo)致瀏覽器在加載緩存文件時(shí)出錯(cuò)。
為了避免上述問(wèn)題,本發(fā)明實(shí)施例對(duì)于開(kāi)發(fā)獲得的網(wǎng)頁(yè)數(shù)據(jù)中的靜態(tài)資源文件自動(dòng)進(jìn)行合并和壓縮,減少文件的數(shù)量。如圖3所示,下載獲得的網(wǎng)頁(yè)數(shù)據(jù)可能包括超文本標(biāo)記文件index.html,以及多個(gè)CSS文件a.css,b.css,c.css等等,還包括多個(gè)JavaScript文件a.js,b.js,c.js等等。index.htm引用多個(gè)CSS文件和多個(gè)JavaScript文件中的至少一部分,CSS文件還可以相互引用,JavaScript文件也可以相互引用。由此,可以通過(guò)自動(dòng)分析各文件之間的引用關(guān)系,將相互關(guān)聯(lián)的靜態(tài)資源文件進(jìn)行合并和壓縮。具體地,可以通過(guò)例如Webpack這樣的網(wǎng)頁(yè)數(shù)據(jù)壓縮工具將上述網(wǎng)頁(yè)數(shù)據(jù)的靜態(tài)資源文件合并壓縮為三個(gè)靜態(tài)資源數(shù)據(jù)包app.d38e99c3.css,app.d38e99c3.js,vendor.c28a16b1.js。Webpack是現(xiàn)有的前端資源模塊化管理和打包工具。它可以將許多松散的模塊按照依賴和規(guī)則打包成符合生產(chǎn)環(huán)境部署的前端資源。還可以將按需加載的模塊進(jìn)行代碼分隔,等到實(shí)際需要的時(shí)候再異步加載。
同時(shí),由于靜態(tài)資源數(shù)據(jù)包名稱變化,所以,需要在超文本標(biāo)記文件index.html中修改對(duì)于靜態(tài)資源引用部分的內(nèi)容,將原有的例如引用a.css的位置,修改為引用合并壓縮后的app.d38e99c3.css,并更新文件的路徑。
優(yōu)選地,本實(shí)施例在每個(gè)靜態(tài)資源數(shù)據(jù)包的文件名中增加與其數(shù)據(jù)內(nèi)容對(duì)應(yīng)的一致性摘要信息,所述一致性摘要信息為用于唯一表征數(shù)據(jù)內(nèi)容的一個(gè)字符串,這通??梢酝ㄟ^(guò)例如MD5(消息摘要算法第五版,Message Digest Algorithm 5th)等散列算法計(jì)算獲得。在信息安全技術(shù)中,經(jīng)常需要驗(yàn)證消息的完整性,散列(Hash)函數(shù)提供了這一服務(wù),它對(duì)不同長(zhǎng)度的輸入消息,產(chǎn)生固定長(zhǎng)度的輸出。這個(gè)固定長(zhǎng)度的輸出稱為原輸入消息的“散列”或“消息摘要”(Message digest)。MD5算法是典型的散列算法,例如,在文件名app.d38e99c3.css中,d38e99c3為其文件數(shù)據(jù)內(nèi)容對(duì)應(yīng)的MD5碼。
由此,在管理人員更新服務(wù)器上的網(wǎng)頁(yè)數(shù)據(jù)后,服務(wù)器對(duì)網(wǎng)頁(yè)數(shù)據(jù)進(jìn)行重新壓縮獲得靜態(tài)資源數(shù)據(jù)包的內(nèi)容發(fā)生變化,從而導(dǎo)致其文件名中的一致性摘要信息也發(fā)生變化,客戶端緩存的靜態(tài)資源數(shù)據(jù)包的名稱和更新后的并不相同,由此,不會(huì)錯(cuò)誤地將更新前的數(shù)據(jù)讀取并呈現(xiàn)??梢宰畲笙薅缺WC客戶端對(duì)于網(wǎng)頁(yè)數(shù)據(jù)更新的準(zhǔn)確性。
具體地,步驟S210包括:
步驟S211、根據(jù)引用關(guān)系將被引用的靜態(tài)資源文件合并壓縮為至少一個(gè)靜態(tài)資源數(shù)據(jù)包。
步驟S212、在靜態(tài)資源數(shù)據(jù)包的文件名中增加一致性摘要信息,所述一致性摘要信息用于唯一表征所述靜態(tài)資源數(shù)據(jù)包的內(nèi)容。
步驟S213、根據(jù)所述靜態(tài)資源數(shù)據(jù)包的路徑以及與靜態(tài)資源文件的對(duì)應(yīng)關(guān)系修改網(wǎng)頁(yè)的超文本標(biāo)記文件中對(duì)于靜態(tài)資源文件的引用內(nèi)容。
步驟S220、客戶端獲取網(wǎng)頁(yè)訪問(wèn)請(qǐng)求。
客戶端獲取到網(wǎng)頁(yè)訪問(wèn)請(qǐng)求后,會(huì)向服務(wù)發(fā)送該請(qǐng)求。
步驟S230、服務(wù)器根據(jù)所述網(wǎng)頁(yè)訪問(wèn)請(qǐng)求生成響應(yīng)頭,所述響應(yīng)頭包括表征請(qǐng)求訪問(wèn)的網(wǎng)頁(yè)的靜態(tài)資源文件包的內(nèi)容的一致性摘要信息。
在本實(shí)施例中,響應(yīng)頭是服務(wù)器針對(duì)網(wǎng)頁(yè)訪問(wèn)請(qǐng)求回復(fù)的HTTP信令頭。一方面,是否允許客戶端進(jìn)行網(wǎng)頁(yè)數(shù)據(jù)的緩存是由服務(wù)器發(fā)送給客戶端的響應(yīng)頭限定的,服務(wù)器可以在響應(yīng)頭的Cache-Control(緩存控制)字段中控制客戶端是否能夠進(jìn)行網(wǎng)頁(yè)數(shù)據(jù)緩存,還可以限定更新最長(zhǎng)時(shí)間。另一方面,服務(wù)器還可以在響應(yīng)頭的ETag字段中嵌入所述一致性摘要信息。
如上所述,所述一致性摘要信息為用于唯一表征數(shù)據(jù)內(nèi)容的一個(gè)字符串,這通??梢酝ㄟ^(guò)例如MD5(消息摘要算法第五版,Message Digest Algorithm 5th)等散列算法計(jì)算獲得。
客戶端接收到所述響應(yīng)頭后,可以基于該一致性摘要信息判斷網(wǎng)頁(yè)數(shù)據(jù)是否緩存在本地。
步驟S240、客戶端檢測(cè)所請(qǐng)求訪問(wèn)的網(wǎng)頁(yè)數(shù)據(jù)是否緩存在本地,如果是,則執(zhí)行步驟S250,如果否,則執(zhí)行步驟S260。
具體地,在檢測(cè)緩存的網(wǎng)頁(yè)數(shù)據(jù)時(shí),還可以檢測(cè)網(wǎng)頁(yè)數(shù)據(jù)是否超期。也即,緩存網(wǎng)頁(yè)數(shù)據(jù)的時(shí)間距離當(dāng)前時(shí)間是否超出了預(yù)先設(shè)定的時(shí)間期限。如果超期,則認(rèn)為本地未緩存可供呈現(xiàn)的網(wǎng)頁(yè)數(shù)據(jù)。由此,可以防止將間隔時(shí)間較長(zhǎng)的緩存的網(wǎng)頁(yè)數(shù)據(jù)加載呈現(xiàn)而不能呈現(xiàn)最新的網(wǎng)頁(yè)。
步驟S250、在緩存有所請(qǐng)求訪問(wèn)的網(wǎng)頁(yè)數(shù)據(jù)時(shí),從緩存中讀取緩存的網(wǎng)頁(yè)的超文本標(biāo)記文件以及被引用的靜態(tài)資源數(shù)據(jù)包呈現(xiàn)所述網(wǎng)頁(yè)。
對(duì)應(yīng)地,在文件名中設(shè)置有一致性摘要信息時(shí),在讀取緩存中的靜態(tài)資源數(shù)據(jù)包時(shí),可以利用一致性摘要信息對(duì)靜態(tài)資源數(shù)據(jù)包進(jìn)行一致性檢測(cè),以防止靜態(tài)資源數(shù)據(jù)包被篡改或緩存出錯(cuò)導(dǎo)致網(wǎng)頁(yè)不能正常呈現(xiàn)。也就是說(shuō),步驟S250可以包括:
步驟S251、根據(jù)靜態(tài)資源數(shù)據(jù)包的文件名中的一致性摘要信息對(duì)靜態(tài)資源數(shù)據(jù)包進(jìn)行一致性驗(yàn)證。
步驟S252、在一致性摘要信息與靜態(tài)資源數(shù)據(jù)包內(nèi)容對(duì)應(yīng)時(shí),載入緩存的超文本標(biāo)記文件和被引用的靜載資源數(shù)據(jù)包呈現(xiàn)網(wǎng)頁(yè)。
步驟S260、在未緩存所請(qǐng)求訪問(wèn)的網(wǎng)頁(yè)數(shù)據(jù)時(shí),根據(jù)所述網(wǎng)頁(yè)訪問(wèn)請(qǐng)求下載網(wǎng)頁(yè)的超文本標(biāo)記文件和被引用的靜態(tài)資源數(shù)據(jù)包呈現(xiàn)所述網(wǎng)頁(yè)。
具體地,在客戶端檢測(cè)發(fā)現(xiàn)未緩存網(wǎng)頁(yè)數(shù)據(jù)時(shí),回向服務(wù)器發(fā)送下載請(qǐng)求,服務(wù)器可以根據(jù)請(qǐng)求向客戶端發(fā)送修改后的超文本標(biāo)記文件和對(duì)應(yīng)的靜態(tài)資源數(shù)據(jù)包??蛻舳烁鶕?jù)下載獲得的網(wǎng)頁(yè)數(shù)據(jù)呈現(xiàn)網(wǎng)頁(yè)。圖4是本發(fā)明一個(gè)優(yōu)選實(shí)施方式的網(wǎng)頁(yè)呈現(xiàn)方法的流程圖。在應(yīng)用本發(fā)明的網(wǎng)頁(yè)呈現(xiàn)方法的移動(dòng)終端上,在步驟S410,第一次請(qǐng)求訪問(wèn)特定網(wǎng)頁(yè)。在步驟S420,檢測(cè)發(fā)現(xiàn)本地沒(méi)有緩存所請(qǐng)求的網(wǎng)頁(yè)數(shù)據(jù)。在步驟S430,向網(wǎng)頁(yè)服務(wù)器請(qǐng)求網(wǎng)頁(yè)數(shù)據(jù)。在步驟S440,終端側(cè)獲取到網(wǎng)頁(yè)服務(wù)器的響應(yīng),下載獲得網(wǎng)頁(yè)數(shù)據(jù)。在步驟S450,終端側(cè)呈現(xiàn)網(wǎng)頁(yè)數(shù)據(jù),并對(duì)網(wǎng)頁(yè)數(shù)據(jù)進(jìn)行緩存。在步驟S460,終端側(cè)再次請(qǐng)求訪問(wèn)上述網(wǎng)頁(yè)。在步驟S470,檢測(cè)發(fā)現(xiàn)本地緩存有所請(qǐng)求的網(wǎng)頁(yè)數(shù)據(jù)且并未超期。在步驟S480,讀取緩存的網(wǎng)頁(yè)數(shù)據(jù)進(jìn)行頁(yè)面呈現(xiàn)。
由此,本發(fā)明實(shí)施例
通過(guò)在服務(wù)器端將開(kāi)發(fā)獲取的網(wǎng)頁(yè)靜態(tài)資源文件進(jìn)行合并壓縮為靜態(tài)資源數(shù)據(jù)包,同時(shí),根據(jù)靜態(tài)資源數(shù)據(jù)包修改對(duì)應(yīng)的網(wǎng)頁(yè)超文本標(biāo)記文件,并在接收到訪問(wèn)請(qǐng)求時(shí)向客戶端反饋靜態(tài)資源數(shù)據(jù)包的一致性摘要信息,由此,可以使得客戶端瀏覽器以較小的空間對(duì)已經(jīng)訪問(wèn)過(guò)的網(wǎng)頁(yè)進(jìn)行緩存,在再次訪問(wèn)時(shí)不需要重新向服務(wù)器進(jìn)行請(qǐng)求,基于本地緩存的網(wǎng)頁(yè)數(shù)據(jù)進(jìn)行加載就可以實(shí)現(xiàn)網(wǎng)頁(yè)呈現(xiàn),本發(fā)明可以加快瀏覽器對(duì)網(wǎng)頁(yè)的加載速度,同時(shí)減輕服務(wù)器的負(fù)擔(dān),較少對(duì)于網(wǎng)絡(luò)帶寬的占用和流量的消耗。
以上的詳細(xì)描述通過(guò)使用方框圖、流程圖和/或示例,已經(jīng)闡述了設(shè)備和/或方法的眾多實(shí)施例。在這種方框圖、流程圖和/或示例包含一個(gè)或多個(gè)功能和/或操作的情況下,本領(lǐng)域技術(shù)人員應(yīng)理解,這種方框圖、流程圖或示例中的每一功能和/或操作可以通過(guò)各種硬件、軟件、固件或?qū)嵸|(zhì)上它們的任意組合來(lái)單獨(dú)和/或共同實(shí)現(xiàn)。在一個(gè)實(shí)施例中,本發(fā)明所述主題的若干部分可以通過(guò)專用集成電路(ASIC)、現(xiàn)場(chǎng)可編程門陣列(FPGA)、數(shù)字信號(hào)處理器(DSP)、或其他集成格式來(lái)實(shí)現(xiàn)。然而,本領(lǐng)域技術(shù)人員應(yīng)認(rèn)識(shí)到,這里所公開(kāi)的實(shí)施例的一些方面在整體上或部分地可以等同地實(shí)現(xiàn)在集成電路中,實(shí)現(xiàn)為在一臺(tái)或多臺(tái)計(jì)算機(jī)上運(yùn)行的一個(gè)或多個(gè)計(jì)算機(jī)程序(例如,實(shí)現(xiàn)為在一臺(tái)或多臺(tái)計(jì)算機(jī)系統(tǒng)上運(yùn)行的一個(gè)或多個(gè)程序),實(shí)現(xiàn)為在一個(gè)或多個(gè)處理器上運(yùn)行的一個(gè)或多個(gè)程序(例如,實(shí)現(xiàn)為在一個(gè)或多個(gè)微處理器上運(yùn)行的一個(gè)或多個(gè)程序),實(shí)現(xiàn)為固件,或者實(shí)質(zhì)上實(shí)現(xiàn)為上述方式的任意組合,并且本領(lǐng)域技術(shù)人員根據(jù)本發(fā)明,將具備設(shè)計(jì)電路和/或?qū)懭胲浖?或固件代碼的能力。此外,本領(lǐng)域技術(shù)人員將認(rèn)識(shí)到,本發(fā)明的機(jī)制能夠作為多種形式的程序產(chǎn)品進(jìn)行分發(fā),并且無(wú)論實(shí)際用來(lái)執(zhí)行分發(fā)的信號(hào)承載介質(zhì)的具體類型如何,本發(fā)明所述主題的示例性實(shí)施例均適用。信號(hào)承載介質(zhì)的示例包括但不限于:可記錄型介質(zhì),如軟盤、硬盤驅(qū)動(dòng)器、緊致盤(CD)、數(shù)字視頻盤(DVD)、數(shù)字磁帶、計(jì)算機(jī)存儲(chǔ)器等;以及傳輸型介質(zhì),如數(shù)字和/或模擬通信介質(zhì)(例如,光纖光纜、波導(dǎo)、有線通信鏈路和/或信道、無(wú)線通信鏈路和/或信道等)。
圖5是本發(fā)明實(shí)施例的服務(wù)器的示意圖。如圖5所示,所述服務(wù)器5包括通用的計(jì)算機(jī)硬件結(jié)構(gòu),其至少包括處理器51和存儲(chǔ)器52。處理器51和存儲(chǔ)器52通過(guò)總線53連接。存儲(chǔ)器52適于存儲(chǔ)處理器51可執(zhí)行的指令或程序。處理器51可以是獨(dú)立的微處理器,也可以是一個(gè)或者多個(gè)微處理器集合。由此,處理器51通過(guò)執(zhí)行存儲(chǔ)器52所存儲(chǔ)的指令,從而執(zhí)行如上所述的本發(fā)明實(shí)施例的方法流程實(shí)現(xiàn)對(duì)于網(wǎng)頁(yè)的呈現(xiàn)??偩€53將上述多個(gè)組件連接在一起,同時(shí)將上述組件連接到顯示控制器54和顯示裝置以及輸入/輸出(I/O)裝置55。輸入/輸出(I/O)裝置55可以是鼠標(biāo)、鍵盤、調(diào)制解調(diào)器、網(wǎng)絡(luò)接口、觸控輸入裝置、體感輸入裝置、打印機(jī)以及本領(lǐng)域公知的其他裝置。典型地,輸入/輸出裝置55通過(guò)輸入/輸出(I/O)控制器56與系統(tǒng)相連。
以上所述僅為本發(fā)明的優(yōu)選實(shí)施例,并不用于限制本發(fā)明,對(duì)于本領(lǐng)域技術(shù)人員而言,本發(fā)明可以有各種改動(dòng)和變化。凡在本發(fā)明的精神和原理之內(nèi)所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。