戴 勝,朱 琳
(廣東科技學(xué)院 計(jì)算機(jī)系 廣東 東莞 523083)
中國互聯(lián)網(wǎng)絡(luò)信息中心(CNNIC)2017年1月發(fā)布的《中國互聯(lián)網(wǎng)絡(luò)發(fā)展?fàn)顩r統(tǒng)計(jì)報(bào)告》中數(shù)據(jù)表明:截至2016年12月,我國網(wǎng)民規(guī)模達(dá)7.31億,互聯(lián)網(wǎng)普及率為53.2%[1]。隨著上網(wǎng)人數(shù)的劇增,網(wǎng)站訪問量也增加,當(dāng)網(wǎng)站訪問量增加時(shí),要保證網(wǎng)站的處理效率,提升用戶的訪問體驗(yàn),這是一個(gè)巨大的挑戰(zhàn)。
現(xiàn)實(shí)中網(wǎng)站訪問過程:用戶在瀏覽器中輸入網(wǎng)址,通過DNS域名解析得到目標(biāo)服務(wù)器IP地址,然后向服務(wù)器發(fā)送HTTP請(qǐng)求,服務(wù)器對(duì)請(qǐng)求數(shù)據(jù)進(jìn)行處理,處理完成將數(shù)據(jù)返回給客戶端,客戶端瀏覽器得到結(jié)果,最終以HTML或JSP等數(shù)據(jù)格式顯示給用戶。本文從網(wǎng)站訪問的過程進(jìn)行整體的分析,著重于客戶端、服務(wù)器端的研究并從這兩個(gè)角度對(duì)提升網(wǎng)站性能的技術(shù)進(jìn)行分析和論述。
這里的客戶端實(shí)際上指的是瀏覽器。在瀏覽器完成訪問網(wǎng)站的時(shí)間中,有80%的時(shí)間用于加載圖像、樣式表、腳本等靜態(tài)資源。瀏覽器的主要用于顯示數(shù)據(jù)和發(fā)送HTTP請(qǐng)求,從這兩個(gè)角度進(jìn)行分析,研究提升網(wǎng)站性能的技術(shù)和方法。
一個(gè)頁面中包含多個(gè)種類和多個(gè)數(shù)量的組件,減少Http請(qǐng)求次數(shù)就是減少對(duì)這些組件的加載請(qǐng)求。減少HTTP請(qǐng)求次數(shù)常用以下方法:
(1)延遲加載和預(yù)加載
延遲加載指的是頁面剛開始加載時(shí)只加載一部分,當(dāng)用戶繼續(xù)往后進(jìn)行瀏覽時(shí),才會(huì)加載后面的資源,這樣可能會(huì)減少請(qǐng)求數(shù)量或延遲請(qǐng)求數(shù)量,有利于提高用戶體驗(yàn)。預(yù)加載指的是在網(wǎng)頁全部加載之前,對(duì)一些重要內(nèi)容提前進(jìn)行加載,減少加載時(shí)等待的時(shí)間。延遲加載可以使用定時(shí)器、條件觸發(fā)等方法來實(shí)現(xiàn)。
(2)Ajax請(qǐng)求優(yōu)化
Ajax的優(yōu)點(diǎn)是由于其從服務(wù)器傳輸信息的異步性而為用戶帶來反饋的及時(shí)性,但隨著網(wǎng)頁Ajax應(yīng)用的增加,請(qǐng)求數(shù)量也不斷增加,這樣也會(huì)降低網(wǎng)站性能[2]。對(duì)Ajax進(jìn)行優(yōu)化,可以使用Ajax緩存。對(duì)Ajax請(qǐng)求進(jìn)行緩存,將請(qǐng)求地址和返回結(jié)果保存在緩存中,當(dāng)進(jìn)行下一次Ajax請(qǐng)求時(shí),直接從緩存中提取數(shù)據(jù),從而減少系統(tǒng)的響應(yīng)時(shí)間。
JSP技術(shù)主要用于動(dòng)態(tài)網(wǎng)頁,但每次的結(jié)果沒有保存,導(dǎo)致每次請(qǐng)求都需要進(jìn)行編譯等多次復(fù)雜的操作,這樣使得系統(tǒng)開銷巨大。在訪問JSP網(wǎng)頁時(shí),服務(wù)器會(huì)先把JSP轉(zhuǎn)換成Servlet對(duì)象,然后對(duì)Servlet進(jìn)行處理,最終將結(jié)果以HTML文件格式返回給瀏覽器。JSP靜態(tài)化實(shí)際上就是在Servlet處理之后到HTML頁面響應(yīng)之前這一過程中,設(shè)置一個(gè)攔截器,將Servlet生成的HTML文件進(jìn)行保存,當(dāng)下一次訪問時(shí),可以直接加載HTML文件,從而減少系統(tǒng)操作時(shí)間。
當(dāng)請(qǐng)求到達(dá)服務(wù)器后,服務(wù)器根據(jù)請(qǐng)求內(nèi)容進(jìn)行業(yè)務(wù)邏輯處理,或調(diào)用方法,或訪問數(shù)據(jù)庫,或連接外部網(wǎng)站,根據(jù)服務(wù)器業(yè)務(wù)處理中涉及到的兩個(gè)重要部分web服務(wù)器訪問和數(shù)據(jù)庫訪問,提出以下優(yōu)化方案。
(1)負(fù)載均衡
負(fù)載均衡指的是對(duì)系統(tǒng)中的各個(gè)節(jié)點(diǎn)的負(fù)載進(jìn)行監(jiān)控調(diào)整,使每個(gè)節(jié)點(diǎn)的負(fù)載趨于均衡。具體是指在系統(tǒng)節(jié)點(diǎn)中部署硬件負(fù)載均衡設(shè)備或安裝負(fù)載均衡軟件,對(duì)各個(gè)節(jié)點(diǎn)進(jìn)行監(jiān)控,并建立一套映射機(jī)制,可以將請(qǐng)求分發(fā)到其他節(jié)點(diǎn),從而使過載節(jié)點(diǎn)減少負(fù)擔(dān),實(shí)現(xiàn)負(fù)載均衡。常見的負(fù)載均衡技術(shù)包含:NDS輪詢、IP負(fù)載均衡和CDN。
DNS輪詢就是將同一個(gè)域名對(duì)應(yīng)多個(gè)IP地址,一般采用輪詢算法進(jìn)行調(diào)度,但實(shí)際上由于調(diào)度策略的問題,DNS輪詢很難實(shí)現(xiàn)真正的均衡;IP均衡負(fù)載是通過內(nèi)核驅(qū)動(dòng)更改IP的目的地址來完成數(shù)據(jù)負(fù)載均衡的,請(qǐng)求先到達(dá)負(fù)載均衡服務(wù)器,之后將IP進(jìn)行映射,并把請(qǐng)求內(nèi)容發(fā)送到新的IP地址對(duì)應(yīng)的服務(wù)器上;CDN是利用各種緩存服務(wù)器部署到用戶訪問集中的網(wǎng)絡(luò)中,利用全局負(fù)載技術(shù)將用戶的訪問指向距離最近的工作正常的緩存服務(wù)器上,由緩存服務(wù)器直接響應(yīng)用戶請(qǐng)求[3]。負(fù)載均衡在用戶訪問量比較大的情況下使用,才能保證成本和服務(wù)器性能。
(2)多線程并發(fā)
多線程并發(fā)指的是使用多個(gè)線程其處理多個(gè)任務(wù)。一個(gè)請(qǐng)求會(huì)產(chǎn)生一個(gè)Servlet,一個(gè)Servlet需要一個(gè)線程來處理,使用多線程技術(shù)可以同時(shí)處理多個(gè)請(qǐng)求和任務(wù),這樣可以節(jié)省時(shí)間,提高訪問性能。多線程并發(fā)常采用線程池技術(shù)。線程池會(huì)預(yù)先生成多個(gè)線程,當(dāng)有任務(wù)到達(dá)就會(huì)從中取出一個(gè)線程進(jìn)行處理,而之前的線程在完成任務(wù)后會(huì)回到線程池,準(zhǔn)備下一次被調(diào)用。線程池技術(shù)能夠減少創(chuàng)建線程帶來的時(shí)間開銷,有利于提升系統(tǒng)性能。
數(shù)據(jù)庫的訪問效率是網(wǎng)站性能的重要體現(xiàn)。在數(shù)據(jù)庫訪問優(yōu)化中,要把握減少數(shù)據(jù)訪問、返回更少數(shù)據(jù)、減少交互次數(shù)、減少系統(tǒng)開銷等原則。
(1)建立適當(dāng)?shù)乃饕?/p>
對(duì)適當(dāng)?shù)淖侄谓⑺饕?,從而提升?shù)據(jù)庫訪問效率。索引的種類有很多,組合索引、多重索引等等,通過這些索引的整合使用將大大提高數(shù)據(jù)庫的訪問效率。
(2)減少數(shù)據(jù)量
減少返回的數(shù)據(jù)量,可以減少服務(wù)器和數(shù)據(jù)庫兩者數(shù)據(jù)傳輸?shù)臅r(shí)間,這將有利于減少web服務(wù)器響應(yīng)數(shù)據(jù)的時(shí)間。常常是進(jìn)行數(shù)據(jù)分頁處理,減少每次傳輸數(shù)據(jù),并且只對(duì)需要的數(shù)據(jù)進(jìn)行返回
(3)使用數(shù)據(jù)庫連接池
數(shù)據(jù)庫連接池在系統(tǒng)初始化過程中會(huì)創(chuàng)建多個(gè)數(shù)據(jù)庫連接,當(dāng)有數(shù)據(jù)庫訪問請(qǐng)求到達(dá)時(shí),不需要再進(jìn)行數(shù)據(jù)庫驅(qū)動(dòng)加載、連接等步驟,而是直接從數(shù)據(jù)庫連接池進(jìn)行調(diào)用,這樣減少數(shù)據(jù)庫的訪問時(shí)間,提高效率[4]。
緩存技術(shù)就是將訪問過的內(nèi)容進(jìn)行記錄保存,在下次訪問時(shí)可以直接從記錄中調(diào)用數(shù)據(jù),從而提高訪問速度。緩存技術(shù)分為操作系統(tǒng)磁盤緩存,數(shù)據(jù)庫緩存,應(yīng)用程序緩存,web服務(wù)器緩存,客戶端瀏覽器緩存[5]。緩存技術(shù)可以使用在網(wǎng)站訪問的各個(gè)環(huán)節(jié),根據(jù)網(wǎng)站的服務(wù)對(duì)象和服務(wù)要求設(shè)置特定的方案,才能使緩存效果最好。
網(wǎng)站的好壞與否,可以從不同的方向進(jìn)行判斷,但最主要是通過提升用戶體驗(yàn)來體現(xiàn)。文章主要是從網(wǎng)站建設(shè)的角度,而對(duì)于搜索引擎優(yōu)化方面的論述較少。通過綜合運(yùn)用客戶端、服務(wù)器端和中間連接的優(yōu)化技術(shù),網(wǎng)站的整體性能得到更大的提高。并且隨著大數(shù)據(jù)、人工智能等技術(shù)的運(yùn)用將使網(wǎng)站性能得到更大的提升。
[1] 中國互聯(lián)網(wǎng)絡(luò)信息中心,中國互聯(lián)網(wǎng)絡(luò)發(fā)展?fàn)顩r統(tǒng)計(jì)報(bào)告[R],2017.1:14-15.
[2] 宋曉娟,房強(qiáng).Web前端性能優(yōu)化研究及應(yīng)用[J].信息技術(shù),2016,(10):198-202.
[3] 房輝,常盛.大型網(wǎng)站高性能架構(gòu)研究[J].信息系統(tǒng)工程,2015,(12):76-77.
[4] 劉雙雙,段欣妤.基于JDBC的數(shù)據(jù)庫連接池的煤礦安全監(jiān)控技術(shù)體系建設(shè)[J].煤炭技術(shù),2013,(07):166-168.
[5] 劉敏娜,解爭龍.基于SSI框架的高性能網(wǎng)站服務(wù)器端優(yōu)化技術(shù)[J].計(jì)算技術(shù)與自動(dòng)化,2014,(03):139-144.