-
當(dāng)前位置:首頁 > 創(chuàng)意學(xué)院 > 技術(shù) > 專題列表 > 正文
前端性能優(yōu)化的理解(前端性能優(yōu)化的理解是什么)
大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關(guān)于前端性能優(yōu)化的理解的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。
開始之前先推薦一個非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計劃、工作報告、論文、代碼、作文、做題和對話答疑等等
只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準(zhǔn),寫出的就越詳細(xì),有微信小程序端、在線網(wǎng)頁版、PC客戶端
官網(wǎng):https://ai.de1919.com。
創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀的企業(yè),服務(wù)客戶遍布全球各地,如需了解SEO相關(guān)業(yè)務(wù)請撥打電話175-8598-2043,或添加微信:1454722008
本文目錄:
一、前端性能優(yōu)化-傳輸加載優(yōu)化
Nginx開啟Gzip壓縮功能, 可以使網(wǎng)站的css、js 、xml、html 文件在傳輸時進(jìn)行壓縮,提高訪問速度, 進(jìn)而優(yōu)化Nginx性能! Web網(wǎng)站上的圖片,視頻等其它多媒體文件以及大文件,因?yàn)閴嚎s效果不好,所以對于圖片沒有必要支壓縮,如果想要優(yōu)化,可以圖片的生命周期設(shè)置長一點(diǎn),讓客戶端來緩存。 開啟Gzip功能后,Nginx服務(wù)器會根據(jù)配置的策略對發(fā)送的內(nèi)容, 如css、js、xml、html等靜態(tài)資源進(jìn)行壓縮, 使得這些內(nèi)容大小減少,在用戶接收到返回內(nèi)容之前對其進(jìn)行處理,以壓縮后的數(shù)據(jù)展現(xiàn)給客戶。這樣不僅可以節(jié)約大量的出口帶寬,提高傳輸效率,還能提升用戶快的感知體驗(yàn), 一舉兩得; 盡管會消耗一定的cpu資源,但是為了給用戶更好的體驗(yàn)還是值得的。
Nginx關(guān)于keepalive連接保持的特性,實(shí)際上就是在一次TCP連接中,可以持續(xù)處理多個客戶請求,而不斷開連接。通過該機(jī)制可以減少TCP連接的建立次數(shù),減少TIME_WAIT的狀態(tài)連接。從而增加服務(wù)的吞吐量和整體服務(wù)質(zhì)量。
強(qiáng)制緩存和協(xié)商緩存
推薦閱讀: https://www.jianshu.com/p/037a4478c504
Service worker 提供了很多新的能力,使得 web app 擁有與 nativeapp 相同的離線體驗(yàn)、消息推送體驗(yàn)。
推薦閱讀: https://www.jianshu.com/p/768be2733872
HTTP2優(yōu)勢
多路復(fù)用
二進(jìn)制分幀
首部壓縮
服務(wù)推送
推薦閱讀: https://www.jianshu.com/p/8ac6baf4728c
SSR是Server Side Render簡稱;頁面上的內(nèi)容是通過服務(wù)端渲染生成的,瀏覽器直接顯示服務(wù)端返回的html就可以了。
推薦閱讀: https://www.jianshu.com/p/10b6074d772c
二、常見的前端性能優(yōu)化手段都有哪些?都有多大收益
規(guī)則01:盡量減少HTTP請求
前端優(yōu)化的黃金準(zhǔn)則指導(dǎo)著前端頁面的優(yōu)化策略:只有10%-20%的最終用戶響應(yīng)時間花在接受請求的HTML文檔上,剩下的80%-90%時間花在為HTML文檔所引用的所有組件(圖片、腳本、樣式表等)進(jìn)行的HTTP請求上。因此,改善響應(yīng)時間的最簡單途徑就是減少組件的數(shù)量,并由此減少HTTP請求的數(shù)量。當(dāng)然很多人就會說,既然這樣,那我們就減少頁面組件的數(shù)量不就OK了嗎?那你試試,你會掀起一場性能優(yōu)化和產(chǎn)品設(shè)計之間的大PK。
所以,我們要減少HTTP請求是要平衡性能和設(shè)計的。如果找到這個平衡點(diǎn)呢?書中從以下幾個方面做了介紹,我逐一說明:
① 圖片地圖
初看“圖片地圖”四個字,對非專業(yè)的前端人員來說一頭霧水,我的第一印象就是這樣的,咱們以京東的移動站點(diǎn)為例,右側(cè)用戶和購物車的圖標(biāo),正常實(shí)現(xiàn)我會選擇如下方式:
<a href=”用戶跳轉(zhuǎn)頁面URL”>
<div class=”定義用戶icon顯示的樣式表”></div>
</a>
<a href=”購物車跳轉(zhuǎn)頁面URL”>
<div class=” 定義用戶icon顯示的樣式表”></div>
</a>
這種方式無可厚非的,但是兩張圖片就有兩個HTTP請求,這明顯是增加了頁面中的HTTP請求。那么我們可以把這兩個HTTP請求變成一個嗎?
答案當(dāng)然是可以的,這就是圖片地圖:允許在一張圖片上關(guān)聯(lián)多個URL,而目標(biāo)URL的選擇取決于用戶單擊了圖片上的哪個位置。
這樣上面京東兩個圖標(biāo)合并成一張圖片,這樣圖片的HTTP請求就減少了一個。
示例代碼如下:
<img src=合并后的圖片>
<map name=”map1”>
<areashape=”rect” coords=”0,0,40,40” href=”用戶跳轉(zhuǎn)頁面URL”>
<areashape=”rect” coords=”50,0,90,40” href=”購物車跳轉(zhuǎn)頁面URL”>
</map>
不過圖片地圖只支持矩形形狀,其他形狀不支持。
② 請CSS喝“雪碧”(CSS Sprites)CSS Sprites一句話:將多個圖片合并到一張單獨(dú)的圖片,這樣就大大減少了頁面中圖片的HTTP請求。
③ 內(nèi)聯(lián)圖片和腳本使用data:URL(Base64編碼)模式直接將圖片包含在Web頁面中而無需進(jìn)行HTTP請求。但是此種方法存在明顯缺陷:- 不受IE的歡迎;- 圖片太大不宜采用這種方式,因?yàn)锽ase64編碼之后會增加圖片大小,這樣頁面整體的下載量會變大;- 內(nèi)聯(lián)圖片在頁面跳轉(zhuǎn)的時候不會被緩存。(大圖片可以使用瀏覽器的本地緩存,在首次訪問的時候保存到瀏覽器緩存中,典型的是HTML5的manifest緩存機(jī)制以及LocalStorage等)。
④ 樣式表的合并將頁面樣式定義、腳本、頁面本身代碼嚴(yán)格區(qū)分開,但是樣式表、腳本也不是分割越細(xì)越好,因?yàn)闆]多引用一個樣式表就增加一次HTPP請求,能合并的樣式表盡量合并。一個網(wǎng)站有一個公用樣式表定義,每個頁面只要有一個樣式表就OK啦。
通過以上四個努力之后,你會發(fā)現(xiàn)你的網(wǎng)頁響應(yīng)時間最多能減少一半,這不是作者說大話,也不是我狂吹,我親手用我的移動網(wǎng)站首頁做了一個嘗試,本地測試之后響應(yīng)時間能減少40%左右。所以減少頁面HTTP請求數(shù)量,是一個很重要的原則。遵循此原則可以同時改善首次訪問和后續(xù)訪問的響應(yīng)時間,而每一個網(wǎng)站的首次響應(yīng)時間會決定用戶之后還來不來的重要原因。
規(guī)則02:使用內(nèi)容發(fā)布網(wǎng)絡(luò)(CDN的使用)
什么叫內(nèi)容發(fā)布網(wǎng)絡(luò)(CDN)?它是一組分布在多個不同地理位置的Web服務(wù)器,用于更加有效地向用戶發(fā)布內(nèi)容。主要用于發(fā)布頁面靜態(tài)資源:圖片、css文件、js文件等。如此,能輕易地提高響應(yīng)速度。關(guān)于CDN的具體詳細(xì)原理以及優(yōu)缺點(diǎn),各位可以自行詢問度娘或者google。
規(guī)則03:添加Expires頭
瀏覽器使用緩存來減少HTTP請求的數(shù)據(jù),并減小HTTP響應(yīng)的大小,使頁面加載更快。Web服務(wù)器使用Expires頭來告訴瀏覽器它可以使用一個組件的當(dāng)前副本,直到指定的deadline為止。HTTP規(guī)范中稱此頭為:在這一時間之后響應(yīng)被認(rèn)為失效。個人對這塊表示不想使用,其實(shí)就是一句話,把一些css、js、圖片在首次訪問的時候全部緩存到瀏覽器本地,從我做移動網(wǎng)站的過程中發(fā)現(xiàn),其實(shí)沒有這么復(fù)雜,完全可以使用HTML5提供的本地緩存機(jī)制就OK了。關(guān)于HTML5本地緩存機(jī)制,各位可以查閱相關(guān)資料。后續(xù)我也會對HTML5的緩存機(jī)制進(jìn)行介紹的。
規(guī)則04:壓縮組件(使用Gzip方式)
書中關(guān)于壓縮從gzip壓縮方式到如何壓縮講了很多,我想直接跳過,對于做PC網(wǎng)站或者移動網(wǎng)站來說,急需要壓縮的是css文件和js文件,至于如何壓縮,網(wǎng)上有很多在線工具,去挑選一個自己用的順手看的順眼的就好,當(dāng)然也有人選擇對HTML進(jìn)行壓縮,這樣也可以。但是實(shí)際工作中我沒有這么做。之所謂沒有這么做,是因?yàn)槲矣X得很麻煩。不要鄙視我,畢竟我不是一個真正意義上的前端工程師,哈哈!
規(guī)則05:將CSS樣式表放在頂部
如果將css樣式定義放在頁面中或者頁面底部,會出現(xiàn)短暫白屏或者某一區(qū)域短暫白板的情況,這和瀏覽器的運(yùn)營機(jī)制有關(guān)的,不管頁面如何加載,頁面都是逐步呈現(xiàn)的。所以在每做一個頁面的時候,用Link標(biāo)簽把每一個樣式表定義放在head中。
規(guī)則06:將javascript腳本放在底部
瀏覽器在加載css文件時,頁面逐步呈現(xiàn)會被阻止,直到所有css文件加載完畢,所以要把css文件的引用放到head中去,這樣在加載css文件時不會組織頁面的呈現(xiàn)。但是對于js文件,在使用的時候,它下面所有也頁面內(nèi)容的呈現(xiàn)都會被阻塞,將腳本放在頁面越靠下的地方,就意味著越多的內(nèi)容能夠逐步呈現(xiàn)。
規(guī)則07:避免使用CSS表達(dá)式
CSS表達(dá)式是動態(tài)玩CSS的一種很強(qiáng)大的方式,但是強(qiáng)大的同時也存在很高的危險性。因?yàn)閏ss表達(dá)式的頻繁求值會導(dǎo)致css表達(dá)式性能低下。如果真想玩css表達(dá)式,可以選用只求值一次的表達(dá)式或者使用事件處理來改變css的值。
規(guī)則08:使用外部javascript和CSS內(nèi)聯(lián)js和css其實(shí)比外部文件有更快的響應(yīng)速度,那為什么還要用外部呢?因?yàn)槭褂猛獠康膉s和css可以讓瀏覽器緩存他們,這樣不僅HTML文檔大小減少,而且不會增加HTTP請求數(shù)量。另外,使用外部js和css可以提高組件的可復(fù)用性。
規(guī)則09:減少DNS查詢
DNS查詢有時間開銷,通常一個瀏覽器查找一個給定主機(jī)名的IP地址需要20-120ms。緩存DNS:緩存DNS查詢可以很好地提高網(wǎng)頁性能,一旦緩存了DNS查詢,之后對于相同主機(jī)名的請求就無需進(jìn)行再次的DNS查找,至少短時間內(nèi)不需要。所以在使用頁面中URL、圖片、js文件、css文件等時,不要使用過多不同的主機(jī)名。
規(guī)則10:精簡javascript
如何精簡?
其實(shí)W3Cfuns已經(jīng)給大家準(zhǔn)備好精簡JS所需的所有工具“前端神器”,這點(diǎn)W3Cfuns為大家做的很不錯,在這個規(guī)則里我們就用到“JS壓縮/混淆/美化工具”
最初始的精簡方式:就是移除不必要的字符減小js文件大小,改善加載時間。包括所有的注釋、不必要的空白字符。
高級一點(diǎn)的精簡方式就是:混淆。
它不但會移除不必要的字符,還會改寫代碼,比如函數(shù)和變量的名字會被改成很短的字符串,這樣使js代碼更簡練更難閱讀。
但是我一般很少使用混淆,一個現(xiàn)在互聯(lián)網(wǎng)時代,代碼沒有必要整的那么神秘,大可以大家一起share,天下代碼一起抄,只要抄出自己的特色就ok了。
而且一旦使用混淆,對于js代碼的維護(hù)和調(diào)試都很復(fù)雜,因?yàn)橛袝r候混淆之后的js代碼完全看不懂。其實(shí)實(shí)際開發(fā)過程中,從文件大小和代碼可復(fù)用性來說,不僅僅是js代碼需要精簡,css代碼一樣也很需要精簡。
規(guī)則11:避免重定向
重定向的英文是Redirect,用于將用戶從一個URL重新跳轉(zhuǎn)到另一個URL。
最常見的Redirect就是301和302兩種。
關(guān)于重定向的性能影響這里就不說了,自行查閱相關(guān)資料吧。
在我們實(shí)際開發(fā)中避免重定向最簡單也最容易被忽視的一個問題就是,設(shè)置URL的時候,最后的“/”,有些人有時候會忽略,其實(shí)你少了“/”,這時候的URL就被重定向了,所以在給頁面鏈接加URL的時候切記最后的“/”不可丟。
規(guī)則12:刪除重復(fù)腳本
重復(fù)的js代碼除了有不必要的HTTP請求之外,還會浪費(fèi)執(zhí)行js的時間。
將你使用的js代碼模塊化,可以很好地避免這個問題,至于js模塊化如何實(shí)現(xiàn),現(xiàn)在有很多可以使用的開源框架,我用的比較多的是我們公司玉伯的Sea.js。
規(guī)則13:配置ETag
Etag(Entity Tag),實(shí)體標(biāo)簽,是Web服務(wù)器和瀏覽器用戶確認(rèn)緩存組件的有效性的一種機(jī)制。寫的很復(fù)雜,對我這種非專業(yè)的前端開發(fā)人員來說,有點(diǎn)過了,關(guān)于這個原則有興趣的自己看吧。
規(guī)則14:使Ajax可緩存
針對頁面中主動的Ajax請求返回的數(shù)據(jù)要緩存到本地,當(dāng)然這個是針對短期內(nèi)不會變化的數(shù)據(jù)。如果不確定數(shù)據(jù)變化周期的話,可以增加一個修改標(biāo)識的判斷,我正常處理過程中會給一些Ajax請求返回的數(shù)據(jù)增加一個MD5值的判斷,每次請求會判斷當(dāng)前MD5是否變化,如果變化了取最新的數(shù)據(jù),如果不變化,則不變。
三、JS圖片懶加載——前端性能優(yōu)化
意義
懶加載(LazyLoad) 是前端優(yōu)化的一種有效方式,能極大的提升用戶體驗(yàn),圖片加載是其重點(diǎn),如果加載圖片過多將大大增 http請求次數(shù)或大小 ,然而更多時候 用戶并不會瀏覽到全部加載進(jìn)來的圖片 ,這種代價是非常不值得的,所以當(dāng)用戶 瀏覽到當(dāng)前視口時再去加載相應(yīng)的圖片 無疑是兩全其美的選擇
原理:只有 img 標(biāo)簽中的 src 寫入了圖片的地址,加載頁面時才會請求圖片,所以使用懶加載時在 src 中并不寫入任何地址,把圖片的真實(shí)地址放到 data- (標(biāo)簽內(nèi)部屬性可存數(shù)據(jù)) 屬性中,在 js 中綁定鼠標(biāo)滾動事件,其回調(diào)中遍歷所有圖片并作出判斷, 將出現(xiàn)在視口中的圖片的 'data-' 屬性保存的地址放到 'src' 中即可
實(shí)現(xiàn)
HTML:
四、前端性能優(yōu)化--圖片篇
有損壓縮,高品質(zhì)的壓縮方式。圖片體積壓縮至原有體積的50%以下時,jpg仍然可以保持60%的品質(zhì)。原理為以24位存儲單個圖,可以呈現(xiàn)多達(dá)1600萬種顏色,足以滿足大多數(shù)場景下對色彩的要求,這一點(diǎn)決定了它壓縮前后的質(zhì)量損耗并不容易被肉眼察覺。
優(yōu)點(diǎn):
缺點(diǎn):
使用場景:
無損壓縮,高保真的圖片格式。同時支持8位和24位二進(jìn)制的位數(shù),八位的png最多指出256種顏色,24位可以呈現(xiàn)約1600萬種。
優(yōu)點(diǎn):
缺點(diǎn):
使用場景:
最多支持256種顏色的8位無損圖片格式。
優(yōu)點(diǎn):
缺點(diǎn):
使用場景:
同時提供了有損壓縮和無損壓縮(可逆壓縮)的圖片文件格式。像JPEG一樣對細(xì)接豐富的圖片信手拈來,像PNG一樣支持透明,像GIF一樣可以顯示動態(tài)圖片。
優(yōu)點(diǎn):
缺點(diǎn):
在壓縮文件大小的過程中,損失了一部分圖片的信息,也降低了圖片的質(zhì)量,并且這種損失是不可逆的。常見的壓縮手段是按照一定的算法將鄰近的像素點(diǎn)進(jìn)行合并,去除了人肉眼無法識別的圖片細(xì)節(jié)。jpg圖片使用的就是有損壓縮。
在壓縮的過程中,圖片的質(zhì)量沒有任何損傷。任何時候都可以從無損壓縮過的圖片中恢復(fù)出原來的信息。壓縮算法是對圖片的所有的數(shù)據(jù)進(jìn)行編碼壓縮,能在保證圖片的質(zhì)量的同時降低圖片的體積。例如png、gif使用的就是無損壓縮。
https://tinypng.com/
https://zhitu.isux.us/
https://compressor.io/
webpack配置imge-webpack-loader進(jìn)行圖片壓縮
1.安裝依賴
2.配置webpack
雪碧圖,CSS Sprites,國內(nèi)也叫 CSS 精靈,是一種 CSS 圖像合成技術(shù),主要用于小圖片顯示。
瀏覽器請求資源的時候,同源域名請求資源的時候有最大并發(fā)限制,chrome 為 6 個,就比如你的頁面上有 10 個相同 CDN 域名小圖片,那么需要發(fā)起 10 次請求去拉取,分兩次并發(fā)。第一次并發(fā)請求回來后,發(fā)起第二次并發(fā)。如果你把 10 個小圖片合并為一張大圖片的畫,那么只用一次請求即可拉取下來 10 個小圖片的資源。減少服務(wù)器壓力,減少并發(fā),減少請求次數(shù)。
優(yōu)點(diǎn):
缺點(diǎn):
有相應(yīng)的插件提供了自動合成雪碧圖的功能并且可以自動生成對應(yīng)的樣式文件webpack-spritesmith
將src/ico目錄下的所有png文件合成雪碧圖,并且輸出到對應(yīng)目錄,同時還可以生成對應(yīng)的樣式文件,樣式文件的語法會根據(jù)你配置的樣式文件的后綴動態(tài)生成。
將圖片轉(zhuǎn)換為base64編碼字符串inline到頁面或css中。
優(yōu)點(diǎn):
缺點(diǎn):
圖片懶加載的原理就是暫時不設(shè)置圖片的 src 屬性,而是將圖片的 url 隱藏起來,比如先寫在 data-src 里面,等當(dāng)前圖片是否到了可視區(qū)域再將圖片真實(shí)的 url 放進(jìn) src 屬性里面,從而實(shí)現(xiàn)圖片的延遲加載。
優(yōu)點(diǎn):
將圖片提前加載到本地緩存中,從而提升用戶體驗(yàn)。
高品質(zhì)圖像加載完之前會先顯示低畫質(zhì)版本。低畫質(zhì)版本由于畫質(zhì)低、壓縮率高、尺寸小、加載很快。
注:
很多工具和庫都支持導(dǎo)出漸進(jìn)式JPEG,比如 ImageMagick, libjpeg, jpegtran, jpeg-recompress以及imagemin。 也可以使用 gulp-imagemin 進(jìn)行批量轉(zhuǎn)換。
Photoshop導(dǎo)出漸進(jìn)式圖片,保存為JPEG格式,勾選連續(xù)。
以上就是關(guān)于前端性能優(yōu)化的理解相關(guān)問題的回答。希望能幫到你,如有更多相關(guān)問題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會為您講解更多精彩的知識和內(nèi)容。
推薦閱讀:
前端培訓(xùn)班出來能找到工作嗎(前端培訓(xùn)費(fèi)用大概多少)
web前端簡歷vue項(xiàng)目經(jīng)歷(vue項(xiàng)目經(jīng)驗(yàn)簡歷)
普陀花園景觀設(shè)計工程(普陀花園景觀設(shè)計工程公司)
團(tuán)隊(duì)意識包括幾個方面(團(tuán)隊(duì)意識包括幾個方面)