【成都網(wǎng)站建設(shè)】高性能網(wǎng)站建設(shè)指南筆記-成都創(chuàng)新互聯(lián)官方網(wǎng)站

2022-12-29    分類: 網(wǎng)站建設(shè)

性能黃金法則:

只有10%-20%的最終用戶響應(yīng)時間花在加載html文檔,其余80%-90%時間花在加載頁面所需的組件(腳本,圖片,樣式表,flasf..)

本文的內(nèi)容就是來減少那80%-90%的時間.

減少HTTP請求

圖片地圖(Image Map)

通過<\map>標(biāo)簽,把多個URL關(guān)聯(lián)到一個圖片上,來減少HTTP的開銷.

原理就是通過你點擊的圖片區(qū)域來映射你對應(yīng)該區(qū)域的URL.

缺點:

無法手工進行定義區(qū)域坐標(biāo) 定義的形狀單一 IE有兼容性問題 CSS Sprites

原理: 把多個碎圖片合在一張圖片上,在通過CSS的position來獲取你需要的圖片.

優(yōu)點:

減少HTTP請求 減少圖片的加載量

困惑點:

網(wǎng)站建設(shè)

有人認為合并后的圖片會大于分散圖片之和,因為他們覺得合并的圖片含有留白.

實際上是小于為合并的,因為合并后一張圖片減少了圖片本身的開銷(顏色,格式等).

內(nèi)聯(lián)圖片(Inline Images)

通過data:URL的格式在頁面使用圖片而無需HTTP請求.

缺點:

IE不支持 數(shù)據(jù)大小,質(zhì)量受到限制. 合并腳本與樣式表

原理: 把一個頁面依賴的樣式合并為一個樣式,把依賴的所有腳本合并為一個腳本.

(現(xiàn)在的打包工具可以很方便做到這個)

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

CDN: 一組分布在不同地理位置的服務(wù)器,來更高效的向用戶發(fā)布數(shù)據(jù).

優(yōu)點:

縮短響應(yīng)時間 可以緩存,備份,擴展存儲能力 緩和web峰值的壓力

缺點:

你的響應(yīng)時間會受到其他網(wǎng)站的影響,因為CDN提供商的所有客戶都是共用web服務(wù)器組. 無法直接控制組件服務(wù)器. 受限于CDN供應(yīng)商本身服務(wù)器的性能.

添加expires頭

理解expires:

瀏覽器(代理)通過使用緩存來減少HTTP的請求數(shù)量,并減少響應(yīng)大小.加速頁面的加載.

服務(wù)器通過expires頭告知客戶端可以在指定的時間內(nèi)使用某個組件的副本.(超過那個時間就是無效的),直接從客戶端硬盤讀取數(shù)據(jù),響應(yīng)時間少.

Expires : Thu, 15 Apr 2016 20:00:00 GMT

Expires會要求服務(wù)器端時間與客戶端時間嚴格同步,并且一旦過期,服務(wù)器需要配制新的日期.

空緩存: 用戶第一次訪問你的網(wǎng)站,即使設(shè)置了Exppires頭也不會減少HTTP請求數(shù)量,因為此時瀏覽器的緩存是空的.

完整緩存: 如果你的所有可以緩存的組件都在緩存狀態(tài).

所以使用長久的Expires頭的場景對象應(yīng)該是那些不經(jīng)常變化的組件:

Cache-Control:max-age = 315000000

通過Cache-Control:max-age可以指定一個組件被緩存多久,單位s。

如果同時有max-age和Expires,那么會重寫Expires.

壓縮組件

原理: 通過減少HTTP響應(yīng)包的大小,來減少響應(yīng)時間。

客戶端通過HTTP請求設(shè)置Accept-Encoding來標(biāo)志對哪些壓縮的支持.

Accept-Encoding : gzip

服務(wù)器看到上述報頭,會使用客戶端的壓縮方式來壓縮響應(yīng).并通過Content-Encoding告知客戶端.

Content-Encoding : gzip

壓縮的內(nèi)容: 理想的是任何響應(yīng)文本(除了圖片,PDF)

壓縮帶來的成本:

服務(wù)器需要花費額外CPU周期來完成壓縮. 客戶端對響應(yīng)需要進行解壓.

代理緩存:

問題點:

demo1

瀏覽器A(不支持gzip) --> 通過代理發(fā)送一個請求 --> 服務(wù)器 --> 服務(wù)器返回的響應(yīng)那么就是沒壓縮的 --> 該響應(yīng)被代理緩存并且發(fā)給瀏覽器A瀏覽器B(支持gzip) --> 通過同一個代理發(fā)送同一個URL --> 代理會使用之前緩存的未壓縮內(nèi)容進行響應(yīng).這就沒達到壓縮的用途了

成都網(wǎng)站建設(shè)

demo2

瀏覽器A(支持gzip) --> 通過代理發(fā)生URL --> 服務(wù)器 --> 服務(wù)器返回壓縮后的響應(yīng) --> 代理緩存該響應(yīng) --> 并把響應(yīng)發(fā)給客戶端瀏覽器B(不支持gzip) --> 通過同一代理發(fā)送同一URL --> 代理會使用之前已經(jīng)緩存的壓縮的響應(yīng)內(nèi)容進行響應(yīng) --> 就尷尬了

解決辦法:在服務(wù)器的響應(yīng)添加Vary頭.即

Vary : Accept-Encoding

原理:就是讓代理可以緩存響應(yīng)的多個版本.

把樣式表放在頂部

目的: 改善整體的用戶體驗.讓瀏覽器逐漸顯示網(wǎng)頁內(nèi)容,與用戶可以形成很好的視覺溝通.

白屏的概念:

