日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 網站 > 網頁設計 > 正文

0.1秒的價值!淺談Web前端頁面提速問題

2024-08-30 08:35:48
字體:
來源:轉載
供稿:網友

記得面試現在這份工作的時候,一位領導語重心長地談道——當今的世界是互聯網的世界,IT企業之間的競爭是很激烈的,如果一個網頁的加載和顯示速度,相比別人的站點頁面有那么0.1秒的提升,那也是很大的一個成就。

然后我不知道怎么寫下去了,就在群里問了那群狗頭軍師,結果是這樣的。。。

好的,是時候“語鋒一轉”切回主題了 —— 如何提升我們站點頁面的訪問速度、減少等待時間,從而最大化地提升用戶訪問體驗呢?

針對這個問題,我們今天會從前端的角度來提出系列解決方案,它們都能有效地提升你頁面的訪問速度。

一. 減少對服務器的文件請求

常規的HTTP請求屬于“請求”-“應答”-“斷開”形式的短連接,每一個獨立的資源我們都會向服務器發去一份get請求,再等服務端將我們需要的文件傳回來。每一次資源的請求都實實在在地耗費了一次“連接-等待-接收”的時間(當然將http請求設為keep-alive長連接狀態可以減少“連接”的次數和時間),如果我們能有效減少對服務器文件的請求次數,便意味著我們可以從這塊省下一些頁面等待時間,也可以順便減少服務器的負擔。

對于這個解決方案,我們可以這么做:

1. 使用css sprite技術合并多個圖片為單個圖片文件,實際使用時通過background-position來定位背景位置(相信大家第一個想到的也是這個吧);

2. 合并多個css樣式文件為單個樣式文件,合并多個腳本為單個腳本,再在頁面中引用合并后的樣式/腳本文件。對于這個你可以使用r.js來幫忙,但我個人倒是不怎么推薦這個方法,因為合并了文件之后,多個頁面之間公共部分的樣式/腳本文件就無法緩存到客戶端了;

3. 使用base64編碼來展示圖片。就如圖github 404頁面那樣:

你可以使用這個工具來幫你把圖片轉換為base64編碼的文件流,但常規只推薦你把這種方式使用在用戶重復訪問量較少的頁面,因為它們雖然無須從服務端get一遍,但也無法緩存在客戶端,導致用戶每次訪問頁面都要重新渲染一次。而且冗長的文件流代碼會占用你頁面很大的代碼空間,維護起頁面來估計也會挺心塞;

4. 將小塊的css、js代碼段直接寫在頁面上,而非在頁面引入獨立的樣式/腳本文件。相信有的朋友看慣了“保持結構 (標記)、表現 (樣式)、行為 (腳本)三者分離”的規范,對此觀點可能有些意見。只能說規范不是教條,適合自己的才是硬道理。直接把小段的、復用率低的樣式/腳本直接寫于頁面上帶來的利還是大于弊的(弊可能也就是增大了頁面代碼量、不那么好維護了點)。反觀所有主流門戶網站的頁面源文件,基本沒有一個是把樣式/腳本都全部作為外部文件引入的(無論他們是否從減少服務器請求這點出發,事實都是這樣);

5. 利用http-equiv="expires"元標簽,設定一個未來的某時間點作為頁面文件過期時間,用戶在過期時間之前所獲取到的頁面文件都僅從緩存中去取。不過這個辦法太死板(有時候即使服務端及時把過期時間更改為已結束時間,客戶端可能都不會按照新更改的規則去服務端獲取新文件資源),常規是不推薦使用的。

二. 減少文件大小

文件太大(特別是圖片)導致加載時間較長,往往都是影響頁面加載體驗的頭號大敵,那么盡可能減少請求文件的大小便是相當重要的事情了,我們可以做的事情有:

1. 壓縮樣式/腳本文件,就此你可以使用gulp或者grunt來實現這點,它們均能很好地減少css/js文件的大小(對于js還能起到混淆變量、函數名的作用);

