《高性能建站指南》上次讀是六年前在大學的時候,昨天下午有空從新讀了一遍,所以留下筆記,加上了一些本身的理解css
圖片地圖,css sprites,內聯圖片,合併腳本和樣式表node
cdn,縮短用戶和服務器之間的接收距離,下降中央服務器的壓力ajax
可以在過時時間前運用緩存瀏覽器
expires 定義靜態資源的過時日期,缺點是要保持用戶的系統時間和服務器的時間一致,緩存
max-age 優先級比expires高,定義還有多長時間過時,所以用戶系統時間無不須要和服務器的時間一致服務器
爲組件添加長久的expries頭網絡
客戶端發送獲取資源的request會帶上 Accept-Encoding:gzip,deflate,請求的response返回 Content-Encoding:gzip,tcp
主流瀏覽器都支持解壓gzip壓縮的文件,業界也主要使用gzip壓縮文件,服務器壓縮組件會增長服務器負載(細微得能夠忽略?)性能
對應有些瀏覽器不支持gzip壓縮,服務器會告知代理須要獲取accept-encoding請求頭來決定是否發送壓縮的文件,Vary:Accept-Encoding代理
瀏覽器逐步呈現,所以儘早加載構建好css Tree能更快構建好RenderTree,減小瀏覽器白屏時間加強用戶體驗
@import引用的CSS會等到頁面所有被下載完再被加載,不建議使用
使用Link標籤將樣式表放在head中
同步(以script標籤)加載腳本會阻塞後續資源加載,而且在瀏覽器解析js時候,會阻塞renderTree的構建
CSS表達式容易致使頁面性能開銷大,所以要避免用
內聯的JavaScript和css雖然減小了http請求開銷,可是會致使JavaScript和css沒法利用瀏覽器緩存
將JavaScript和css放到外部文件中
TTL(time-to-alive)告訴客戶端對改記錄保存多久,然而瀏覽器通常會忽略該值
開啓keep-alive(我的以爲keep-alive主要是經過重用tcp/ip通道減小tcp握手時間,對DNS查找無多大相關影響)
經過使用keep-alive和較少域名來減小DNS查找
對JavaScript源代碼進行精簡
尋找一種避免重定向方法
確保腳本只被包含一次
Etag即爲文件的版本號,當文件超過了過時時間,瀏覽器會向服務器發起文件請求,若瀏覽器緩存文件的Etag和服務器一致,
服務器返回304,瀏覽器則會繼續使用本地緩存文件,
不一樣的服務器對相同的文件的etag定義(inode-size-timestamp)是不一樣的,瀏覽器訪問不一樣的服務器會致使相同的文件卻沒法經過Etag重用緩存
建議配置Etag,只包含大小和時間戳或只有時間戳,或者移除Etag(last-modified頭能夠提供等價信息),移除Etag能夠減少http頭大小
確保ajax請求遵照性能指導,尤爲應具備長久的Expires頭