亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

首頁 web前端 js教程 如何使用字體加載器改善頁面性能

如何使用字體加載器改善頁面性能

Feb 21, 2025 am 08:25 AM

How to Improve Page Performance with a Font Loader

要點(diǎn)總結(jié)

  • 使用字體加載器能顯著提升網(wǎng)頁性能,因?yàn)樗芸刂凭W(wǎng)頁字體的加載時(shí)機(jī)和方式,從而縮短頁面加載時(shí)間,并避免“未樣式文本閃爍”(FOUT)現(xiàn)象。
  • webfontloader JavaScript 庫是一個(gè)非常有用的工具,它可以在頁面加載完成后后臺(tái)加載來自各種來源的字體,并允許使用 CSS 和 JavaScript 回調(diào)函數(shù)來自定義加載過程。
  • 必須平衡字體使用和用戶體驗(yàn);雖然字體可以增強(qiáng)網(wǎng)站的美感,但加載大量或多種字體會(huì)減慢頁面加載速度,尤其是在移動(dòng)設(shè)備上。因此,使用字體加載器和實(shí)現(xiàn)備用字體可以幫助保持流暢快速的用戶體驗(yàn)。

特別感謝 Jason Pamental 提供的靈感,促成這篇文章的撰寫。否則我可能永遠(yuǎn)不會(huì)考慮這個(gè)問題! 你上次在網(wǎng)頁中使用 Arial、Times New Roman、Helvetica 或……(不寒而栗)…… Comic Sans 是什么時(shí)候?網(wǎng)頁字體出現(xiàn)得太晚了,但一旦出現(xiàn),我們就再也沒有回頭。字體很有趣,(通常)免費(fèi)且易于實(shí)現(xiàn):