2. 針對性選擇圖片格式,在無透明背景需求下,對于顏色較單一、無色彩漸變的圖片僅使用gif格式,對于jpg圖片也可按照其清晰度要求,在導出jpg的時候選擇對應的“品質”進行優化:

如果你喜歡嘗鮮,可以學淘寶那樣使用webp圖片格式,它能很好地優化同畫質下的文件大小:

3. 使用Font Awesome來替代頁面上的圖標,其原理是使用@font-face讓用戶下載一個非常小的UI字體包,把頁面上用到的圖標以字符的形式來顯示,從而減少了圖片需求和圖標文件大小。

三. 適度使用CDN

使用CDN有幾個好處:如果用戶在其它站點下載過這個CDN資源,那么來我們站點僅僅從緩存獲取即可;減少了對自己站點服務器的文件請求(外部CDN的情況下),減少服務器負擔;多個域會使瀏覽器允許異步下載資源的最大數量增多,比如一個站點只從一個域來請求資源,那么FireFox只允許同時刻最多異步下載2個文件,但如果使用了外部CDN來引入資源,那么FF允許在同時異步下載本域中的兩個資源外,還額外允許同時異步下載另一個域(CDN)下的2個資源。

但是使用CDN有一個很大的問題——增加了dns解析的開銷,如果一個頁面同時引入了多個CDN的資源,可能會因為dns解析而陷入較多的等待時間,導致得不償失。

對于這個問題,常規是建議一個站點下只使用同一個可靠、快速的CDN來引入各種所需資源即可,也就是說,建議一個頁面從2個不同的域(比如站點域和CDN域)下來請求資源是最佳的選擇(據說這個結論是雅虎前端工程師提出的)。

四. 延遲請求、異步加載腳本

在各主流瀏覽器下,常規情況,我們的腳本文件跟隨其它資源文件一樣都是異步下載的,但這里存在一個問題——比如FireFox下載好腳本后的一小段時間內會有“執行阻塞”的情況發生,也就是說瀏覽器下載好腳本后執行它的這段時間里,瀏覽器的其它行為被阻塞,導致頁面上的其它資源都是無法被請求和下載的:

如果你頁面里存在js代碼執行時間過長的情況,那么用戶就會明顯感覺到頁面的延遲。解決這個問題有一個簡單的方法——將腳本請求標簽放置到</body>結束標簽前,使得頁面上的腳本成為最后被請求的資源,自然也不會阻塞其它頁面資源的請求事件了。

另外,雖然上面提到“我們的腳本文件跟隨其它資源文件一樣都是異步下載的”,但異步下載不代表異步執行,為了嚴格保證腳本邏輯順序和依賴關系的正確性,瀏覽器會按照腳本被請求的先后順序來執行腳本。那么問題就來了——如果頁面上的腳本依賴關系并不大,甚至沒有任何相互間的依賴,那么瀏覽器的這套規則就僅僅增加了頁面請求阻塞時間而已(就像你花大錢買了一筆保險,但被保險期間你平安無事啥都沒發生…… 嗯,這個比喻有點反人類……)。

解決這個問題的辦法無非就是讓腳本無阻塞地異步執行,比如給script標簽加上defer和async屬性或者動態注入腳本(可以參考這里),但這些都不是良好的解決方案,要么存在兼容性問題,要么太麻煩還無法處理依賴。

個人是推薦使用 requireJS(AMD規范) 或 seaJS(CMD規范) 來異步加載腳本并處理模塊依賴的,前者將“依賴前置”(預加載所有被依賴腳本模塊,執行速度最快),后者走的“依賴就近”(懶加載被依賴腳本模塊,請求腳本更科學),你可以根據項目具體需求來選擇最合適的。

五. 延遲請求首屏外的文件

先解釋下,“首屏”指的是頁面初始化時候的頁面內容顯示區域,也就是頁面一加載,用戶就首先看到的區域。