你把樣式表放在文檔底部,有時候頁面加載緩慢你會發(fā)現(xiàn)頁面一片空白,直到突破內(nèi)容又一下子填滿頁面.這就是白屏.

把樣式表放在文檔底部出現(xiàn)白屏的情況有以下幾種:

在新窗口打開時候重新加載頁面時候(點擊刷新按鈕) 作為主頁時候

把樣式表放在頂部注意的情況:

使用link而不是@import加載樣式(@import加載性能不好,組件的加載是無序性) 樣式表在頁面的位置不影響加載的時間,只影響頁面的呈現(xiàn)

把腳本放在頁面底部

腳本會阻塞并行下載,也就是說如果你把腳本放在非底部的其他位置,位于腳本下面的代碼要等到腳本加載解析完才輪到它,這就妨礙了頁面的逐漸顯示原則.

避免CSS表達式

因為每當(dāng)頁面發(fā)生變化(大小,事件交互等),CSS表達式都會重新求值計算,這就影響了頁面的性能.

使用外嵌組件(外部JS和CSS)而不是內(nèi)聯(lián)

使用外部組件優(yōu)點:

JS文件和CSS文件可以被瀏覽器緩存. 外部文件可以提高組件的重用率,方便維護.

減少DNS查找.

為什么減少DNS查找可以提升性能?

因為你在瀏覽器輸入一個URL,需要先經(jīng)過DNS查找,找到你輸入的URL對應(yīng)的主機的IP地址,在未找到之前,你是不可以獲取的到任何服務(wù)器資源的.所以減少DNS的開銷是有必要的.

DNS緩存

DNS的查找是可以被緩存來提供查找效率.也就是說你的DNS信息會緩存在瀏覽器里面和操作系統(tǒng)里面.

影響DNS的緩存的原因

TTL值: 告知客戶端對記錄緩存多久.

瀏覽器對緩存的DNS數(shù)量是有限制的.

通過Keep-Alive來重用現(xiàn)有鏈接

一個持久的TCP鏈接就無需要DNS查找.

通過減少唯一主機名的數(shù)量來減少并行加載的組件數(shù)量

精簡JS

減少不必要的字符(注釋,空白字符等)來改善組件的大小,減少加載時間 壓縮:在精簡基礎(chǔ)上進行壓縮

避免重定向

重定向的概念:就是把用戶從一個URL路由到另外一個URL.常見的重定向有301.302

為什么要避免使用重定向?

你如果使用了重定向,那么在文檔下載之前會有很多的一個空白期.這對用戶體驗相當(dāng)不友好.所以重定向會延遲頁面所有東西.

移除重復(fù)的腳本

重復(fù)的腳本帶來的弊端:

多余的HTTP請求 執(zhí)行JS的時間花費

配制ETag(實體標(biāo)簽)

什么是ETag(實體標(biāo)簽)?

ETag: 服務(wù)器和瀏覽器確定緩存組件有效性的一種機制

理解瀏覽器緩存的工作機制:

瀏覽器向服務(wù)器訪問一個URL,服務(wù)器返回響應(yīng)中一個Expires字段.瀏覽器檢測該字段是否有效,有效就會使用瀏覽器緩存中的資源,再次請求時候不會發(fā)送HTTP,其實在重用緩存時候,需要發(fā)送一個GET請求,進行檢測時候有效,如果有效服務(wù)器會返回一個304 Not Modified.

服務(wù)器檢測組件與客戶端緩存資源是否匹配常用的方式:

通過最新修改的時間進行比較 通過比較實體標(biāo)簽 通過修改時間進行比較

最新修改時間:指的是服務(wù)器在響應(yīng)中會返回一個Last-Modified響應(yīng)頭,告訴我們組件最后修改時間

當(dāng)你再一次請求同一資源時候,瀏覽器在請求中會帶有If-Modified-Since字段,把最新修改的日期傳回到服務(wù)器,服務(wù)器把這個最新修改日期與之前的Last-Modified時間進行比較,如果匹配一致,服務(wù)器返回304,使用緩存的.

通過實體標(biāo)簽(更加靈活)

ETag是唯一標(biāo)志了組件版本的字符串,必須用引號引起來.

第一次請求資源時候,服務(wù)器會返回一個資源的ETag,

當(dāng)瀏覽器再次請求該資源時候,瀏覽器會通過一個組件進行驗證,通過If-None-Match把ETag傳到原始服務(wù)器,服務(wù)器會進行比較剛剛傳過來的與之前的是否有變化,一致的話,服務(wù)器返回304.

ETag的問題點:

瀏覽器向一個服務(wù)器請求資源,獲得響應(yīng)的一個ETag,當(dāng)瀏覽器再次向另外一個服務(wù)器請求資源,這個時候兩者ETag是不匹配的.換言之對于有多個服務(wù)器處理請求的網(wǎng)站來說,ETag是有一定概率驗證失敗. 降低代理緩存的有效性.用戶緩存的ETag和代理緩存的ETag不匹配,導(dǎo)致重新請求原始服務(wù)器,浪費HTTP開銷.

ETag的解決辦法:

配制ETag或者移除ETag.

通過Ajax緩存

Ajax本質(zhì)就是提升用戶體驗的.

優(yōu)化Ajax請求

壓縮組件

減少DNS查找 精簡JS 避免重定向 ETag的處理

本文名稱:【成都網(wǎng)站建設(shè)】高性能網(wǎng)站建設(shè)指南筆記-成都創(chuàng)新互聯(lián)官方網(wǎng)站
標(biāo)題來源:http://www.muchs.cn/news33/226533.html

網(wǎng)站建設(shè)、網(wǎng)絡(luò)推廣公司-創(chuàng)新互聯(lián),是專注品牌與效果的網(wǎng)站制作,網(wǎng)絡(luò)營銷seo公司;服務(wù)項目有網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站