<code>@import url(http://fonts.googleapis.com/css?family=Ubuntu:300,300italic,400,400italic,500,500italic,700,700italic);</code>

然后你可以在你的頁面中使用該字體,例如:

<code>body {
    font-family: Ubunutu, sans-serif;
    font-weight: 400;
}</code>

字體在移動(dòng)設(shè)備上也能正常工作,因此用戶在你的響應(yīng)式網(wǎng)頁設(shè)計(jì)中獲得良好的體驗(yàn)。 或者說,真的如此嗎?

在圖片之后,字體通常是網(wǎng)頁中最大的資源。上面的 Ubuntu 字體會(huì)為頁面增加近 250KB 的大小,這在較慢的移動(dòng)網(wǎng)絡(luò)連接上是顯而易見的。 Chrome、IE、Safari 和 Opera 會(huì)在字體加載時(shí)留下空白空間,因此頁面無法使用。 Firefox 和舊版本的 Opera 會(huì)顯示備用字體中的文本,然后切換——這被稱為未樣式文本閃爍 (FOUT)。這兩種情況都不理想。我們很少擔(dān)心字體權(quán)重問題,并找借口,例如“這只是第一頁的問題”或“許多用戶已經(jīng)緩存了字體”。我們可能會(huì)省略較少使用的字體;例如,刪除大多數(shù) Ubuntu 斜體樣式可以節(jié)省近 40%。很少有人敢于采用使用標(biāo)準(zhǔn)操作系統(tǒng)字體的明顯解決方案——我們的客戶和設(shè)計(jì)師永遠(yuǎn)不會(huì)原諒我們。

JavaScript webfontloader

幸運(yùn)的是,還有另一種選擇:webfontloader。這個(gè) JavaScript 庫可以在頁面加載完成后后臺(tái)加載來自 Google、Typekit、Fonts.com、Fontdeck 或你自己的服務(wù)器的字體。該庫本身會(huì)為頁面增加另外 17KB 的大小,但它也會(huì)作為后臺(tái)進(jìn)程下載。要加載上面的 Ubuntu 字體集,我們創(chuàng)建一個(gè)名為 WebFontConfig 的全局對(duì)象,該對(duì)象定義我們的字體和設(shè)置,然后加載 webfontloader 本身:

<code>@import url(http://fonts.googleapis.com/css?family=Ubuntu:300,300italic,400,400italic,500,500italic,700,700italic);</code>

因此,我們可以根據(jù)設(shè)備和帶寬容量確定是否加載了部分或全部字體。理想情況下,我們可以使用網(wǎng)絡(luò)信息 API,但瀏覽器支持仍然有限?;蛘?,請(qǐng)注意 WebFontConfig 中的超時(shí)設(shè)置;如果字體文件需要超過兩秒鐘才能下載,則請(qǐng)求將被放棄。

CSS 回調(diào)函數(shù)

webfontloader 在操作期間會(huì)將類名應(yīng)用于 html 元素:

  • .wf-loading — 所有字體都已請(qǐng)求
  • .wf-active — 所有字體都可用
  • .wf-inactive — 無法加載任何字體

還會(huì)為各個(gè)字體應(yīng)用類名:

  • .wf-<familyname>-<fvd>-loading</fvd></familyname> — 已請(qǐng)求單個(gè)字體
  • .wf-<familyname>-<fvd>-active</fvd></familyname> — 單個(gè)字體可用
  • .wf-<familyname>-<fvd>-inactive</fvd></familyname> — 無法加載單個(gè)字體

其中 <familyname></familyname> 是字體名稱的凈化版本,<fvd></fvd> 是變體描述,例如 i4 代表 400 粗細(xì)的斜體。這允許我們?cè)谧煮w下載后切換字體——與 Firefox 的操作方式相同,例如:

<code>body {
    font-family: Ubunutu, sans-serif;
    font-weight: 400;
}</code>

JavaScript 回調(diào)函數(shù)

可以在 WebFontConfig 中定義類似的 JavaScript 回調(diào)函數(shù),盡管很少有這種情況有用,例如:

var WebFontConfig = {
    google: {
        families: [ 'Ubuntu:400,300,400italic,300italic,500italic,500,700,700italic:latin' ]
    },
    timeout: 2000
};

(function(){
    var wf = document.createElement("script");
    wf.src = ('https:' == document.location.protocol ? 'https' : 'http') +
        '://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js';
    wf.async = 'true';
    document.head.appendChild(wf);
})();

有關(guān)更多信息,請(qǐng)參閱 webfontloader 文檔。

最小化 FOUT

如果你的備用字體在樣式、粗細(xì)或間距方面與你的網(wǎng)頁字體有很大不同,則未樣式文本閃爍會(huì)很刺眼。但是,只需進(jìn)行少量實(shí)驗(yàn),你就可以調(diào)整備用字體、粗細(xì)、行高和邊距,以確保在加載網(wǎng)頁字體時(shí)頁面元素大致保持在相同的位置……請(qǐng)參閱 CodePen 上 Craig Buckler (@craigbuckler) 的文章《如何使用字體加載器》。

點(diǎn)擊“切換字體”按鈕即可查看字體切換效果。這種變化并非完全不明顯,但重要的是,如果用戶開始閱讀,他們不會(huì)失去位置。你可以向任何頁面添加“切換字體”按鈕,以幫助你評(píng)估合適的備用樣式:

/* 默認(rèn)操作系統(tǒng)字體 */
body {
    font-family: arial, sans-serif;
}

/* 字體現(xiàn)在已加載 */
.wf-active body {
    font-family: 'Ubuntu';
}

總而言之:字體使用可能是免費(fèi)的,但請(qǐng)盡量減少用戶的成本。如果你要加載 1MB 的字體文件,那么你精心創(chuàng)建的響應(yīng)式網(wǎng)頁設(shè)計(jì)不適合移動(dòng)設(shè)備!

(以下為FAQ部分,已根據(jù)原文進(jìn)行改寫和整合,并精簡了部分內(nèi)容)

關(guān)于使用字體加載器提升網(wǎng)頁性能的常見問題

什么是字體加載器?為什么它對(duì)頁面性能很重要?

字體加載器是一種工具,允許你控制如何在你的網(wǎng)站上加載網(wǎng)頁字體。它對(duì)頁面性能很重要,因?yàn)樗梢詭椭鷾p少網(wǎng)站的加載時(shí)間。網(wǎng)頁加載時(shí),瀏覽器必須下載所有必要的資源,包括字體。如果字體很大或很多,這會(huì)減慢頁面加載時(shí)間。字體加載器允許你控制這些字體的加載時(shí)間和方式,這可以顯著提高你的頁面性能。