比如像京東啊淘寶啊,對于需要滾動頁面才能看到的圖片內容,都做了類似lazyload的處理,這些無非都是走了代理模式的理念,但的確給用戶一個錯覺——這個頁面更快地加載完了,因為我很快就看到了屏幕上的內容(即使我還沒下拉滾動條,而頁面后方的文件其實還沒真正加載呢)。

我們可以這樣實現此方案,不依賴任何lazyload庫,拿圖片來做示范,我們可以這樣編寫首屏外的圖片(假設某張圖片地址是a.jpg)的img標簽:

<img src="data:image/png;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=" data-src="a.jpg">

如上所示,頁面初步加載這張圖片的時候是直接以base64的方式(當然你也可以統一使用一張占位圖loading.gif來替代)來快速顯示一張極小的圖片的,而圖片本身的真實路徑是存在data-src屬性內的,我們可以在頁面加載結束后再向服務器請求它真實的文件并替換:

function init(){

     var imgDefer = document.getElementsByTagName('img');

     for (var i=0; i<imgDefer.length; i++) {

         if(imgDefer[i].getAttribute('data-src')) {

            imgDefer[i].setAttribute('src',imgDefer[i].getAttribute('data-src'));

        }

    }

}

window.onload = init;

如上是對圖片的延遲加載處理,對于視頻、音頻文件,可以采取完全一樣的原理來延遲加載,從而有效減少頁面初始化等待時間。

六. 優化頁面模塊排放順序

這里有一個很好的例子,比如有一個頁面是這樣的——左邊是側邊欄,用于存放用戶的頭像啊、資料啊,以及網站投放的廣告啊,而右側是文章內容區域:

 那么我們的代碼很可能是這樣的:

<body>

    <sidebar>

        <!-- 側邊欄內容 -->

    </sidebar>

    <content>

        <!-- 文章內容 -->

    </content>

</body>

于是乎,瀏覽器按照它的UI單線程準則從上到下先加載了側邊欄,再加載我們的文章。。。

很明顯,這樣不是一個人性化的加載順序,我們得弄清楚,頁面上各個區域模塊,對于用戶而言,哪個才是最重要、最應當首先展示的。

對于上面的例子,文章內容才應該是用戶首先要看到、需要瀏覽器優先請求和顯示的區域。所以我們得修改我們的代碼為:

<body>

    <content>

        <!-- 文章內容 -->

    </content>

    <sidebar>

        <!-- 側邊欄內容 -->

    </sidebar>

</body>

當然這里僅僅是用一個小示例來挑起各位的腦洞,懂得舉一反三和實際運用才是硬道理。

七. 其它建議

1. 不要在css中使用@import,它會讓一個樣式文件去等待另一個樣式文件的請求,無形中增加了頁面等待時間(當然如果走的scss,@import就是另一回事了,呃跑題了~);

2. 避免頁面或者頁面文件重定向查找,這相當于你走進了一間衛生間,然后看到上面的牌子說“此處不同,請去前面左拐的衛生間”,又得重走一遍;

3. 減少無效請求——比如通過css/js來請求一個不存在的資源,可能會導致較長的等待和阻塞(直到它返回錯誤信息);

4. 無論你是否決定將腳本放到頁尾,但一定要保障腳本放置于樣式文件后方;

5. 配置.htaccess文件、走Gzip頁面壓縮形式、開啟keep-alive連接模式等后端解決方案,這邊就不細說了。

相信頁面提速的方案絕對不僅僅局限于上面提到的這些,而且每個項目都有著各種需求和情況,只能按需選擇適合自己的方案。

但最重要的還是——盡量把用戶的體驗放在第一位,無論是頁面的加載或者交互,都應當多從用戶角度切入去思考和設計最優選的方案,這樣相信你一定能做出出色、受歡迎的作品。

