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