亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

提高前端性能的黃金法則

keithyau / 1143人閱讀

摘要:雖然如此,但是網(wǎng)站前端性能優(yōu)化的思路基本沒(méi)變。為什么前端性能如此重要數(shù)據(jù)顯示只有的最終用戶(hù)響應(yīng)時(shí)間花在了下載文檔上。前端性能優(yōu)化一味奉行最佳實(shí)踐有時(shí)候反而過(guò)而不及,所以針對(duì)項(xiàng)目的實(shí)際情況來(lái)優(yōu)化才是明智的選擇。

前端近幾年變化很大,各種工具,庫(kù),框架并發(fā)。雖然如此,但是網(wǎng)站前端性能優(yōu)化的思路基本沒(méi)變。
為什么前端性能如此重要?數(shù)據(jù)顯示:

只有 10%~20% 的最終用戶(hù)響應(yīng)時(shí)間花在了下載 HTML 文檔上。其余的 80%~90% 時(shí)間花在了下載頁(yè)面中的所有組件中;

另外一點(diǎn)是,優(yōu)化后臺(tái)需要花費(fèi)比較大的成本,優(yōu)化前端只需要適當(dāng)?shù)刈裱恍┓▌t會(huì)有較大的提升,相對(duì)低成本高收益。

最近讀了 Steve Souders 的《高性能網(wǎng)站建設(shè)指南》,覺(jué)得很不錯(cuò)在此做一下總結(jié)。Steve 是 Firebug 和 Yslow 的作者,相信大家都使用過(guò)。雖然書(shū)中的很多手段都已經(jīng)過(guò)時(shí)了,但是思路基本沒(méi)變,取其精華就好。

本書(shū)提出了一套性能黃金法則,優(yōu)先級(jí)越高排名越前,一共14則:

1. 減少HTTP請(qǐng)求
2. 使用內(nèi)容發(fā)布網(wǎng)絡(luò)(CDN)
3. 添加Expires頭
4. 壓縮組件
5. 將樣式表放在頂部
6. 將腳本放在底部
7. 避免使用CSS表達(dá)式
8. 使用外部JavaScript和CSS
9. 減少DNS查找
10. 精簡(jiǎn)JavaScript
11. 避免重定向
12. 刪除重復(fù)的腳本
13. 配置ETag
14. 使Ajax可緩存

以下分別簡(jiǎn)單介紹每條法則的緣由:

1. 減少HTTP請(qǐng)求

一般來(lái)說(shuō),使用外鏈的腳本和樣式表更加有利。分別把外鏈腳本和樣式表進(jìn)行合并會(huì)減少HTTP請(qǐng)求,以節(jié)省客戶(hù)端和服務(wù)器之間的通訊次數(shù)來(lái)加快頁(yè)面打開(kāi)速度。但是出于開(kāi)發(fā)的便利,開(kāi)發(fā)的時(shí)候一般會(huì)采取模塊化的方式;這時(shí)候可以在部署前采用一些前端構(gòu)建工具把這些模塊文件合并起來(lái)再發(fā)布。

2. 使用內(nèi)容發(fā)布網(wǎng)絡(luò)(CDN)

CDN是一組分布在多個(gè)不同地理位置的Web服務(wù)器,由于距離用戶(hù) 物理距離比較短,所以能夠更加有利于用戶(hù)獲取到靜態(tài)資源;這種服務(wù)通常需要購(gòu)買(mǎi),也有一些免費(fèi)、通用的CDN可使用,國(guó)內(nèi)的可以使用 BootCDN。

3. 添加Expires頭

Expires頭是用來(lái)告訴瀏覽器該相應(yīng)的有效期,可以理解為該資源的“保質(zhì)期”,在期限內(nèi)可以使用該資源的緩存不需要重新請(qǐng)求。由于瀏覽器與服務(wù)器存在時(shí)鐘同步問(wèn)題,HTTP1.1還添加胡了Cache-Control和max-age來(lái)彌補(bǔ)Expires頭的不足。通常用于腳本,樣式表、圖片等靜態(tài)資源。

使用這種策略可能會(huì)遇到一個(gè)問(wèn)題是,開(kāi)發(fā)者可能想要在資源過(guò)期前這段時(shí)間更新它們。這時(shí)候,由于瀏覽器的緩存還沒(méi)失效,這就需要通過(guò)更改文件名來(lái)令靜態(tài)資源 強(qiáng)制失效。有很多種方式給靜態(tài)資源打上版本號(hào),可以一本正經(jīng)地打上數(shù)字版本號(hào),根據(jù)內(nèi)容生成哈希碼也行,甚至有人用π來(lái)給自己的資源打版本號(hào)(每次。

4. 壓縮組件

本書(shū)介紹的是gzip的方式壓縮靜態(tài)資源,實(shí)際上,這種方式會(huì)消耗額外的CPU資源。這種手段通常能夠使文件大小減少70%。

5. 將樣式表放在頂部

如果把樣式表放在底部時(shí),瀏覽器會(huì)延遲顯示任何可視化組件。另外,使用 CSS 的@import 等同于把想要加載的樣式放在底部,所以不建議使用。對(duì)于瀏覽器的渲染機(jī)制,本書(shū)并沒(méi)有過(guò)多提及,只是對(duì)現(xiàn)象做出了描述以及提供了解決辦法。

如果樣式表仍然在加載,構(gòu)建呈現(xiàn)樹(shù)就是一種浪費(fèi),因?yàn)樵谒袠邮奖砑虞d并解析完畢之前無(wú)需繪制任何東西。否則,在其準(zhǔn)備好之前顯示內(nèi)容會(huì)遇到 FOUC(無(wú)樣式內(nèi)容的閃爍,F(xiàn)lash of Unstyled Content)問(wèn)題。