字體加載器如何提高頁面性能?

字體加載器通過允許你控制網(wǎng)頁字體的加載來提高頁面性能。你可以選擇異步加載字體,這意味著它們不會(huì)阻塞頁面的其余部分的渲染。這可以顯著減少頁面變得可交互所需的時(shí)間。此外,字體加載器可以幫助防止“未樣式文本閃爍”(FOUT)現(xiàn)象,即瀏覽器在網(wǎng)頁字體仍在加載時(shí)顯示備用字體。

有哪些常用的字體加載器?

有幾個(gè)常用的字體加載器可用,包括 Google 的 WebFont Loader 和 Typekit 的 WebFont Loader。這兩個(gè)工具都提供了多種選項(xiàng)來控制網(wǎng)頁字體的加載方式。還有一些 WordPress 插件(例如 Developry Google Fonts)可以輕松地在你的網(wǎng)站上實(shí)現(xiàn)字體加載。

如何在我的網(wǎng)站上實(shí)現(xiàn)字體加載器?

在你的網(wǎng)站上實(shí)現(xiàn)字體加載器通常需要向你的 HTML 添加一個(gè)腳本。此腳本將加載字體加載器,然后你可以使用字體加載器的 API 來控制網(wǎng)頁字體的加載方式。確切的過程可能因你使用的字體加載器而異,因此最好參考文檔以獲取具體說明。

我可以將字體加載器與任何網(wǎng)頁字體一起使用嗎?

大多數(shù)字體加載器都兼容任何網(wǎng)頁字體,只要字體以允許字體加載器加載的方式托管即可。這包括自托管字體和由 Google Fonts 或 Typekit 等字體服務(wù)托管的字體。

使用字體加載器會(huì)影響我的字體的外觀嗎?

使用字體加載器可能會(huì)影響你的字體的外觀,因?yàn)樗梢詭椭乐?FOUT。但是,它不應(yīng)該改變字體的實(shí)際設(shè)計(jì)或樣式。如果在實(shí)現(xiàn)字體加載器后注意到字體的外觀有任何變化,則可能是由于配置問題。

什么是“未樣式文本閃爍”(FOUT)?字體加載器如何防止它?

FOUT 是一種現(xiàn)象,即瀏覽器在網(wǎng)頁字體仍在加載時(shí)顯示備用字體。這可能會(huì)導(dǎo)致短暫的文本閃爍,字體與最終字體不同,這可能會(huì)讓用戶感到不適。字體加載器通過允許你控制何時(shí)將網(wǎng)頁字體應(yīng)用于文本來防止 FOUT。例如,你可以選擇隱藏文本,直到網(wǎng)頁字體加載完畢,或者你可以顯示備用字體中的文本,然后在網(wǎng)頁字體加載完畢后將其替換。

字體加載器可以改善我的網(wǎng)站的 SEO 嗎?

是的,字體加載器可以通過減少頁面加載時(shí)間來改善你的網(wǎng)站的 SEO。頁面加載時(shí)間是搜索引擎在對(duì)網(wǎng)站進(jìn)行排名時(shí)考慮的一個(gè)因素,因此你可以采取任何措施來減少它,這可能會(huì)改善你的 SEO。

使用字體加載器有什么缺點(diǎn)嗎?

使用字體加載器的一個(gè)潛在缺點(diǎn)是它可能會(huì)增加網(wǎng)站代碼的復(fù)雜性。但是,改進(jìn)的頁面性能和用戶體驗(yàn)的好處通常超過了這個(gè)缺點(diǎn)。此外,許多字體加載器都有良好的文檔記錄和支持,因此相對(duì)易于實(shí)現(xiàn)。

如何判斷字體加載器是否正在提高我的頁面性能?

你可以在實(shí)現(xiàn)字體加載器之前和之后使用各種工具來衡量你的頁面性能。這些工具可以提供頁面加載時(shí)間、首次繪制時(shí)間和可交互時(shí)間等指標(biāo),這可以幫助你量化字體加載器的影響。一些常用的性能測量工具包括 Google 的 Lighthouse 和 WebPageTest。

