[TOC]
## 1. 優化 CSS 性能
CSS,即級聯樣式表,能從 HTML 描述的內容生成專業而又整潔的文件。很多 CSS 需要通過 HTTP 請求來引入(除非使用內聯 CSS),所以你要努力去除累贅的 CSS 文件,但要注意保留其重要特征。
如果你的 Banner、插件和布局樣式是使用 CSS 保存在不同的文件內,那么,訪問者的瀏覽器每次訪問都會加載很多文件。雖然現在HTTP/2 的存在,減少了這種問題的發生,但是在外部資源加載的情況下,仍會花費較長時間。要了解如何減少HTTP 請求以大幅度縮減加載時間,請閱讀WordPress 性能。
此外,不少網站管理員在網頁中錯誤的使用 @import 指令 來引入外部樣式表。這是一個過時的方法,它會阻止瀏覽并行下載。link 標簽才是最好的選擇,它也能提高網站的前端性能。多說一句,通過 link 標簽請求加載的外部樣式表不會阻止并行下載。
## 2.減少外部HTTP請求
在很多情況下,網站的大部分加載時間來自于外部的 Http 請求。外部資源的加載速度隨著主機提供商的服務器架構、地點等不同而不同。減少外部請求要做的第一步就是簡略地檢查網站。研究你網站的每個組成部分, 消除任何影響訪問者體驗不好的成分。 這些成分可能是:
* 不必要的圖片
* 沒用的 JavaScript代碼
* 過多的 css
* 多余的插件
在你去掉這些多余的成分之后,再對剩下的內容進行整理,如,壓縮工具、CDN 服務和預獲取(prefetching)等,這些都是管理 HTTP 請求的最佳選擇。除此之外,減少DNS路由查找教程會教你如何一步一步的減少外部 HTTP 請求。
## 3. 壓縮 CSS, JS 和 HTML壓縮技術可以從文件中去掉多余的字符。
你在編輯器中寫代碼的時候,會使用縮進和注釋,這些方法無疑會讓你的代碼簡潔而且易讀,但它們也會在文檔中添加多余的字節。
例如,這是一段壓縮之前的代碼。
```
.entry-content p {
font-size: 14px !important;
}
.entry-content ul li {
font-size: 14px !important;
}
.product_item p a {
color: #000;
padding: 10px 0px 0px 0;
margin-bottom: 5px;
border-bottom: none;
}
```
把這段代碼壓縮后就成了這樣
```
.entry-content p,.entry-content ul li {
font-size: 14px!important
}
.product_itemp a {
color: #000;
padding: 10px 0 0;
margin-bottom: 5px;
border-bottom: none
}
```
使用壓縮工具可以非常簡單地把無用的字節從你的 CSS、JS 和 HTML 文件修剪掉。關于壓縮的相關信息,可以參閱如何壓縮 CSS、JS 和 HTML。
## 4. 使用預先獲取預先獲取可以
在真正需要之前 通過取得必需的資源和相關數據來改善訪問用戶的瀏覽體驗,主要有3類預先獲取:
* 鏈接預先獲取
* DNS 預先獲取
* 預先渲染
在你離開當前 web 頁面之前,使用預先獲取方式,對應每個鏈接的 URL 地址,CSS,圖片和腳本都會被預先獲取。這保證了訪問者能在最短時間內使用鏈接在畫面間切換。
幸運的是,預先獲取很容易實現。根據你想要使用的預先獲取形式,你只需在網站 HTML 中的鏈接屬性上增加rel="prefetch",rel="dns-prefetch",或者 rel="prerender" 標記。
## 5. 使用 CDN 和緩存提高速度
內容分發網絡能顯著提高網站的速度和性能。使用 CDN 時,您可以將網站的靜態內容鏈接到全球各地的服務器擴展網絡。如果您的網站觀眾遍布全球,這項功能十分有用。 CDN 允許您的網站訪問者從最近的服務器加載數據。如果您使用 CDN,您網站內的文件將自動壓縮,以便在全球范圍內快速分發。CDN 是一種緩存方法,可極大改善資源的分發時間,同時,它還能實現一些其他的緩存技術,如,利用瀏覽器緩存。
合理地設置瀏覽器緩存,能讓瀏覽器自動存儲某些文件,以便加快傳輸速度。此方法的配置可以直接在源服務器的配置文件中完成。
了解更多有關緩存和不同類型的緩存方法,請參閱緩存定義。
## 6. 壓縮文件雖然許多
CDN服務可以壓縮文件,但如果不使用 CDN,您也可以考慮在源服務器上使用文件壓縮方法來改進前端優化。文件壓縮能使網站的內容輕量化,更易于管理。 最常用的文件壓縮方法之一是 Gzip。 這是縮小文檔、音頻文件、PNG圖像和等其他大文件的絕佳方法。
Brotli 是一個比較新的文件壓縮算法,目前正變得越來越受歡迎。此開放源代碼算法由來自 Google 和其他組織的軟件工程師定期更新,現已被證明比其他現有壓縮方法更好用。 這種算法的支持目前還比較少,但作為后起之秀指日可待。
## 7. 優化你的圖片
對于那些不懂得前端優化的人來說,圖片可能會是一個“網站殺手”。大量的寫真集和龐大的高清圖片會阻塞網頁渲染速度。沒有優化的高清圖片可能會有幾兆字節(mb)。因此適當地對它們進行優化可以改善網頁的前端性能。
每個圖像文件都包含了一些與純照片或圖片無關的信息。比如 JPEG 圖片,它包含了日期、地點、相機型號和一些其他不相關的信息。你可以用一些如 Optimus 的優化工具來刪除這些多余的圖像數據來精簡圖像的冗長的加載過程。因為 Optimus 是一個無損的圖片壓縮工具,它不會影響圖像畫質,只是壓縮圖片體積。
另外,如果你想進一步的優化一張圖片,你可以使用有損壓縮,它會刪除一些圖片里面的數據,因此質量會受損。
## 8. 使用輕量級框架
除非你只用現有的編碼知識構建網站,不然,你可以嘗試使用一個好的前端框架來避免許多不必要的前端優化錯誤。雖然有一些更大,更知名的框架能提供更多功能和選項,但它們不一定適合你的 Web 項目。
所以說,不僅確定項目所需功能很重要,選擇合適的框架也很重要——它要在提供所需功能的同時保持輕量。最近許多框架都使用簡潔的 HTML,CSS 和JavaScript 代碼。
以下是幾項可以加快讀取的輕量級框架:
* Pure
* Skeleton
* Milligram
框架并不能代替網頁設計,編程和維護。舉個簡單的例子,我們假設框架是一個新房子。房子干凈整潔,但它是空的。在你添加家具,家電和裝飾品時,你有責任確保房子不會變得凌亂。同樣地,當您使用了一個框架,您就有責任確保它不會被冗余的代碼,大圖片和過多的 HTTP 請求破壞。
- 雜(一般誤入)
- Vue
- CSS
- Web前端性能優化有哪些方法
- 后端
- 嘻嘻哈哈
- 一
- 二
- 三
- 大雜燴
- 什么是HTML,什么是CSS,什么JavaScript?
- JS動畫與CSS動畫的差異
- HTML,CSS
- 1.px、em、rem、vw、rpx之間的區別
- 2.為什么要初始化CSS樣式
- 3.CSS優先級算法如何計算?
- 4. ::before 和 :after中雙冒號和單冒號有什么區別?
- 5.display:inline-block 什么時候會顯示間隙?
- 6.行內元素有哪些?塊級元素有哪些?如何將行內元素表現為塊級元素?
- 7.css新增了哪些功能?
- 8.對html5語義化的理解
- 9.http頭的expires是表示什么
- 10.bootstrap柵格系統實現原理
- 11.清除浮動的方法
- 12.使用image間隙留白問題
- 13.html分為哪些層?都代表什么?
- 14.對于web中W3C標準的理解?
- 15.用css寫一個三角形?
- 16.CSS中使用表格怎么合并行,合并列
- 17.處理margin-top的bug問題
- 18.動畫進度條
- 19.box-sizing的屬性值
- 20.box-shadow的參數
- 21.a標簽的四個狀態及它們的順序、設置title屬性的效果
- 22.如何實現垂直水平居中
- 23.什么是雪碧圖
- 24.h1和title、b和strong、i和em的區別
- 25.table和div+css的區別
- 26.錨點的作用是什么?如何創建錨點
- 27.margin距離問題
- 28.響應式的導航欄
- 29.進度條
- 30.img標簽的title屬性和alt屬性有什么區別
- 31.媒體查詢
- 32.CSS選擇器有哪些?哪些屬性可以繼承?
- Javascript
- 1.面向對象的基本特征
- 2.在JavaScript中實現繼承的方法
- 2.用js去除字符串空格
- 3.你怎么理解作用域?
- 4.get和post的請求?
- 5.如何理解閉包?
- 6.數組的克隆(深拷貝)的方法
- 7.es6新增了哪些特性
- 8.json對象與字符串轉換
- 9.回調函數
- 10.HTML和XHML的共同點
- 11.js中把7.25轉換成一個整數
- 12.循環遍歷的方法
- 13.深拷貝與淺拷貝的區別
- 14.JavaScript有哪些方法定義對象
- 15.AJAX請求總共有多少種CALLBACK
- 16.js中的定時器
- 17.let、var、const的區別
- 18.==和===的區別
- 19.dom文檔(自上往下)加載的順序
- 20.string變成int型
- 21.如何判斷是否為一個質數
- 22.typeof返回類型,以及比較typeof與instanceof
- 23.判斷一個對象是否為數組以及數組的方法
- 24.解釋一下原型和原型鏈、hasOwnProperty
- 25.js有哪些內置對象
- 26.new一個對象發生了什么
- 27.sass的理解
- 28.document.onLoad與window.ready的區別
- 29.什么是跨域?跨域請求資源的方法有哪些?
- 30.Ajax的優缺點及工作原理
- 31.什么是正則
- 32.貪婪模式與非貪婪(懶惰)模式
- 33.數組去重
- 34.js字符串操作函數
- 35.substring和substr傳參的區別
- 36.如何實現一個原生的ajax,分成幾步
- 37.如何實現一個事件綁定
- 38.事件冒泡與事件捕獲的區別
- 39.事件監聽
- 40.字符串下標與字符串某一個字符之間的轉換
- 41.new操作符的作用
- 42.函數的定義方式
- 43.括號在JavaScipt中的作用
- 44.回調地獄
- 45.document.write和innerHTML的區別
- 46.解釋一下JS同源策略
- 47.說幾種DOM節點
- 48.DOM事件流
- 49.同步與異步
- 50.json和jsonp的區別
- 51.字符串去重
- 52.JS中的數據類型
- 53.this關鍵字指向問題
- 54.break和contiune之間的區別
- 55.如何消除事件冒泡與事件默認行為
- 56.請列舉jquery中的選擇器
- 瀏覽器及服務端
- 1.請說出三種減低頁面加載時間的方法
- 2.瀏覽器的緩存機制
- 3.瀏覽器的內核
- 4.瀏覽器的兼容問題
- 5.src和href的區別
- 6.高質量代碼具備哪些條件
- 7.HTTP請求與響應
- 8.談談對前端模塊化的理解
- 9.嚴格模式與混雜模式如何區分?
- 10.重繪和重排的區別
- 11.MVC和MVVM的區別
- 12.前端頁面如何解決適配的問題
- 13.寫一個400錯誤
- 14.狀態碼
- 15.開發及性能優化
- 16.靜態網頁與動態網頁的區別
- 17.如何調試網頁代碼?如何查看網頁源代碼
- 18.語義化的主要目的是什么?
- 19.如何讓所有的瀏覽器支持ES6語法
- 20.cookie,LocalStorage,sessionStorage的區別
- 計算題
- 1.margin距離問題
- 2.math
- 3.使用js實現階乘(1~10)
- 4.求一個數組的最大數
- 5.判斷一個字符串中出現次數最多的字符,統計這個次數
- 6.質數
- 7.如何把一個字符串倒過來輸出
- 取數據,渲染數據
- 1.ajax版本
- 2.vue版本
- 3.React版本
- 4.用class封裝一個ajax
- 5.用回調函數封裝一個ajax
- Vue,React
- 1.什么是路由?
- 2.vuex的工作流程
- 3.redux的工作流程
- 微信小程序
- 1.程序的生命周期
- 2.組件的生命周期
- 3.微信小程序頁面的生命周期
- 不會的問題
- 2019/01/02
- 2019/01/03
- 2019/01/07
- 2019/01/21
- 1