新聞中心

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:申請域名、雅安服務(wù)器托管、營銷軟件、網(wǎng)站建設(shè)、固原網(wǎng)站維護(hù)、網(wǎng)站推廣。
即使在2021年,網(wǎng)絡(luò)性能仍然是一個問題。根據(jù)http Archive,平均每個頁面需要2MB的下載,發(fā)出60多個HTTP請求,在移動設(shè)備上完全加載可能需要18秒。樣式表占60 kB,分為七個請求,因此在試圖解決性能問題時,它很少是最優(yōu)先考慮的。
然而,CSS確實有影響,不管它看起來多么輕微。一旦解決了JavaScript問題,學(xué)習(xí)正確優(yōu)化CSS應(yīng)該是下一個重點。
CSS如何影響頁面性能
CSS看起來是無辜的,但可能需要一些繁重的處理。
CSS渲染阻塞
當(dāng)瀏覽器遇到標(biāo)記時,它會在獲取和解析CSS文件時停止其他瀏覽器下載和處理。
JavaScript也可以阻止瀏覽器渲染,但異步處理可以通過以下方式實現(xiàn):
諸如圖像之類的資源通常需要更多帶寬,但可以使用有效的格式,并且可以延遲加載(loading="lazy"屬性),而不阻止瀏覽器渲染。
所有這些都不可能用CSS實現(xiàn)。文件被緩存,因此后續(xù)頁面加載應(yīng)該更快,但渲染阻塞過程仍然存在。
大型CSS文件處理耗時
樣式表越大,下載和處理CSS對象模型(CSSOM)所需的時間就越長,瀏覽器和JavaScript API可以使用該模型顯示頁面。盡管CSS樣式表比大多數(shù)其他網(wǎng)站文件都小,但它們也不能免于“越小越好”的經(jīng)驗法則。
CSS文件增長
識別不再使用的樣式可能很困難,刪除錯誤的樣式可能會對站點造成嚴(yán)重破壞。開發(fā)人員通常選擇最安全的“保留一切”方法。不再使用的頁面樣式、組件和小部件仍然存在于CSS中。結(jié)果如何?文件大小、復(fù)雜性和維護(hù)工作量呈指數(shù)級增長,使得開發(fā)人員刪除冗余代碼的可能性越來越小。
樣式表可以引入其他資源
CSS可以使用@import規(guī)則引用其他樣式表。這些導(dǎo)入阻止當(dāng)前樣式表的處理,并串聯(lián)進(jìn)一步加載 CSS 文件。
其他資產(chǎn),如字體和圖像,也可以參考。瀏覽器將嘗試優(yōu)化下載,但當(dāng)有疑問時,它會立即獲取它們。內(nèi)襯基座 64 編碼文件仍需進(jìn)一步處理。
CSS可以使用@import規(guī)則引用其他樣式表。這些導(dǎo)入會阻止當(dāng)前樣式表的處理,并以串行方式加載更多CSS文件。
也可以引用其他資源,例如字體和圖像。瀏覽器將嘗試優(yōu)化下載,但如果有疑問,它將立即獲取下載。內(nèi)聯(lián)base64編碼文件需要進(jìn)一步處理。
CSS效果渲染
瀏覽器有三個渲染階段:
- 布局layout(或回流reflow)階段計算每個元素的尺寸,以及它如何影響周圍元素的大小或位置。
- 繪制paint階段將每個元素的可視部分繪制到單獨的層上:文本、顏色、圖像、邊框、陰影等。
- 渲染層合成(composite draws)根據(jù)堆疊上下文、位置、z-indexes等,以正確的順序?qū)⒚總€層繪制到頁面上。
如果不小心,CSS屬性更改和動畫可能會導(dǎo)致所有三個階段重新渲染。某些特性(如陰影和漸變)在計算上也比塊顏色和邊距更昂貴。
CSS性能分析工具
承認(rèn)您有CSS性能問題是恢復(fù)的第一步!找到并解決原因是另一回事。
以下工具和服務(wù)(不按任何順序排列)可以幫助您識別代碼中的樣式瓶頸。
1. 開發(fā)人員工具網(wǎng)絡(luò)面板
Web性能專家花大量時間在開發(fā)工具上,尤其是在網(wǎng)絡(luò)面板上。DevTools是大多數(shù)現(xiàn)代瀏覽器的原生版本,不過我們將在示例中使用Google Chrome。
DevTools可以從瀏覽器菜單打開,通常是在“更多工具”>“開發(fā)人員工具”中,或者通過鍵盤快捷鍵Ctrl | Cmd+Shift+I或F12打開。
切換到“網(wǎng)絡(luò)”選項卡,并確保選中“禁用緩存”,以防止緩存文件影響報告。您還可以更改限制選項以模擬較慢的移動網(wǎng)絡(luò)。
刷新頁面以查看下載和處理瀑布圖:
DevTools網(wǎng)絡(luò)面板
任何耗時較長的加載進(jìn)度條都值得關(guān)注,但您應(yīng)該特別關(guān)注堵塞/停滯加載進(jìn)度條(顯示為白色)。在本例中,高亮顯示的行和所有后續(xù)行都無法開始下載,直到在HTML頁面頂部處理了渲染阻塞CSS和JavaScript文件。
過濾器框允許您顯示或隱藏特定資源:
larger-than:: 限制大于的文件,以字節(jié)(10000)、千字節(jié)(1000 kB)或兆字節(jié)(1 M)表示-larger-than:: 限制小于的文件-domain:*<.yourdomain.com>:顯示未從主域加載的第三方請求。這些都是網(wǎng)站速度慢的主要原因。
具有優(yōu)化CSS的高性能頁面通常具有較少的資源,這些資源與短阻塞/暫停條并行加載。
2. WebPageTest
WebGetest提供了類似的網(wǎng)絡(luò)瀑布視圖,以及許多其他性能圖表:
WebPageTest.org頁面資源加載瀑布圖
該服務(wù)使用基于不同全球位置的設(shè)備,因此您可以評估真實世界的性能和CSS優(yōu)化。
3. Chrome開發(fā)人員工具Lighthouse面板
DevTools Lighthouse面板在基于鉻的瀏覽器中提供,如Chrome、Edge、Brave、Opera和Vivaldi。您可以為移動和桌面設(shè)備生成性能、漸進(jìn)式Web應(yīng)用、最佳實踐、可訪問性和搜索引擎優(yōu)化報告。
DevTools Lighthouse面板
該工具提供改進(jìn)建議,包括優(yōu)化CSS的方法。并非所有這些都是切實可行的,但最有利于性能提升的點都會被強(qiáng)調(diào)。
4. Google PageSpeed Insights
PageSpeed Insights是Lighthouse的在線版本。它的功能較少,但可以在任何瀏覽器中使用,并提供一些可選的見解。
例如,一個樹狀圖顯示了最大的JavaScript資源,其中包含一個覆蓋率指標(biāo),該指標(biāo)指示使用和未使用代碼的比例:
Google PageSpeed Insights樹狀圖
CSS不會顯示,但JavaScript的數(shù)量將影響樣式的效率。
類似的網(wǎng)站速度測試工具包括Pingdom和GTmetrix等十余個。
5. Chrome開發(fā)人員工具覆蓋范圍面板
Chromium瀏覽器中的DevTools覆蓋范圍面板有助于定位未使用的CSS(和JavaScript)代碼。從DevTools更多工具子菜單中選擇覆蓋范圍,然后刷新頁面并瀏覽站點/應(yīng)用程序:
DevTools覆蓋范圍面板
CSS和JavaScript資產(chǎn)顯示在覆蓋范圍面板中,未使用代碼的比例用紅色表示。單擊任何文件以查看其源代碼,未使用的代碼在行號欄中以紅色突出顯示。
需要注意的幾件事:
- 如果刷新或?qū)Ш降叫马撁?,覆蓋率指標(biāo)將重置,這在WordPress站點上是典型的。只有在瀏覽一個加載內(nèi)容而不刷新頁面的單頁應(yīng)用程序時,未使用的代碼度量才會降低。
- 該工具只能解釋在特定時間點使用的CSS。它無法確定小部件是否未被查看或具有多個JavaScript綁定狀態(tài)。
6. Chrome開發(fā)人員工具性能監(jiān)視器
基于Chromium的瀏覽器具有實時性能監(jiān)視器。同樣,這可以從DevTools的“更多工具”菜單中獲得。當(dāng)您瀏覽頁面、滾動和觸發(fā)動畫時,圖表會更新:
DevTools性能監(jiān)視器
以下指標(biāo)對于優(yōu)化CSS性能特別重要(越低越好):
- CPU使用率:處理器使用率從0%到100%。
- 布局/秒:瀏覽器重新布局頁面的速率。
- 樣式重新計算次數(shù)/秒:瀏覽器必須重新計算樣式的速率。
如果CSS由于外部因素而陷入困境,其他指標(biāo)也可能有用(同樣,值越低表示性能越好):
- JS堆大小:JavaScript對象使用的總內(nèi)存。
- DOM節(jié)點:HTML文檔中的元素數(shù)。
- JS事件偵聽器:已注冊的JavaScript事件偵聽器的數(shù)量。
- 文檔:資源的數(shù)量,包括頁面、CSS文件、JavaScript模塊等。
- 文檔幀:幀、iframe和JavaScript工作腳本的數(shù)量。
7. Chrome開發(fā)人員工具性能報告
DevTools性能面板允許您記錄頁面活動以進(jìn)行進(jìn)一步分析,并幫助確定性能問題。生成的報告很復(fù)雜,許多開發(fā)人員都避免使用它們,但它們提供了有價值的信息。
性能面板的設(shè)置圖標(biāo)允許您設(shè)置各種選項,例如降低網(wǎng)絡(luò)和CPU的速度。您還可以禁用JavaScript示例,以便不記錄詳細(xì)的調(diào)用堆棧。
要開始,請單擊循環(huán)記錄圖標(biāo),加載和/或使用頁面,然后單擊停止按鈕查看報告:
DevTools性能報告
幾乎所有這些指標(biāo)都對JavaScript開發(fā)人員有用,但CSS優(yōu)化問題可能從以下方面特別明顯:
- 頂部紅色條:這表示幀速率顯著下降,這可能會導(dǎo)致性能問題。這在頁面加載開始時是應(yīng)該的,但是過多的CSS動畫也可能是一個問題。
- 摘要圖表:高加載、渲染和繪制度量可能表明CSS問題。
間接CSS性能優(yōu)化
下面的優(yōu)化程序不會直接解決CSS問題,但它們可以幫助您解決一些性能問題,所需的工作量相對較小。
使用好主機(jī)
使用一臺性能良好的主機(jī),使服務(wù)器在物理上更接近用戶,將立即帶來性能優(yōu)勢。托管計劃各不相同,但主要有三種類型:
云托管計劃和價格差異巨大。你可以考慮:
交換主機(jī)可以提高性能。它不太可能解決您所有的問題,但它是解決后端和帶寬問題的經(jīng)濟(jì)高效的解決方案。
您還可以考慮使用內(nèi)容分發(fā)網(wǎng)絡(luò)(CDN)或?qū)I(yè)圖像和視頻CDN,它可以在地理上更接近用戶的多個位置上分發(fā)負(fù)載。
利用瀏覽器和服務(wù)器效率功能
大約10%的站點不激活gzip(或更好的)壓縮,這通常是默認(rèn)的服務(wù)器選項。通過在傳輸之前壓縮文件,可以將CSS的大小減少60%或更多。它不會修復(fù)低效的CSS,但代碼會更快到達(dá)!
您還應(yīng)該激活HTTP/2(或更好),它以較小的二進(jìn)制格式發(fā)送數(shù)據(jù),壓縮頭,并且可以在同一TCP連接上發(fā)送多個文件。
最后,確保瀏覽器能夠有效緩存CSS和其他文件。這通常是在HTTP頭中設(shè)置Expires、Last Modified和/或ETag哈希的問題。
優(yōu)化CMS
諸如WordPress之類的內(nèi)容管理系統(tǒng)可以通過主題和插件進(jìn)行擴(kuò)展,這些主題和插件服務(wù)于它們自己的CSS。在可能的情況下,您應(yīng)加快CMS的速度,以:
優(yōu)化圖像
圖像的處理和呈現(xiàn)開銷與HTML、CSS和JavaScript不同,但它們占頁面重量和可用帶寬的很大一部分??紤]:
專業(yè)的圖像CDN可以為您處理一些這方面的工作。有關(guān)更多提示,請查看我們關(guān)于如何為Web優(yōu)化圖像的指南。
刪除未使用的CSS
最快的樣式是那些您永遠(yuǎn)不需要加載或渲染的樣式!嘗試刪除/編輯您不再需要的任何CSS代碼,例如用于遺留頁面、小部件或框架的CSS代碼。在較大的網(wǎng)站上,這可能很困難,而且并不總是清楚特定的樣式集是否是必需的。
以下工具在構(gòu)建時分析HTML和CSS的使用情況,或者通過抓取URL來識別冗余代碼。這并不總是足夠的,因此可以設(shè)置其他配置,以確保列出由JavaScript和用戶交互觸發(fā)的樣式:
- UnCSS
- UnusedCSS
- PurgeCSS
- PurifyCSS
還有一個更好的選擇:將CSS拆分為具有明確責(zé)任級別的單獨文件,并相應(yīng)地編制文檔。然后,刪除不必要的樣式變得相當(dāng)容易。
優(yōu)化CSS加載性能
并不是所有的CSS都加載相同。謙遜的標(biāo)簽有許多不總是合乎邏輯的選項和怪癖。
優(yōu)化Web字體使用
谷歌字體和類似的字體設(shè)計商已經(jīng)徹底改變了網(wǎng)絡(luò)字體,但幾行字體代碼可能會占用數(shù)百KB的帶寬。
以下是我們的優(yōu)化建議:
使用適當(dāng)?shù)淖煮w加載選項
下載和處理Web字體可能需要幾秒鐘的時間。瀏覽器將:
兩者都不理想。CSS font-display屬性和Google Font & display =參數(shù)可以選擇一個備選選項:
- auto:瀏覽器的默認(rèn)行為(通常為FOIT)。
- block:有效地阻止。文本最多三秒鐘不可見。沒有字體交換,但文本可能需要時間才能顯示。
- swap:實際上是FOUT。在web字體可用之前,將使用第一個回退。文本可以立即讀取,但字體交換效果可能會不和諧。Font Style Matcher可用于定義大小類似的回退。
- fallback:FOIT和FOUT之間的妥協(xié)。文本在短時間內(nèi)不可見(通常為100毫秒),然后使用第一個回退,直到web字體可用。
- optional:與回退類似,只是沒有發(fā)生字體交換。只有在初始期間可用時,才會使用web字體。您的第一個頁面視圖可能會顯示回退字體,后續(xù)視圖將使用下載和緩存的web字體。
使用swap、fallback或optional可以提高性能。
避免CSS @import
@import at-rule允許將CSS文件包含在其他文件中:
/* main.css */
@import url("reset.css");
@import url("grid.css");
@import url("widget.css");
這似乎是加載較小組件和字體的有效方法。不幸的是,每個@import都是渲染阻塞,每個文件都必須按順序加載和解析。
HTML中的多個標(biāo)記更有效,可以并行加載CSS文件:
也就是說,這樣更加合理…
串聯(lián)和最小化CSS
現(xiàn)代構(gòu)建工具、CSS預(yù)處理器(如Sass)和WordPress插件可以將所有部分組合到一個大型CSS文件中。然后刪除不必要的空白、注釋和字符,以將文件大小減至最小。
使用HTTP/2及更高版本,多個文件的性能問題較少,但單個文件只需要一個頭,可以更高效地進(jìn)行g(shù)zip壓縮和緩存。
單獨的CSS文件只有在您有一個或多個頻繁更改的樣式表(可能每周更改幾次)時才實用。即使如此,大部分靜態(tài)CSS代碼仍然可以合并到一個文件中。有關(guān)更多提示,請查看我們關(guān)于如何最小化CSS和JS的教程。
避免Base64編碼
工具可以將圖像編碼為base64字符串,您可以將其用作HTML的標(biāo)記和CSS背景中的數(shù)據(jù)URI:
.background {
background-image: url('data:image/jpg;base64,ABC123...');
}
這會減少HTTP請求的數(shù)量,但會損害CSS性能:
- base64字符串可以比其二進(jìn)制等效字符串大30%。
- 瀏覽器必須先解碼字符串,然后才能使用圖像,并且
- 改變一個圖像像素會使整個CSS文件無效。
只考慮Base64編碼,如果您使用的是非常小的、不經(jīng)常改變的圖像,其中生成的字符串不長于URL。
也就是說,您可以用UTF8編碼可重用的SVG圖標(biāo),例如。
.svgbackground {
background-image: url('data:image/svg+xml;utf8,');
}
刪除CSS Hacks和IE Fallbacks
除非你很不幸,并且有很多Internet Explorer用戶,否則可以從你的CSS中刪除有條件的樣式表和黑客。在大多數(shù)情況下,IE用戶仍然會看到一些東西,特別是如果您使用的是“移動優(yōu)先”設(shè)計,默認(rèn)情況下會顯示更簡單的線性視圖。結(jié)果可能不太好,也不會是完美的像素,但你的開發(fā)預(yù)算最好是考慮所有用戶的可訪問性。
預(yù)加載CSS文件
標(biāo)記提供了一個可選的預(yù)加載屬性,可以立即開始下載,而不是等待HTML中的真正引入:
My page
這在WordPress和其他CMS中尤其有用,在這些CMS中,插件可以在頁面下方添加樣式表。
使用關(guān)鍵內(nèi)聯(lián)CSS
分析工具可能會建議您“內(nèi)聯(lián)關(guān)鍵CSS”或“減少渲染阻塞樣式表”。這可以通過以下方式提高性能:
- 識別折疊上方元素使用的基本樣式(頁面加載時可見的樣式)
- 將關(guān)鍵CSS內(nèi)聯(lián)到
中的標(biāo)記中 - 異步加載剩余的CSS以避免渲染阻塞。這可以通過以瀏覽器給予較低優(yōu)先級的“print”樣式加載樣式表來實現(xiàn)。加載頁面后,JavaScript將其切換為“all”媒體樣式(
諸如critical和criticalCSS之類的工具可以幫助提取視圖中元素的樣式。
這項技術(shù)顯著提高了績效,提高了審計分?jǐn)?shù)。具有一致界面的站點或應(yīng)用程序應(yīng)該更容易實現(xiàn),但在其他地方可能更難實現(xiàn):
- 除了最簡單的站點外,構(gòu)建工具對于所有站點都是必不可少的。
- 每個設(shè)備上的“折疊”都不同。
- 站點可以有各種各樣的布局,需要不同的關(guān)鍵CSS。
- 關(guān)鍵的CSS工具可以與特定的框架、HTML生成的客戶端和動態(tài)內(nèi)容進(jìn)行斗爭。
- 這種技術(shù)主要有利于第一頁的加載。CSS被緩存用于后續(xù)頁面,因此附加的內(nèi)聯(lián)樣式將增加頁面的權(quán)重。
使用媒體查詢渲染
單個連接和縮小將使大多數(shù)站點受益,但需要大量較大屏幕樣式的站點可以拆分CSS文件并使用媒體查詢加載:
本例假定采用移動優(yōu)先的方法。移動設(shè)備加載core.css,但可能不需要下載或解析其余的樣式表。
使用漸進(jìn)式渲染
漸進(jìn)式渲染是一種為單獨的頁面或組件定義單獨樣式表的技術(shù)。它可以使非常大的站點受益,在這些站點中,單個頁面由廣泛的組件構(gòu)成。
在HTML中引用組件之前立即加載每個CSS文件:
... 這在大多數(shù)瀏覽器中行之有效。(Safari顯示一個空白頁面,直到加載所有CSS,但它不應(yīng)該明顯比單個大樣式表差。)
采用Web組件還鼓勵使用在呈現(xiàn)自定義元素時加載的范圍樣式。
優(yōu)化CSS性能
CSS技術(shù)和屬性給瀏覽器、CPU、內(nèi)存、帶寬和其他資源帶來了不同的壓力。以下提示可以幫助您避免不必要的處理和緩慢的性能。
采用現(xiàn)代布局技術(shù)(Grid和Flexbox)
基于浮動的布局很難創(chuàng)建,使用大量屬性,需要連續(xù)調(diào)整邊距和填充,必須使用媒體查詢進(jìn)行管理,并且需要大量的瀏覽器處理。多年來,它們是唯一可行的布局方法,但已不再必要。使用以下任一選項:
- CSS Flexbox用于一維布局,可以換行到下一行。它是菜單、圖像庫、卡片等的理想選擇。
- CSS Grid用于具有顯式行和列的二維布局。它非常適合頁面布局。
兩者都更易于開發(fā),使用更少的代碼,渲染速度更快,并且無需媒體查詢即可適應(yīng)任何屏幕大小。
非常舊的瀏覽器無法識別現(xiàn)代的flexbox和網(wǎng)格屬性,因此每個元素都成為一個塊。以簡單的移動式線性布局顯示它們:不需要使用基于浮點的回退來模擬設(shè)計。
用CSS漸變和效果替換圖像
在可能的情況下,選擇CSS代碼而不是圖像。使用漸變、邊界、半徑、陰影、過濾器、混合模式、遮罩、剪裁和偽元素效果進(jìn)行實驗,以重用或替換現(xiàn)有圖像。
CSS效果使用更少的帶寬,更容易修改,并且通??梢栽O(shè)置動畫。
避免過度使用高成本的屬性
您可能有簡潔的聲明性代碼,但某些CSS需要比其他CSS更多的處理。以下屬性觸發(fā)繪畫計算,當(dāng)過度使用時計算成本可能會很高:
position: fixedborder-radiusbox-shadowtext-shadowopacitytransformfilterbackdrop-filterbackground-blend-mode
盡可能使用CSS過渡和動畫
CSS過渡和動畫總是比JavaScript支持的效果更平滑,后者修改類似的屬性。它們不會在非常舊的瀏覽器中處理,但是,由于這些瀏覽器可能運(yùn)行在性能較差的設(shè)備上,這是最好的。
但是,請避免過多的動畫。這些效果應(yīng)該能夠增強(qiáng)用戶體驗,而不會對性能產(chǎn)生負(fù)面影響或?qū)е聲炣嚒z查prefers-reduced-motion媒體查詢,必要時禁用動畫。
避免觸發(fā)重新布局的動畫屬性
更改元素的尺寸(寬度、高度、填充、邊框)或位置(頂部、底部、左側(cè)、右側(cè)、邊距)可能會導(dǎo)致整個頁面在每個動畫幀上重新布局。要設(shè)置動畫的最有效特性是:
opacityfilter: 模糊、對比度、陰影和其他效果transform: 平移(移動)、縮放或旋轉(zhuǎn)圖元素
瀏覽器可以使用硬件加速的GPU在自己的層中渲染這些效果,因此只影響合成階段。
如果必須設(shè)置其他屬性的動畫,可以通過使用position:absolute將元素從頁面流中移除來提高性能。
注意復(fù)雜選擇器
瀏覽器將快速解析最復(fù)雜的CSS選擇器,但簡化它們會減少文件大小并提高性能。復(fù)雜選擇器通常是在CSS預(yù)處理器(如Sass)中創(chuàng)建深度嵌套的結(jié)構(gòu)時生成的。
指示哪些元素將更改
CSS will-change屬性允許您警告元素將如何更改或設(shè)置動畫,以便瀏覽器可以提前進(jìn)行優(yōu)化:
.myelement { will-change: transform, opacity; }可以定義任意數(shù)量的逗號分隔值,但該屬性只能作為解決已知性能問題的最后手段。您不應(yīng)該將它應(yīng)用于太多的元素,并確保給它足夠的時間進(jìn)行初始化。
考慮CSS Containment
Containment是一種新的CSS特性,它允許您識別頁面的孤立子樹,從而提高性能。瀏覽器可以通過呈現(xiàn)(或不呈現(xiàn))特定的DOM內(nèi)容塊來優(yōu)化處理。
contain屬性在空格分隔的列表中接受以下一個或多個值:
none: 未應(yīng)用Containmentlayout: 元素的布局與頁面的其余部分隔離-其內(nèi)容不會影響其他元素paint: 圖元的子圖元不會顯示在其邊界之外size: 可以在不檢查子元素的情況下確定元素的大小-維度與內(nèi)容無關(guān)
還提供了兩個特殊值:
strict: 應(yīng)用所有containment 規(guī)則(無規(guī)則除外)content: 應(yīng)用布局和繪制
重要:一個頁面有一個包含應(yīng)用
contain: strict;的列表;應(yīng)用如果更改任何子項的內(nèi)容,瀏覽器將不會重新計算該項、列表中的其他項或頁面上任何其他元素的大小或位置。大多數(shù)現(xiàn)代瀏覽器都支持CSS Containment。Safari或較舊的應(yīng)用程序中不支持Containment,但在這些應(yīng)用程序中可以安全地使用Containment,因為瀏覽器將忽略該屬性。
對“Save-Data”標(biāo)頭作出響應(yīng)
Save Data是一個HTTP請求頭,指示用戶已請求減少的數(shù)據(jù)。在某些瀏覽器中,它可能被標(biāo)記為“Lite”或“Turbo”模式。
啟用后,每個瀏覽器請求都會發(fā)送一個
Save-Data標(biāo)頭:GET /main.css HTTP/1.0 Host: site.com Save-Data: on
當(dāng)檢測到Save-Data時,服務(wù)器可以做出相應(yīng)的響應(yīng)。在CSS的情況下,它可以發(fā)送一個簡單的移動式線性布局,使用OS字體,切換到塊顏色,或者加載低分辨率的圖像背景。
注意:服務(wù)器應(yīng)在修改請求時返回以下標(biāo)頭,以確保在用戶關(guān)閉Lite/Turbo模式時不會緩存和重用最小內(nèi)容:
Vary: Accept-Encoding, Save-Data
客戶端JavaScript也可以檢測到此標(biāo)頭。當(dāng)未啟用“Save-Data”時,以下代碼將bestUX類添加到
元素:if ('connection' in navigator && !navigator.connection.saveData) { document.documentElement.classList.add('bestUX'); }然后,樣式表可以相應(yīng)地做出響應(yīng),而無需任何服務(wù)器操作:
/* no hero image by default */ header { background-color: #abc; background-image: none; } /* hero image when no Save-Data */ .bestUX header { background-image: url("hero.jpg"); }prefers-reduced-data媒體查詢提供了一個僅CSS選項作為替代,盡管在編寫本文時,任何瀏覽器都不支持此選項:
/* no hero image by default */ header { background-color: #abc; background-image: none; } /* hero image when no Save-Data */ @media (prefers-reduced-data: no-preference) { header { background-image: url("hero.jpg"); } }小結(jié)
對于CSS性能的優(yōu)化有很多選擇,但是對于新項目,請考慮以下做法:
- 使用移動優(yōu)先的方法:首先編寫最簡單的移動布局,然后隨著屏幕空間和瀏覽器功能集的增加添加增強(qiáng)功能。
- 將CSS拆分為具有可識別責(zé)任的單獨文件:CSS預(yù)處理器或CMS插件可以將CSS部分合并到單個文件中。
- 添加一個構(gòu)建步驟:提供了一些工具,可以自動刪除代碼、識別問題、連接、縮小、減少圖像大小等。自動化使生活更輕松,而且您不太可能忘記優(yōu)化步驟。
- 記錄樣式表:帶有文檔化示例的樣式指南將使您的代碼更易于獲取和維護(hù)。您將能夠識別和刪除舊的CSS,而無需付出任何代價。
最后,學(xué)習(xí)CSS!您知道的越多,需要編寫的代碼就越少,Web應(yīng)用程序就會變得越快。無論您使用哪種平臺和框架,它都將使您成為更好的開發(fā)人員。
文章標(biāo)題:如何優(yōu)化CSS以達(dá)網(wǎng)站性能之巔
本文URL:http://www.dlmjj.cn/article/dhihdis.html


咨詢
建站咨詢