今天聊的就是這些,共勉~

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
在线一区av| www..com日韩| 一二三区精品福利视频| 91xxx在线观看| 欧美国产三级| 欧美中文字幕在线视频| 免费视频最近日韩| 精品国产31久久久久久| 精品视频123区在线观看| 色综合婷婷久久| 亚洲三级中文字幕| 婷婷中文字幕一区| 日本不卡免费高清视频| 国产乱一区二区| 午夜国产福利一区二区| 国产一级在线播放| 中文字幕亚洲乱码| 日韩精品欧美| 日韩黄色在线播放| 欧美日韩中国免费专区在线看| 热久久精品国产| 亚洲欧洲在线观看av| 欧美不卡视频一区| 精品日韩在线播放| 欧美日韩精品在线播放| 国产亚洲欧美中文| 在线一区二区三区精品| av免费观看网站| 国产福利在线看| 国产欧美中文在线| www.日韩免费| 中文字幕精品视频在线| 日本亚洲欧美三级| 国产成人精品免费久久久久| 中文字幕在线视频网| 久久婷婷综合国产| 色综合影院在线| 天堂中文在线视频| 一区二区精品| 久久中文免费视频| 一区二区精品区| 国产黄色在线网站| 91精品国产自产91精品| 精品无人国产偷自产在线| 一级片在线播放| 精品久久久三级| 国产黄在线观看免费观看不卡| 亚洲国产91精品在线观看| 日本中文字幕在线观看| 91精品国产网站| 欧美三级免费观看| 亚洲v中文字幕| 国产黄色精品| 精品久久久三级| 最近中文av字幕在线中文| 在线一区av| 欧美.日韩.国产.一区.二区| 亚洲区中文字幕| 国产www在线观看| 日韩午夜高潮| 欧美日韩中文字幕一区| 欧美日韩国产一中文字不卡| 欧美日韩综合在线免费观看| 国产丝袜一区二区| 91精品日本| 久久久精品国产99久久精品芒果| 日韩国产高清一区| 国产不卡在线| 国产成人一区二区精品非洲| 精品极品三级久久久久| 国产超级va在线视频| 亚洲一区三区在线观看| 国产欧美日韩在线播放| 亚洲成人7777| 亚洲最新永久观看在线| www.老鸭窝.com| 国产欧美中文字幕| 中文国产字幕在线观看| 久久手机免费观看| 成人a在线视频免费观看| 日韩国产欧美| 国产免费永久在线观看| 日韩精品视频网站| 日韩国产专区| 午夜黄色小视频| 国产成人va亚洲电影| 婷婷久久综合九色国产成人| 国产在成人精品线拍偷自揄拍| 欧美日韩久久久| 日韩欧美一二三| 91精品国产综合久久香蕉最新版 | 亚洲一区在线观看免费| 中文字幕99| 成年人黄国产| 91麻豆免费视频网站| 精品日韩欧美在线| 欧美不卡视频一区发布| 国产一二三视频| 男人的天堂网av| 国产欧美日韩中文久久| 在线视频日韩欧美| 三级网站免费观看| 欧美性极品xxxx做受| 国产91一区| 高清国产一区| 欧美久久久精品| 精品国产乱码久久久久久蜜臀| 一级片在线免费看| 国产福利一区二区在线精品| 中文字幕五月欧美| 久久精品网站免费观看| av免费看在线| 成人一区二区不卡免费| 午夜国产视频| 欧美亚洲国产日韩| 日韩精品视频网| 国产成人精品亚洲| 日韩欧美在线视频| 亚洲黄色www| 日韩精品免费观看视频| 97视频在线| 欧美熟妇乱码在线一区| 国产日韩av一区| 一级特黄aaa大片在线观看| 国产福利一区二区在线精品| 不卡av免费在线| 深夜福利一区| 91精品综合久久久久久| 91精品久久久久久蜜臀| 一区二区三区久久| xxxxx性| 国产精品福利视频一区二区三区| 亚洲一区在线视频观看| 日韩精品在线看| 国产在成人精品线拍偷自揄拍| 一二三区精品福利视频| 国产一级免费看| 黄色精品在线观看| 一区三区二区视频| 中文字幕中文字幕精品| 国产成人精品综合久久久| 国产日韩av高清| 中文字幕在线亚洲| 日韩免费不卡avV| 一区二区视频在线观看免费的| 国产一区三区三区| 日韩精品大片| 久久久精品日韩欧美| 91精品久久久久久久久久| 国产v日产∨综合v精品视频| 在线国产91| 成人无遮挡免费网站视频在线观看 | 国产小视频免费在线网址| 日韩高清在线不卡| 日韩亚洲欧美中文高清在线| 91精品在线观看入口| 国产99亚洲| 精品福利一区二区三区| 欧美午夜精品在线| 欧美日韩国产系列| 中文字幕亚洲一区二区av在线| 亚洲一区中文字幕在线观看| 日韩欧美看国产| 男人的天堂网av| 日韩亚洲欧美中文在线| 中文字幕 乱码 中文乱码91| 欧美日韩中文精品| 亚洲一区二区三区精品中文字幕| 日韩欧美在线字幕 | 日韩高清在线一区二区| 日韩亚洲欧美中文在线| 国产伦精品免费视频| 高清日韩中文字幕| 国产成人一区二区精品非洲| 在线三级av| 欧美日韩激情一区| 国产一级片播放| 五月综合激情日本mⅴ| 日韩视频在线一区二区三区| 红桃视频国产一区| 一区二区91| 欧美日韩综合高清一区二区 | 精品午夜av| 日韩欧美亚洲区| 一区二区在线视频播放| 国产一级片在线播放| 91精品国产欧美日韩| 久久99久久99精品中文字幕| 日韩免费视频| 91日韩欧美| 91久久久精品| 久久精品国产91精品亚洲| 91精品视频播放| 色综合天天综合网国产成人综合天| 中文在线视频| 亚洲v中文字幕| 一区二区不卡视频| 国产精品福利视频一区二区三区| 国产黄色在线看| 精品日韩在线| 中文字幕在线视频日韩| 精品国产91| 91精品国产调教在线观看| 影音先锋中文字幕在线观看| 在线手机中文字幕| 欧美日韩国产综合久久| 中文字幕在线播放一区| 国产网站欧美日韩免费精品在线观看| 中文字幕视频一区二区三区久| 一级片在线播放| 婷婷综合福利| 色欧美日韩亚洲| 99精品免费观看| 在线不卡日本| 91精品999| 欧美日韩国产综合视频在线观看| 亚洲大片免费看| 国产日韩1区| 91麻豆视频网站| 国产自产视频| 亚洲欧洲国产视频| 日韩中文在线中文网三级| 国产高清一级片| 亚洲国产欧美91| 精品人妻一区二区三区视频| 一区二区不卡视频| 一区二区高清视频| 精品免费久久久| 97天天综合网| 久久中文精品| 国产一二三视频| 一区二区高清在线| 中文字幕精品视频| 国产裸体歌舞团一区二区 | 欧美日韩精品是欧美日韩精品| 亚洲九九精品| 中文亚洲欧美| 在线观看一区| 欧美日韩国产第一页| 婷婷中文字幕在线观看| 国产一级片网站| 一级特黄aaa大片在线观看| 91精品观看| 99精品人妻国产毛片| 99精品一级欧美片免费播放| 中文字幕在线视频第一页| 国产中文伊人| 久久中文免费视频| 中文字幕亚洲第一| 国产在线日韩欧美| 日韩精品一级| 免费精品国产自产拍在| 欧美1区免费| 免费在线视频一区二区| 国产在线欧美日韩| 在线国产99| 国产中文在线视频| 日韩色在线观看| 高清一区二区| 日韩精品高清不卡| 欧美激情视频一区二区三区在线播放 | 在线看av的网址| 久久久久久欧美| 免费在线视频一级不卡| 日韩 欧美 综合| 91精品xxx在线观看| 亚洲高清免费一级二级三级| 亚洲一区在线观看网站| 精品在线网站观看| 欧美综合精品| 欧美不卡一二三| va中文字幕| 亚洲免费精品| 中文字幕日韩亚洲| 久久手机免费观看| 欧美日韩在线观看成人| 欧美日韩国产三级| 日韩影院二区| 日韩一级二级三级| 国产视频中文字幕| 国产95在线|亚洲| 精品在线网站观看| 中文字幕狠狠干| 国产视频97| 福利一区二区| 日韩一级二级三级| 亚洲专区一二三| 日本黄色一区二区三区| 欧美二区在线观看| 欧美日韩精品三区| 欧美日韩精品在线观看| 亚洲 欧美综合在线网络| 不卡在线一区二区| 一区视频在线播放| 一区二区三区视频网站| 成人欧美亚洲| 日韩欧美高清在线视频| 国产一区激情在线| 国产欧美久久久| 日韩亚洲国产欧美| 在线观看av的网站| 日韩在线一区二区视频| 国产在线欧美日韩| 亚洲午夜av| 亚洲视频日韩| 国产一级粉嫩xxxx| 精品日韩在线观看| 91亚洲国产高清| 国产传媒久久久| 69av亚洲| 黄色国产网站在线播放| 欧美日韩色综合| 国产伦精品免费视频| 亚洲高清免费一级二级三级| 中文字幕在线播出| 国产黄色一区| 国产成人日日夜夜| 一本一道综合狠狠老| 国产不卡在线观看视频| 国产91大片| 91精品免费在线观看| 婷婷中文字幕一区| 中文字幕亚洲一区二区av在线| 国产永久在线观看| 欧美日韩综合高清一区二区 | 亚洲一区导航| √新版天堂资源在线资源| 欧美三级三级三级爽爽爽| 国产专区中文字幕| 久久婷婷综合国产| 中文字幕欧美国内| 欧美日韩国产免费| 欧美日韩不卡在线视频| 国产一卡2卡3卡四卡网站| 精品一二线国产| 麻豆精品视频入口| 国产日韩精品在线看| 日韩精品视频在线观看网址| 日韩欧美国产成人精品免费| 日本一欧美一欧美一亚洲视频| 亚洲大片精品永久免费| 欧美性极品xxxx做受| 久久精品人妻一区二区三区| 77777_亚洲午夜久久多人| 国产乱国产乱300精品| 欧美国产日韩在线播放| 欧美日韩乱国产| 国产日韩成人精品| 99国内精品| 一区二区三区在线免费| 国产色在线视频| 欧美一级手机免费观看片| 国产小视频免费在线观看| 日韩在线视频免费观看高清中文| 欧美成人一区二区| 91九色在线播放| 午夜伦欧美伦电影理论片| 国产欧美高清在线| 91精品国产91久久久久久青草| 精品999视频| 国产精品一区二三区| 亚洲高清中文字幕| 欧美日韩久久不卡| 91麻豆精品国产91久久久使用方法| 亚洲成av人片| 一区二区日韩视频| 欧美日韩国产综合视频在线观看 | 中文字幕久久精品| 日韩av综合在线观看| 亚洲一区视频在线观看视频| 精品日韩欧美| 中文字幕在线观看网址| 精品日韩av一区二区| 中文字幕亚洲视频| 国产在线观看色| 视频一区二区国产| 中文字幕在线视频精品| 国产香蕉精品视频| 亚洲精品中文字幕乱码三区| 久久精品国产2020观看福利| 亚洲一区中文字幕在线观看| 亚洲午夜久久| 欧美日韩中文国产| 亚洲三级国产| 欧美片网站免费| 亚洲中文字幕一区| 国产黄在线看| 欧美日韩中文精品| 亚洲大片精品永久免费| 亚洲高清免费一级二级三级| 不卡一区2区| 精品欧美日韩在线| 国产一二三区精品视频| 日韩色在线观看| 亚洲第一中文字幕| 久久99久久久欧美国产| 免费网站看黄yyy222| 亚洲免费中文字幕| 一区二区三区中文字幕在线观看| 精品日韩99亚洲|