網(wǎng)站速度的重要性不言而喻,除了使用常規(guī)的緩存插件方法外,今天想從技術(shù)角度聊聊優(yōu)化網(wǎng)頁(yè)加載速度的問(wèn)題。
提示一下,文章會(huì)涉及到前端代碼等技術(shù)相關(guān)的內(nèi)容,有點(diǎn)晦澀,對(duì)此不感冒的可以直接退出了。
都知道,HTML 代碼中的 <head> 標(biāo)簽區(qū)域內(nèi)通常會(huì)放一堆腳本、樣式,以及 Meta 相關(guān)的內(nèi)容。但是我發(fā)現(xiàn)很多插件,或者說(shuō)比較多的網(wǎng)站站長(zhǎng)并不會(huì)注意這些元素的排列順序。
所以不得不提醒大家的是,錯(cuò)誤的排列順序會(huì)直接影響網(wǎng)站的加載速度和網(wǎng)頁(yè)渲染效率。至于具體的技術(shù)原理,推薦大家看看下面的這個(gè)視頻,我便不展開(kāi)敘述了。
在視頻中,作者有推薦代碼片段的最佳排序順序,我簡(jiǎn)單總結(jié)一下各個(gè)腳本的用處及特點(diǎn),借花獻(xiàn)佛。
首先放置 preconnect 類(lèi)型標(biāo)簽,用于告訴瀏覽器在請(qǐng)求之前預(yù)連接到指定的資源服務(wù)器,這么做有助于減少建立連接的延遲,從而提高頁(yè)面加載性能。
例如字體服務(wù)器、CDN 服務(wù)器或其他托管第三方資源的服務(wù)器。這樣,當(dāng)瀏覽器真正需要請(qǐng)求這些資源時(shí),客戶(hù)端與服務(wù)端已經(jīng)建立好連接,從而減少了鏈接往返的時(shí)間。
接著便是 script-async 標(biāo)簽了,這種標(biāo)簽的主要作用就是指定腳本的異步加載方式。當(dāng)腳本使用?async?
屬性時(shí),它將在加載時(shí)不會(huì)阻塞 HTML 解析,并且在加載完成后立即執(zhí)行,而不考慮頁(yè)面中其他內(nèi)容的加載狀態(tài)。
然后是 css-contains-@ import 標(biāo)簽了。在 CSS 中,@import
是一種用于導(dǎo)入外部樣式表的規(guī)則。它允許將一個(gè) CSS 文件嵌套在另一個(gè) CSS 文件中,從而可以將多個(gè)樣式文件組織在一起,便于管理和維護(hù)。但是現(xiàn)在這種規(guī)則很少用了,大多是使用 <link> 標(biāo)簽進(jìn)行替代了。
緊接著就是 sync-js 與 sync-css 標(biāo)簽了,作用就是用于控制 JavaScript 腳本或者 CSS 腳本的加載和執(zhí)行方式。
接下來(lái)就是 preload 腳本,其主要的作用就是在頁(yè)面加載時(shí)預(yù)加載資源(如腳本、樣式表、字體等)。它可以在瀏覽器空閑時(shí)提前加載這些資源,以?xún)?yōu)化頁(yè)面性能,提高用戶(hù)體驗(yàn)。
preload 腳本之后的便是 script-defer 腳本了,其實(shí)這是 HTML 中?<script>
標(biāo)簽的一個(gè)屬性,用于控制腳本的延遲加載方式。通過(guò)使用?defer?
屬性,可以讓腳本在 HTML 解析完成后再執(zhí)行,而不會(huì)阻塞頁(yè)面的加載。
最后便是 prefetch 與 prerender 相關(guān)的腳本了,這兩個(gè)都是 HTML 中的?<link>
標(biāo)簽的屬性,用于優(yōu)化資源預(yù)加載以提高頁(yè)面性能。它們可以在瀏覽器空閑時(shí)預(yù)先加載資源,以便在未來(lái)需要時(shí)可以立即使用。
對(duì)了,像我們平時(shí)安裝的 Google Analytics 監(jiān)控代碼、SEO 相關(guān)的腳本代碼,是不宜直接放在頁(yè)面頂部的。一般我的做法便是放在最后,等頁(yè)面網(wǎng)頁(yè)加載與頁(yè)面渲染全部做完之后,再來(lái)執(zhí)行監(jiān)控相關(guān)代碼。
但是谷歌等平臺(tái)一般建議,都是讓你直接放在頁(yè)面頂部。所以從這個(gè)角度出發(fā),不要老是聽(tīng)谷歌的建議。
說(shuō)完了各類(lèi)型腳本的排列順序,再來(lái)介紹一款與之相關(guān)的速度測(cè)試與性能優(yōu)化開(kāi)源工具,capo.js。
鏈接:https://github.com/rviscomi/capo.js
工具的基本原理就是上面提及的,計(jì)算并統(tǒng)計(jì)各類(lèi)型腳本的加載時(shí)長(zhǎng),并給出相應(yīng)的優(yōu)化建議。具體的實(shí)操細(xì)節(jié)便不介紹了,需要一點(diǎn)代碼能力,有興趣的可以具體實(shí)踐一下。
好消息是,這款工具的發(fā)布者最近開(kāi)發(fā)了一款瀏覽器插件,但實(shí)際使用過(guò)后,給我的感覺(jué)并不是很好用。如果有會(huì)代碼的朋友不妨從這個(gè)點(diǎn)切入,去做個(gè)相關(guān)產(chǎn)品出來(lái),不失為一個(gè)生財(cái)點(diǎn)。
文章為作者獨(dú)立觀(guān)點(diǎn),不代表DLZ123立場(chǎng)。如有侵權(quán),請(qǐng)聯(lián)系我們。( 版權(quán)為作者所有,如需轉(zhuǎn)載,請(qǐng)聯(lián)系作者 )

網(wǎng)站運(yùn)營(yíng)至今,離不開(kāi)小伙伴們的支持。 為了給小伙伴們提供一個(gè)互相交流的平臺(tái)和資源的對(duì)接,特地開(kāi)通了獨(dú)立站交流群。
群里有不少運(yùn)營(yíng)大神,不時(shí)會(huì)分享一些運(yùn)營(yíng)技巧,更有一些資源收藏愛(ài)好者不時(shí)分享一些優(yōu)質(zhì)的學(xué)習(xí)資料。
現(xiàn)在可以?huà)叽a進(jìn)群,備注【加群】。 ( 群完全免費(fèi),不廣告不賣(mài)課!)