摘要:引擎執行完畢,控制權交還渲染引擎,恢復解析網頁。對于內聯腳本無作用即沒有屬性的腳本。協商緩存步驟總結請求資源時,把用戶本地該資源的同時帶到服務端,服務端和最新資源做對比。
資源壓縮 減少HTTP請求 靜態資源壓縮
html:壓縮空格、換行、注釋等字符 Webapack — html-webpack-plugin
css:無效代碼刪除,語義合并(相同樣式代碼) Webpack css-loader
js:無效字符刪除、剔除注釋代碼語義的縮減和優化 Webpack — UglifyJSPlugin
圖片優化方案:
雪碧圖
小文件 使用base64 webpack base64-inline-loader
圖片壓縮網站
svg
資源合并
弊端:
首屏渲染問題,合并文件太大,造成慢。
緩存失效問題 標記 md5戳 只要有一個變動 則失效 a,b,c三個js合并
規則:公共庫合并,不同頁面的各自合并。異步加載組件,不同頁面多帶帶打包,監聽路由變化,自動下載
實現:gulp插件梳理工作流/webpack配置loader和plugin
非核心代碼異步加載正常網頁的加載流程:
瀏覽器一邊下載 HTML 網頁,一邊開始解析。也就是說,不等到下載完,就開始解析。
解析過程中,瀏覽器發現元素,就暫停解析,把網頁渲染的控制權轉交給 JavaScript 引擎。
如果元素引用了外部腳本,就下載該腳本再執行,否則就直接執行代碼。
JavaScript 引擎執行完畢,控制權交還渲染引擎,恢復解析 HTML 網頁。
上述加載方式為同步加載,會阻塞瀏覽器的解析html文檔。故而我們常將script元素放置于body的底部
三種實現方式:動態腳本、async、defer
動態腳本動態創建script標簽
var scriptEle = document.createElement("script"); scriptEle.type = "text/javasctipt"; scriptEle.async = true; scriptEle.src = "http://xxxxxxx"; var x = document.getElementsByTagName("head")[0]; x.insertBefore(scriptEle, x.firstChild);async
async屬性和defer屬性類似,也是會開啟一個線程去下載js文件,但和defer不同的時,它會在下載完成后立刻執行,而不是會等到DOM加載完成之后再執行,所以還是有可能會造成阻塞。
且不會按照順序執行,哪個js文件先下載完就先執行哪個
對于內聯腳本無作用 (即沒有src屬性的腳本)。
defer當瀏覽器遇到帶有defer屬性的標簽時,再開啟一個線程去下載js文件,同時繼續解析HTML文檔,等等HTML全部解析完畢DOM加載完成之后,再按照出現順序依次執行加載好的js文件。
對于內聯腳本無作用 (即沒有src屬性的腳本)。
使用場景一般來說,是看腳本之間是否有依賴關系,有依賴的話應當要保證執行順序,應當使用defer沒有依賴的話使用async,同時使用的話defer失效。要注意的是兩者都不應該使用document.write,這個導致整個頁面被清除。
利用瀏覽器緩存https://juejin.im/post/5c4179...
優點:
減少了冗余的數據傳輸,節省網費
減少服務器的負擔,提升網站性能
加快了客戶端加載網頁的速度
瀏覽器緩存分為強緩存和協商緩存
強緩存如果資源沒過期,就取緩存,如果過期了,則請求服務器。
cache-control:max-age = xxx
聲明該資源在加載后的xxx秒內都直接使用緩存 使用的是相對時間 即加載文件本機的時間
Cache-Control 的幾個取值含義:
private:僅瀏覽器可以緩存
public:瀏覽器和代理服務器都可以緩存
max-age=xxx:過期時間
no-cache:不進行強緩存
no-store:不強緩存,也不協商緩存
規則可以同時多個 cache-control:public,max-age=0
expires: 絕對時間,服務器基于自己的時間返回一個文件過期時間
如果在Cache-Control響應頭設置了 "max-age" 或者 "s-max-age" 指令,那么 Expires 頭會被忽略。
強緩存步驟:
第一次請求 a.js ,緩存表中沒該信息,直接請求后端服務器。
后端服務器返回了 a.js ,且 http response header 中 cache-control 為 max-age=xxxx,所以是強緩存規則,存入緩存表中。
第二次請求 a.js ,緩存表中是 max-age, 那么命中強緩存,然后判斷是否過期,如果沒過期,直接讀緩存的a.js,如果過期了,則執行協商緩存的步驟了。
協商緩存觸發條件:
Cache-Control 的值為 no-cache (不強緩存)
或者 max-age 過期了 (強緩存,但總有過期的時候)
也就是說,不管怎樣,都可能最后要進行協商緩存(no-store除外)
ETag:每個文件有一個,改動文件了就變了,可以看似md5
Last-Modified:文件的修改時間
每次http返回來 responseheader 中的 ETag和 Last-Modified,在下次請求時在 requestheader 就把這兩個帶上(但是名字變了ETag-->If-None-Match,Last-Modified-->If-Modified-Since ),服務端把你帶過來的標識,資源目前的標識,進行對比,然后判斷資源是否更改了。
協商緩存步驟總結:
請求資源時,把用戶本地該資源的 ETag 同時帶到服務端,服務端和最新資源做對比。
如果資源沒更改,返回304,瀏覽器讀取本地緩存。
如果資源有更改,返回200,返回最新的資源。
DNS預解析預解析的實現:
用meta信息來告知瀏覽器, 當前頁面要做DNS預解析:
在頁面header中使用link標簽來強制對DNS預解析:
注:dns-prefetch需慎用,多頁面重復DNS預解析會增加重復DNS查詢次數。
如果需要禁止隱式的 DNS Prefetch,可以使用以下的標簽:
在瀏覽器中a標簽默認打開DNS預解析,但是在HTTPS中默認關閉
CDN 內容分發網絡網絡請求的過程走最近的網絡環境,解決網絡擁堵。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/110055.html
摘要:前端是應用服務器處理之前的部分,前端主要包括等各種資源,針對不同的資源有不同的優化方式。常見方法合并多個文件和文件,利用整合圖像,使用在實際的頁面嵌入圖像數據,合理設置緩存等。 web前端是應用服務器處理之前的部分,前端主要包括:HTML,CSS,javascript,image等各種資源,針對不同的資源有不同的優化方式。 內容優化 (1)減少HTTP請求數:這條策略是最重要最有效...
摘要:代表公司去參加今年的第二屆前端開發者年度大會,散會的時候,技術老大問我,今天感覺怎么樣,有什么收獲,當時就零零碎碎的回答了一些,不算完美趁著還記得點什么,在這里做個自我回顧總結,謹代表個人見解,有不當之處,或若涉及圖片隱私或者其它問題,煩請 代表公司去參加今年的 第二屆前端開發者年度大會,散會的時候,Team 技術老大問我,今天感覺怎么樣,有什么收獲,當時就零零碎碎的回答了一些,不算完...
摘要:后端和移動性能優化需要的時間較長,出成果較慢。大型網站上,一般通過什么方式監控性能的用戶端主要是真機監測監測,都屬于真實用戶監測。目前主要有以下兩種類型,,最終用戶性能監測。,,真實用戶性能監測。 showImg(https://segmentfault.com/img/bVAbWm);@tanwen110 (唐文),曾負責騰訊四大平臺之一網絡媒體平臺的整體運維、運營規劃工作;曾任百度...
摘要:特意對前端學習資源做一個匯總,方便自己學習查閱參考,和好友們共同進步。 特意對前端學習資源做一個匯總,方便自己學習查閱參考,和好友們共同進步。 本以為自己收藏的站點多,可以很快搞定,沒想到一入匯總深似海。還有很多不足&遺漏的地方,歡迎補充。有錯誤的地方,還請斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應和斧正,會及時更新,平時業務工作時也會不定期更...
閱讀 1670·2021-10-13 09:39
閱讀 2099·2021-09-07 10:20
閱讀 2678·2019-08-30 15:56
閱讀 2945·2019-08-30 15:56
閱讀 932·2019-08-30 15:55
閱讀 625·2019-08-30 15:46
閱讀 3494·2019-08-30 15:44
閱讀 2552·2019-08-30 11:15