就是說(shuō),如果不把樣式表放在 中,當(dāng)遇到樣式時(shí),瀏覽器就會(huì)阻止頁(yè)面呈現(xiàn),等待樣式表下載完畢。

如果把樣式表放在底部,在 IE 中還會(huì)產(chǎn)生白屏現(xiàn)象??傊褬邮奖矸胚M(jìn) 就能避免這些問(wèn)題。

6. 將腳本放在底部

腳本對(duì)頁(yè)面的影響是:

阻塞對(duì)齊后面內(nèi)容的呈現(xiàn)

阻塞后面組件的下載

瀏覽器會(huì)在下載腳本的時(shí)候阻塞并行下載,因?yàn)樾枰_保腳本能夠順序執(zhí)行。

關(guān)于這點(diǎn),這里有一篇講解的比較深入的文章:
JS 一定要放在 Body 的最底部么?聊聊瀏覽器的渲染機(jī)制

但是,實(shí)際開(kāi)發(fā)中有時(shí)候很難完全遵守這條準(zhǔn)則,那只能把能夠放在最后的都放在最后。

7. 避免使用CSS表達(dá)式

使用CSS 的expression()通常會(huì)造成多次運(yùn)算。實(shí)際上,需要用到CSS 表達(dá)式的地方,通常能夠找到其他替代方案,所以避免使用CSS表達(dá)式。

8. 使用外部JavaScript和CSS

使用外部靜態(tài)文件的優(yōu)點(diǎn)有:

可以被瀏覽器緩存起來(lái)

組件可以重用

可模塊化

能夠被構(gòu)建(合并壓縮打版本)

...

缺點(diǎn):

需要額外創(chuàng)建HTTP 請(qǐng)求

...

9. 減少DNS查找

簡(jiǎn)單來(lái)說(shuō),DNS 查找就是輸入域名對(duì)服務(wù)器IP 地址的查找過(guò)程。DNS 緩存又分為瀏覽器DNS 緩存、操作系統(tǒng)DNS 緩存。當(dāng)你輸入 www.google.com 的時(shí)候,瀏覽器會(huì)先去自身的 DNS 緩存里面查找有沒(méi)有 google 服務(wù)器的 IP 地址;如果找不到則繼續(xù)到操作系統(tǒng)的 DNS 緩存查找;如果瀏覽器在這兩個(gè)容器都沒(méi)有找到 google 的IP 地址記錄,則會(huì)向廣域域名體系查找。

10. 精簡(jiǎn)JavaScript

減少JavaScript 文件大小的有幾種手段,通常被廣泛使用的是 精簡(jiǎn)。精簡(jiǎn)就是去除JavaScript 代碼中的空格、注釋等多余的字符,這種方式基本上沒(méi)有什么缺點(diǎn)。
另外一種方式是 混淆?;煜窃诰?jiǎn)的基礎(chǔ)上,把函數(shù)、變量名都用較短小的字符來(lái)替換,從而達(dá)到減少文件大小的效果。但是混淆會(huì)產(chǎn)生不少麻煩,很有可能會(huì)引入錯(cuò)誤,雖然有利于防止逆向工程,當(dāng)同時(shí)也增加了自己在線(xiàn)上環(huán)境調(diào)試的難度。

現(xiàn)在普遍的做法是發(fā)布前利用 Gulp、Grunt 等自動(dòng)化構(gòu)建工具對(duì)資源進(jìn)行壓縮。

11. 避免重定向

以下是一個(gè)重定向的過(guò)程:

瀏覽器發(fā)送請(qǐng)求  --  服務(wù)器返回302  --  服務(wù)器返回200  -- 瀏覽器開(kāi)始呈現(xiàn)

就是說(shuō),在發(fā)送請(qǐng)求到返回200這段時(shí)間,頁(yè)面完全是空白的;對(duì)比普通的請(qǐng)求多了一段空白時(shí)間。

12. 刪除重復(fù)的腳本

重復(fù)的腳本對(duì)增加HTTP 請(qǐng)求次數(shù)和腳本執(zhí)行的時(shí)間。

13. 配置ETag

