Web前端最佳化,提高載入速度

來源:互聯網
上載者:User

標籤:httpwatch   時間   服務   檔案大小   blank   主機   文檔   限制   工具   

研究表明:使用者最滿意的開啟網頁時間是2-5秒,如果等待超過10秒,99%的使用者會關閉這個網頁。也許這樣講,各位還不會有太多感觸,接下來我列舉一組資料:Google網站訪問速度每慢400ms就導致使用者搜尋請 求下降0.59%;Amazon每增加100ms網站延遲將導致收入下降1%;雅虎如果有400ms延遲會導致流量下降5-9%。網站的載入速度嚴重影響了使用者體驗,也決定了這個網站的生死存亡。

可能有人會說:網站的效能是後端工程師的事情,與前端並無多大關係。我只能說,too young too simple。事實上,只有10%~20%的終端使用者回應時間是用在從Web伺服器擷取HTML文檔並傳送到瀏覽器的,那剩餘的時間去哪兒了?來瞄一下效能黃金法則

只有10%~20%的終端使用者回應時間花在了下載HTML文檔上。其餘的80%~90%時間花在了下載頁面中的所有組件上。

 接下來我們將研究一下前端攻城獅如何來提高頁面的載入速度。 

一、減少HTTP請求

上面說到80%~90%時間花在了下載頁面中的所有組件進行的HTTP請求上。因此,改善回應時間最簡單的途徑就是減少HTTP請求的數量。

從WEB運行原理上講,IIS請求是無狀態的,在伺服器端一直是串連和關閉的不斷進行著,如果能減少伺服器請求,總的時間將會減少。

   之前我下載163郵箱的登陸頁面的圖片時發現,它們的只用到了一個圖片來完成整個頁面的所有圖片,當時我就納悶了,這跟平時做的網站不一樣呀。然來這樣做減少瀏覽器的請求次數,用httpwatch你會發現請求的總時間大大減少了。同樣的想法,在做css樣式,javascript代碼的時候也要做到儘可能的放在一個檔案下來減少WEB請求。

二、使用CDN

如果應用程式web伺服器離使用者更近,那麼一個HTTP請求的回應時間將縮短。另一方面,如果組件web伺服器離使用者更近,則多個HTTP請求的回應時間將縮短。

 CDN(內容發布網路)是一組分布在多個不同地理位置的Web伺服器,用於更加有效地向使用者發布內容。在最佳化效能時,向特定使用者發布內容的伺服器的選擇基於對網路慕課擁堵的測量。例如,CDN可能選擇網路階躍數最小的伺服器,或者具有最短回應時間的伺服器。

CDN還可以進行資料備份、擴充儲存能力,進行緩衝,同時有助於緩和Web流量峰值壓力。

CDN的缺點:

1、回應時間可能會受到其他網站流量的影響。CDN服務提供者在其所有客戶之間共用Web伺服器組。

2、如果CDN服務品質下降了,那麼你的工作品質也將下降

 3、無法直接控制元件伺服器 

三、添加Expires頭

頁面的初次訪問者會進行很多HTTP請求,但是通過使用一個長久的Expires頭,可以使這些組件被緩衝,下次訪問的時候,就可以減少不必要的HTPP請求,從而提高載入速度。

Web伺服器通過Expires頭告訴用戶端可以使用一個組件的當前副本,直到指定的時間為止。例如:

Expires: Fri, 18 Mar 2016 07:41:53 GMT

Expires缺點: 它要求伺服器和用戶端時鐘嚴格同步;到期日期需要經常檢查

HTTP1.1中引入Cache-Control來克服Expires頭的限制,使用max-age指定組件被緩衝多久。

Cache-Control: max-age=12345600

 若同時制定Cache-Control和Expires,則max-age將覆蓋Expires頭  四、壓縮組件   Jquery 作為JS最輕量級的類庫,它的原類庫是242KB,壓縮後的它竟只有91.6KB。     常見的壓縮公用程式有Google Closure Compiler、YUI Compressor、JsPacker、gzip。我常用的是gzip,因為它的壓縮率是最高的。用jdk壓縮後它會把一些空格去掉,把我們很長的變數名換成換成很短的字母來代替。 