以上是如何使用字體加載器改善頁面性能的詳細(xì)內(nèi)容。更多信息請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

垃圾收集如何在JavaScript中起作用? 垃圾收集如何在JavaScript中起作用? Jul 04, 2025 am 12:42 AM

JavaScript的垃圾回收機(jī)制通過標(biāo)記-清除算法自動(dòng)管理內(nèi)存,以減少內(nèi)存泄漏風(fēng)險(xiǎn)。引擎從根對(duì)象出發(fā)遍歷并標(biāo)記活躍對(duì)象,未被標(biāo)記的則被視為垃圾并被清除。例如,當(dāng)對(duì)象不再被引用(如將變量設(shè)為null),它將在下一輪回收中被釋放。常見的內(nèi)存泄漏原因包括:①未清除的定時(shí)器或事件監(jiān)聽器;②閉包中對(duì)外部變量的引用;③全局變量持續(xù)持有大量數(shù)據(jù)。V8引擎通過分代回收、增量標(biāo)記、并行/并發(fā)回收等策略優(yōu)化回收效率,降低主線程阻塞時(shí)間。開發(fā)時(shí)應(yīng)避免不必要的全局引用、及時(shí)解除對(duì)象關(guān)聯(lián),以提升性能與穩(wěn)定性。

如何在node.js中提出HTTP請(qǐng)求? 如何在node.js中提出HTTP請(qǐng)求? Jul 13, 2025 am 02:18 AM

在Node.js中發(fā)起HTTP請(qǐng)求有三種常用方式:使用內(nèi)置模塊、axios和node-fetch。1.使用內(nèi)置的http/https模塊無需依賴,適合基礎(chǔ)場景,但需手動(dòng)處理數(shù)據(jù)拼接和錯(cuò)誤監(jiān)聽,例如用https.get()獲取數(shù)據(jù)或通過.write()發(fā)送POST請(qǐng)求;2.axios是基于Promise的第三方庫,語法簡潔且功能強(qiáng)大,支持async/await、自動(dòng)JSON轉(zhuǎn)換、攔截器等,推薦用于簡化異步請(qǐng)求操作;3.node-fetch提供類似瀏覽器fetch的風(fēng)格,基于Promise且語法簡單

JavaScript數(shù)據(jù)類型:原始與參考 JavaScript數(shù)據(jù)類型:原始與參考 Jul 13, 2025 am 02:43 AM

JavaScript的數(shù)據(jù)類型分為原始類型和引用類型。原始類型包括string、number、boolean、null、undefined和symbol,其值不可變且賦值時(shí)復(fù)制副本,因此互不影響;引用類型如對(duì)象、數(shù)組和函數(shù)存儲(chǔ)的是內(nèi)存地址,指向同一對(duì)象的變量會(huì)相互影響。判斷類型可用typeof和instanceof,但需注意typeofnull的歷史問題。理解這兩類差異有助于編寫更穩(wěn)定可靠的代碼。

JavaScript時(shí)間對(duì)象,某人構(gòu)建了一個(gè)eactexe,在Google Chrome上更快的網(wǎng)站等等 JavaScript時(shí)間對(duì)象,某人構(gòu)建了一個(gè)eactexe,在Google Chrome上更快的網(wǎng)站等等 Jul 08, 2025 pm 02:27 PM

JavaScript開發(fā)者們,大家好!歡迎閱讀本周的JavaScript新聞!本周我們將重點(diǎn)關(guān)注:Oracle與Deno的商標(biāo)糾紛、新的JavaScript時(shí)間對(duì)象獲得瀏覽器支持、GoogleChrome的更新以及一些強(qiáng)大的開發(fā)者工具。讓我們開始吧!Oracle與Deno的商標(biāo)之爭Oracle試圖注冊(cè)“JavaScript”商標(biāo)的舉動(dòng)引發(fā)爭議。Node.js和Deno的創(chuàng)建者RyanDahl已提交請(qǐng)?jiān)笗笕∠撋虡?biāo),他認(rèn)為JavaScript是一個(gè)開放標(biāo)準(zhǔn),不應(yīng)由Oracle