這個(gè)規(guī)則應(yīng)該過(guò)時(shí)了,現(xiàn)在比較好的實(shí)踐是直接根據(jù)內(nèi)容給靜態(tài)資源打上哈希版本號(hào)。

14. 使Ajax可緩存

適用于以上的優(yōu)化,大部分同樣適用于Ajax請(qǐng)求。

總結(jié):

總的來(lái)說(shuō),前端優(yōu)化的總體思路是提高瀏覽器與服務(wù)器溝通的效率。

前端性能優(yōu)化一味奉行“最佳實(shí)踐”有時(shí)候反而過(guò)而不及,所以針對(duì)項(xiàng)目的實(shí)際情況來(lái)優(yōu)化才是明智的選擇。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/78971.html

相關(guān)文章

  • 前端性能優(yōu)化黃金法則

    摘要:前端優(yōu)化是復(fù)雜的,針對(duì)方方面面的資源都有不同的方式。前端性能優(yōu)化前端性能團(tuán)隊(duì)總結(jié)的條黃金定律的團(tuán)隊(duì)總結(jié)出了一系列可以提高網(wǎng)站速度的方法。提高性能的措施中最重要的方法就是使響應(yīng)具有可緩存性。 前端是龐大的,包括 HTML、 CSS、 Javascript、Image 、Flash等等各種各樣的資源。前端優(yōu)化是復(fù)雜的,針對(duì)方方面面的資源都有不同的方式。那么,前端優(yōu)化的目的是什么 ?Tips...

    zhangke3016 評(píng)論0 收藏0
  • 前端性能優(yōu)化黃金法則

    摘要:前端優(yōu)化是復(fù)雜的,針對(duì)方方面面的資源都有不同的方式。前端性能優(yōu)化前端性能團(tuán)隊(duì)總結(jié)的條黃金定律的團(tuán)隊(duì)總結(jié)出了一系列可以提高網(wǎng)站速度的方法。提高性能的措施中最重要的方法就是使響應(yīng)具有可緩存性。 前端是龐大的,包括 HTML、 CSS、 Javascript、Image 、Flash等等各種各樣的資源。前端優(yōu)化是復(fù)雜的,針對(duì)方方面面的資源都有不同的方式。那么,前端優(yōu)化的目的是什么 ?Tips...

    coolpail 評(píng)論0 收藏0
  • 前端性能優(yōu)化黃金法則

    摘要:前端優(yōu)化是復(fù)雜的,針對(duì)方方面面的資源都有不同的方式。前端性能優(yōu)化前端性能團(tuán)隊(duì)總結(jié)的條黃金定律的團(tuán)隊(duì)總結(jié)出了一系列可以提高網(wǎng)站速度的方法。提高性能的措施中最重要的方法就是使響應(yīng)具有可緩存性。 前端是龐大的,包括 HTML、 CSS、 Javascript、Image 、Flash等等各種各樣的資源。前端優(yōu)化是復(fù)雜的,針對(duì)方方面面的資源都有不同的方式。那么,前端優(yōu)化的目的是什么 ?Tips...

    Hegel_Gu 評(píng)論0 收藏0
  • 關(guān)于網(wǎng)站性能優(yōu)化準(zhǔn)則

    打算現(xiàn)在開(kāi)始在博客里寫(xiě)點(diǎn)東西,也能為自己看過(guò)的書(shū)學(xué)過(guò)的知識(shí)做一個(gè)歸納總結(jié)。這幾日拜讀了Steve Souders的《高性能網(wǎng)站建設(shè)指南這本書(shū)》,雖然這本書(shū)可能已經(jīng)有些老了,但薄薄的一個(gè)小冊(cè)子里提出的網(wǎng)站性能優(yōu)化的準(zhǔn)則還是非常有價(jià)值的。這些規(guī)則都有個(gè)共同點(diǎn),就是用很小的工作就能獲得很明顯的性能提升,性?xún)r(jià)比極高。廢話(huà)不多說(shuō)了,總結(jié)一下書(shū)里的幾點(diǎn)性能優(yōu)化規(guī)則。 首先有一點(diǎn)需要說(shuō)明的是書(shū)中所寫(xiě)的性能黃金法...

    Travis 評(píng)論0 收藏0
  • CSS開(kāi)發(fā)

    摘要:譯十六進(jìn)制顏色揭秘原文地址原文作者譯文出自掘金翻譯計(jì)劃本文永久鏈接教程入門(mén)篇關(guān)于是一款進(jìn)行柵格布局的輔助工具,它讓開(kāi)發(fā)者擺脫了冗雜的數(shù)學(xué)計(jì)算,同時(shí)降低了樣式與結(jié)構(gòu)的耦合程度。 【譯】CSS 十六進(jìn)制顏色揭秘 原文地址:CSS Hex Colors Demystified 原文作者:Dave Gash 譯文出自:掘金翻譯計(jì)劃 本文永久鏈接:https://github.com/xitu/...

    warkiz 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<