五、將樣式表放在頭部

首先說明一下,將樣式表放在頭部對於實際頁面載入的時間並不能造成太大影響,但是這會減少頁面首屏出現的時間,使頁面內容逐步呈現,改善使用者體驗,防止“白屏”。

我們總是希望頁面能夠儘快顯示內容,為使用者提供可視化的回饋,這對網速慢的使用者來說是很重要的。

 將樣式表放在文檔底部會阻止瀏覽器中的內容逐步出現。為了避免當樣式變化時重繪頁面元素,瀏覽器會阻塞內容逐步呈現,造成“白屏”。這源自瀏覽器的行為:如果樣式表仍在載入,構建呈現樹就是一種浪費,因為所有樣式表載入解析完畢之前務虛會之任何東西  六、將指令碼放在底部( 這樣做可以儘可能的先載入頁面的DOM結構,然後才可以級使用者體驗

更樣式表相同,指令碼放在底部對於實際頁面載入的時間並不能造成太大影響,但是這會減少頁面首屏出現的時間,使頁面內容逐步呈現。

js的下載和執行會阻塞Dom樹的構建(嚴謹地說是中斷了Dom樹的更新),所以script標籤放在首屏範圍內的HTML程式碼片段裡會截斷首屏的內容。

 下載指令碼時並行下載是被禁用的——即使使用了不同的主機名稱,也不會啟用其他的下載。因為指令碼可能修改頁面內容,因此瀏覽器會等待;另外,也是為了保證指令碼能夠按照正確的順序執行,因為後面的指令碼可能與前面的指令碼存在依賴關係,不按照順序執行可能會產生錯誤。   七、使用外部的JavaScript和CSS

內聯指令碼或者樣式可以減少HTTP請求,按理來說可以提高頁面載入的速度。然而在實際情況中,當指令碼或者樣式是從外部引入的檔案,瀏覽器就有可能緩衝它們,從而在以後載入的時候能夠直接使用緩衝,而HTML文檔的大小減小,從而提高載入速度。

影響因素:

1、每個使用者產生的頁面瀏覽量越少,內聯指令碼和樣式的論據越強勢。譬如一個使用者每個月只訪問你的網站一兩次,那麼這種情況下內聯將會更好。而如果該使用者能夠產生很多頁面瀏覽量,那麼緩衝的樣式和指令碼將會極大減少下載的時間,提交頁面載入速度。

2、如果你的網站不同的頁面之間使用的組件大致相同,那麼使用外部檔案可以提高這些組件的重用率。

載入後下載

 有時候我們希望內聯樣式和指令碼,但又可以為接下來的頁面提供外部檔案。那麼我們可以在頁面載入完成止嘔動態載入外部組件,以便使用者接下來的訪問。    八、精簡JavaScript 精簡精簡就是從代碼中移除不必要的字元以減少檔案大小,降低載入的時間。代碼精簡的時候會移除不必要的空白字元(空格,換行、定位字元),這樣整個檔案的大小就變小了。   九、使Ajax可緩衝

非同步與即時

 Ajax的一個明顯的優點就是向使用者提供了即時反饋,因為它非同步從後端web伺服器請求資訊。 使用者是否需要等待的關鍵因素在於Ajax請求是被動的還是主動的。被動請求是為了將來使用而預先發起的,主動請求是基於使用者當前的操作而發起的

什麼樣的AJAX請求可以被緩衝?

POST的請求,是不可以在用戶端緩衝的,每次請求都需要發送給伺服器進行處理,每次都會返回狀態代碼200。(可以在伺服器端對資料進行緩衝,以便提高處理速度)

GET的請求,是可以(而且預設)在用戶端進行緩衝的,除非指定了不同的地址,否則同一個地址的AJAX請求,不會重複在伺服器執行,而是返回304。

Ajax請求使用緩衝

在進行Ajax請求的時候,可以選擇盡量使用get方法,這樣可以使用用戶端的緩衝,提高請求速度。

 

Web前端最佳化,提高載入速度

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.