React與Angular vs Vue:哪個(gè)JS框架最好? React與Angular vs Vue:哪個(gè)JS框架最好? Jul 05, 2025 am 02:24 AM

選哪個(gè)JavaScript框架最好?答案是根據(jù)需求選擇最適合的。1.React靈活自由,適合需要高度定制、團(tuán)隊(duì)有架構(gòu)能力的中大型項(xiàng)目;2.Angular提供完整解決方案,適合企業(yè)級(jí)應(yīng)用和長期維護(hù)的大項(xiàng)目;3.Vue上手簡單,適合中小型項(xiàng)目或快速開發(fā)。此外,是否已有技術(shù)棧、團(tuán)隊(duì)規(guī)模、項(xiàng)目生命周期及是否需要SSR也都是選擇框架的重要因素。總之,沒有絕對(duì)最好的框架,適合自己需求的就是最佳選擇。

立即在JavaScript中立即調(diào)用功能表達(dá)式(IIFE) 立即在JavaScript中立即調(diào)用功能表達(dá)式(IIFE) Jul 04, 2025 am 02:42 AM

IIFE(ImmediatelyInvokedFunctionExpression)是一種在定義后立即執(zhí)行的函數(shù)表達(dá)式,用于變量隔離和避免污染全局作用域。它通過將函數(shù)包裹在括號(hào)中使其成為表達(dá)式,并緊隨其后的一對(duì)括號(hào)來調(diào)用,如(function(){/code/})();。其核心用途包括:1.避免變量沖突,防止多個(gè)腳本間的命名重復(fù);2.創(chuàng)建私有作用域,使函數(shù)內(nèi)部變量不可見;3.模塊化代碼,便于初始化工作而不暴露過多變量。常見寫法包括帶參數(shù)傳遞的版本和ES6箭頭函數(shù)版本,但需注意:必須使用表達(dá)式、結(jié)

處理諾言:鏈接,錯(cuò)誤處理和承諾在JavaScript中 處理諾言:鏈接,錯(cuò)誤處理和承諾在JavaScript中 Jul 08, 2025 am 02:40 AM

Promise是JavaScript中處理異步操作的核心機(jī)制,理解鏈?zhǔn)秸{(diào)用、錯(cuò)誤處理和組合器是掌握其應(yīng)用的關(guān)鍵。1.鏈?zhǔn)秸{(diào)用通過.then()返回新Promise實(shí)現(xiàn)異步流程串聯(lián),每個(gè).then()接收上一步結(jié)果并可返回值或Promise;2.錯(cuò)誤處理應(yīng)統(tǒng)一使用.catch()捕獲異常,避免靜默失敗,并可在catch中返回默認(rèn)值繼續(xù)流程;3.組合器如Promise.all()(全成功才成功)、Promise.race()(首個(gè)完成即返回)和Promise.allSettled()(等待所有完成)

什么是緩存API?如何與服務(wù)人員使用? 什么是緩存API?如何與服務(wù)人員使用? Jul 08, 2025 am 02:43 AM

CacheAPI是瀏覽器提供的一種緩存網(wǎng)絡(luò)請(qǐng)求的工具,常與ServiceWorker配合使用,以提升網(wǎng)站性能和離線體驗(yàn)。1.它允許開發(fā)者手動(dòng)存儲(chǔ)如腳本、樣式表、圖片等資源;2.可根據(jù)請(qǐng)求匹配緩存響應(yīng);3.支持刪除特定緩存或清空整個(gè)緩存;4.通過ServiceWorker監(jiān)聽fetch事件實(shí)現(xiàn)緩存優(yōu)先或網(wǎng)絡(luò)優(yōu)先等策略;5.常用于離線支持、加快重復(fù)訪問速度、預(yù)加載關(guān)鍵資源及后臺(tái)更新內(nèi)容;6.使用時(shí)需注意緩存版本控制、存儲(chǔ)限制及與HTTP緩存機(jī)制的區(qū)別。

See all articles