精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

探究 CSS 選擇器的性能真相

開發 前端
改進某些 CSS 選擇器可以帶來重要的性能提升。然而,關鍵是要記住,這主要取決于特定用例。可以使用性能工具來測試網頁的性能,如果發現樣式重新計算使渲染變慢,就使用 Edge 瀏覽器中新的“選擇器統計信息”功能!

大家好,我是 CUGGZ。

在 CSS 中,有些選擇器會比其他選擇器執行速度更快。下面就來深入研究 CSS 選擇器的性能真相,看看如何編寫 CSS 選擇器才能更快地執行!

幕后

編寫 CSS 選擇器的方式會影響瀏覽器如何渲染頁面。每當頁面發生變化時,運行它的瀏覽器引擎需要查看新的 DOM 樹,并確定如何根據可用的 CSS 樣式表對其進行樣式設置。這種將樣式與 DOM 節點匹配的操作稱為重新計算樣式。瀏覽器引擎需要查看所有規則并決定哪些規則適用于給定元素。為此,引擎需要從右向左查看選擇器規則。

例如,當引擎看到像.wrapper .section .title .link這樣的選擇器時,它會首先嘗試將link類與元素匹配,如果匹配,則從右到左沿鏈向上找到類名為title的祖先元素,然后找到類名為section的元素,最后找到類名為wrapper的元素。

這個例子說明,瀏覽器引擎只匹配 .link 可能比匹配更長的 .wrapper .section .title .link 選擇器更快,因為需要檢查的更少了。

當然,類并不是在 CSS 選擇器中可以使用的唯一類型標識符。一個有趣的例子就是使用屬性選擇器并進行子字符串匹配,如 [class*="icon-"],這選擇器就要求瀏覽器引擎不僅要檢查元素是否有 class 屬性,還要檢查這個屬性的值是否包含子字符串 icon-。這個例子說明,不同的選擇器編寫方式可能需要引擎或多或少的工作來應用 CSS 規則。

在實踐中,這重要嗎?

這在很大程度上取決于網頁、DOM 樹的大小、CSS 規則的數量以及 DOM 是否經常變化。不幸的是,并沒有關于這方面的規則。

事實上,談到規則,我們喜歡為什么是好的和什么是壞的制定規則。規則幫助我們快速做出決定,并在編寫代碼和設計軟件時提供指導。但這也會讓我們無法了解具體情況下真正發生的事。

在編寫 CSS 選擇器時,嚴格應用規則或使用 linter 自動執行,在某些情況下可能會適得其反。過于復雜的 CSS 選擇器,再加上變化很大的巨大 DOM 樹,很可能會導致性能不佳。過度的套用理論規則來獲得更好的性能,可能會使 CSS 更難閱讀和維護,并且實際收益并不大。

因此,盡可能以對應用有意義且易于閱讀和維護的方式來編寫代碼,然后再去衡量重要用戶場景的實際性能。

性能測量工具

Edge 瀏覽器中的 DevTools 提供了一個性能工具,它可以幫助我們測量頁面性能。在實際的測試中,我們要為用戶建立同理心,并盡可能使用他們實際使用的設備。因為往往開發機器可能比用戶的設備強大得多。DevTools 可以直接從工具內部降低 CPU 和網絡連接速度。

圖片

從 Edge 109 版本開始,DevTools 中的性能工具可以列出樣式重新計算中成本最高的選擇器。使用方法如下:

  1. 打開 DevTools 中的性能工具;
  2. 點擊右上角的齒輪圖標打開工具設置。
  3. 選中Enable advanced rendering instrumentation (slow)

圖片

  1. 點擊錄制按鈕,在要改進的網頁上執行特定場景,然后單擊停止;
  2. 在記錄的配置文件中,確定要改進的重新計算樣式,并在瀑布視圖(“主要”部分)中選擇它;
  3. 在底部的選項卡欄中,點擊“選擇器統計信息”進行查看。

圖片

DevTools 現在提供了瀏覽器引擎在此重新計算操作期間計算的所有 CSS 選擇器的列表,可以按選擇器處理時間或匹配次數對選擇器進行排序。

如果發現一個選擇器需要很長時間來處理,并且匹配了很多次,那么它可能就是一個可以優化的對象。選擇器是否可以簡化?是否可以更具體地描述需要匹配的元素?

案例分析

下面通過一個照片庫案例,看看如何改進 CSS 選擇器的性能!

圖片

這個頁面頂部有一個工具欄,可以按相機型號、光圈、曝光時間等過濾照片。現在在相機型號之間切換感覺有點慢。所以,主要關注如下場景:

  1. 加載頁面,并等待過濾器準備就緒;
  2. 將相機型號切換到另一個值并開始記錄性能;
  3. 切換回所有相機型號并停止錄制。

當切換回所有相機型號時速度很慢,因此只需要測量這一過程。我們還將 CPU 速度降低四倍,以獲得比通常在功能強大的開發機器上獲得的結果更真實的結果。

錄制準備就緒后,可以在配置文件中看到一個長的重新樣式計算塊,總計執行超過 900 毫秒。點擊這個塊,打開選擇器統計信息,然后按運行時間排序:

圖片

一個選擇器需要匹配的工作越多,匹配的次數越多,通過改進這個選擇器獲得的性能提升就越多。在列表中,主要關注以下選擇器:

  • .gallery .photo .meta ::selection
  • .gallery .photo .meta li strong:empty
  • [class*=" gallery-icon--"]::before
  • .gallery .photo .meta li
  • *
  • html[dir="rtl"] .gallery .photo .meta li button

改進 ::selection 選擇器

.gallery.photo.meta ::selection 選擇器用來匹配照片元數據被用戶選中時的背景和文本顏色。當用戶選擇照片下方的文本時,將使用自定義顏色而不是瀏覽器默認顏色。

由于代碼中的錯誤,這種特殊情況實際上是有問題的。真正的代碼應該是 .gallery.photo.meta::selection,即::selection前面沒有空格。因為這個錯誤的空格,選擇器實際上被引擎解析為 .gallery .photo .meta *::selection,這使得在樣式重新計算期間匹配起來要慢得多,因為引擎需要檢查所有 DOM 元素,然后驗證它們是否嵌套在正確的祖先中。

如果沒有多余的空格,引擎只需要檢查元素是否具有.meta類,然后再繼續即可。

改進 :empty 選擇器

.gallery .photo .meta li strong:empty中的 :empty 選擇器表示僅在 strong 元素沒有任何內容時匹配。這就可能需要引擎做更多的工作,而不僅僅是檢查元素的標簽名稱。

查看與此類似的其他 CSS 規則,可以看到:

.gallery .photo .meta li strong:empty {
padding: .125rem 2rem;
margin-left: .125rem;
background: var(--dim-bg-color);
}

html[dir="rtl"] .gallery .photo .meta li strong:empty {
margin-left: unset;
margin-right: .125rem;
}

相同的選擇器重復兩次,但第二個選擇器以 html[dir=rtl] 為前綴,當頁面上的文本方向是從右到左時,rtl 方向規則會覆蓋左邊距并將其替換為右邊距。

為了改進這一點,可以使用 CSS 邏輯屬性。可以使用符合任何文本方向的邏輯邊距方向,而不是指定物理邊距方向:

.gallery .photo .meta li strong:empty {
padding: .125rem 2rem;
margin-inline-start: .125rem;
background: var(--dim-bg-color);
}

這樣,第二個選擇器 html[dir="rtl"] .gallery .photo .meta li button 就可以去掉了。

改進 [class*="gallery-icon--"] 選擇器

以下是使用此選擇器的 CSS 規則:

[class*=" gallery-icon--"]::before {
content: '';
display: block;
width: 1rem;
height: 1rem;
background-size: contain;
background-repeat: no-repeat;
background-position: center;
filter: contrast(0);
}

.gallery-icon--camera::before { background-image: url(...); }
.gallery-icon--aperture::before { background-image: url(...); }
.gallery-icon--exposure::before { background-image: url(...); }

這里可以通過圖標類給元素添加對應的圖標。這就要求引擎讀取類名并對其進行子字符串搜索。可以通過以下方式幫助引擎減少工作量:

.gallery-icon::before {
content: '';
display: block;
width: 1rem;
height: 1rem;
background-size: contain;
background-repeat: no-repeat;
background-position: center;
filter: contrast(0);
}

.gallery-icon.camera::before { background-image: url(...); }
.gallery-icon.aperture::before { background-image: url(...); }
.gallery-icon.exposure::before { background-image: url(...); }

現在,不只使用一個類,而是向元素添加兩個類:<div class="gallery-icon camera">,而不是 <div class="gallery-icon--camera">,這樣就無需再讀取類名以及搜索子字符串,減少了瀏覽器引擎的工作量。

改進 .gallery .photo .meta li 選擇器

這個選擇器會強制瀏覽器去檢查 li 元素的祖先列表中的多個層級。案例的網頁中有很多 li 元素,這可能意味著很多工作。

可以通過為 li 元素指定一個特定的類并刪除不必要的嵌套來簡化它:

.photo-meta {
display: flex;
align-items: center;
gap: .5rem;
height: 1.5rem;
}

改進 * 選擇器

*符號在 CSS 中用作匹配任何元素的通用選擇器。這種匹配任何內容的能力意味著引擎需要將相關規則應用于所有元素。在性能記錄中可以看到,這個選擇器被匹配了很多次。

在案例中,它應用了一個特定的 box-sizing 值:

* {
box-sizing: border-box;
}

這在 CSS 中很常見,但最好刪除它,僅在需要時設置 box-sizing 屬性。

改進結果

完成以上改進之后,再來查看這個場景的性能情況:

圖片

在第一次性能記錄中,同樣的“重新計算樣式”塊運行時間幾乎為一秒,現在運行時間約為 300 毫秒,性能獲得了很大的提升!

總結

案例研究表明,改進某些 CSS 選擇器可以帶來重要的性能提升。然而,關鍵是要記住,這主要取決于特定用例。可以使用性能工具來測試網頁的性能,如果發現樣式重新計算使渲染變慢,就使用 Edge 瀏覽器中新的“選擇器統計信息”功能!

參考:https://blogs.windows.com/msedgedev/2023/01/17/the-truth-about-css-selector-performance/

責任編輯:武曉燕 來源: 前端充電寶
相關推薦

2010-08-26 12:47:15

CSSclass

2010-09-06 09:57:01

CSS類選擇器CSS

2010-09-06 09:41:28

CSS繼承

2013-03-11 10:30:56

CSSWeb

2024-04-30 10:59:03

WebSocketCSS選擇器

2010-09-07 11:14:32

CSS屬性選擇器CSS

2023-03-16 10:20:55

CSS選擇器

2020-10-25 08:57:56

CSS前端瀏覽器

2010-09-03 09:30:29

CSS選擇器

2010-09-06 08:52:00

CSS選擇器

2022-04-14 09:01:19

CSS父選擇器CSS類

2010-12-27 16:01:45

jQuery選擇器

2011-10-24 10:30:20

CSS

2025-03-28 02:44:00

2022-04-01 09:02:19

CSS選擇器HTML

2024-03-27 09:09:40

CSS選擇器

2022-12-23 10:26:09

CSShas()

2010-08-26 12:53:40

CSSid選擇器

2010-09-06 09:34:16

CSS派生選擇器

2010-09-06 09:50:34

id選擇器CSS
點贊
收藏

51CTO技術棧公眾號

欧美性xxxxx极品| 米奇777在线欧美播放| 制服丝袜亚洲色图| 欧美黄网在线观看| 午夜视频免费在线| 香蕉久久夜色精品国产| 日韩中文字幕国产精品| 日本一级大毛片a一| 欧美成人精品一区二区男人小说| 国产精品私人自拍| 古典武侠综合av第一页| 欧美精品一二三四区| 国产精品99久久久久久动医院| 欧美大片一区二区三区| 热久久精品国产| 国产精品久久久久久福利| 波多野结衣中文字幕一区| 国产精品久久久久久亚洲调教| 国产性xxxx| 台湾佬综合网| 日韩一区二区三区视频在线观看| 91传媒久久久| 在线免费av导航| 久久久精品国产免费观看同学| 国产精品十八以下禁看| 日韩成人在线免费视频| 无需播放器亚洲| 精品一区二区三区四区| 久久久电影免费观看完整版| 日韩精品资源| 蜜桃91麻豆精品一二三区| 日韩不卡一二三区| 97超级碰碰碰久久久| 国产大片免费看| 日韩在线观看| 亚洲国产91色在线| 成人三级做爰av| 成人黄色免费网站| 色综合久久久久综合体| 精品人妻少妇一区二区| 2021国产在线| 国产精品成人免费 | 精品视频91| 欧美视频一区二区在线观看| 成人三级视频在线播放| 麻豆免费版在线观看| 亚洲国产视频网站| 国产欧美123| 免费a级毛片在线播放| 日本一区二区视频在线观看| 欧美日韩在线一二三| 五月婷婷免费视频| 国产成人亚洲综合a∨婷婷图片| 成人免费午夜电影| 伊人精品在线视频| 免费视频一区二区| 国产精品一区二区久久久久| 日本一区二区三区久久| 日本在线不卡视频一二三区| 国产极品精品在线观看| 国产女主播喷水视频在线观看 | 丁香六月天婷婷| 激情综合网激情| 国产综合久久久久久| 欧美国产日韩在线观看成人| japanese在线视频| 亚洲女人初尝黑人巨大| 你懂的亚洲视频| 久久这里精品| 国产精品-色哟哟| 欧美精品系列| 亚洲女人被黑人巨大进入al| 全黄一级裸体片| 无码少妇一区二区三区| 亚洲毛片在线免费观看| 国产美女免费无遮挡| 第一社区sis001原创亚洲| 中文在线资源观看视频网站免费不卡| 亚洲一二三四视频| 围产精品久久久久久久| 欧美精品videossex性护士| 国产精品18p| 翔田千里一区二区| 国产精品免费网站| 国产精品爽爽久久| av在线不卡观看免费观看| 久久久综合亚洲91久久98| 国产黄色片在线观看| 综合欧美一区二区三区| 日本阿v视频在线观看| 625成人欧美午夜电影| 精品污污网站免费看| 91视频福利网| 一个色免费成人影院| 久本草在线中文字幕亚洲| 亚洲精品一区二区精华| 强伦人妻一区二区三区| 99精品视频在线| 久久久噜噜噜久久中文字免| 久久久精品毛片| 国产一区不卡精品| 久久久精品动漫| 麻豆av在线免费看| 婷婷成人综合网| 久久这里只精品| 久久国产精品免费精品3p| 伊人青青综合网站| 国产小视频在线看| 男女视频一区二区| 成人av蜜桃| 91在线直播| 午夜精品一区在线观看| 亚洲综合激情视频| 亚洲第一二三区| 欧美日韩国产成人高清视频| 999视频在线| 国产成人午夜片在线观看高清观看| 玛丽玛丽电影原版免费观看1977| 成人片在线看| 欧美曰成人黄网| 精品国产一区在线| 国产国产精品| 成人午夜短视频| 日本一区二区在线播放| 性中国xxx极品hd| 国产精品久久久久久久久免费丝袜 | 欧美性理论片在线观看片免费| 欧美成人aa大片| 国产尤物在线播放| 日本不卡免费在线视频| 久久久精彩视频| 高清在线视频不卡| 日韩午夜在线观看| 男人av资源站| 麻豆国产精品视频| 欧美日韩国产综合在线| f2c人成在线观看免费视频| 欧美一级二级三级蜜桃| 午夜精品久久久久99蜜桃最新版| 久久婷婷av| 乱一区二区三区在线播放| 韩国成人免费视频| 日韩欧美亚洲国产精品字幕久久久 | 免费高清视频在线一区| 亚洲国产精品女人久久久| 欧美黑吊大战白妞| 激情综合网最新| www亚洲国产| 四虎国产精品免费久久5151| 尤物精品国产第一福利三区 | 欧美在线一级片| 黄色日韩在线| 97久久人人超碰caoprom欧美| 国产激情小视频在线| 欧美一区二区三级| 丁香花五月激情| 国产精品538一区二区在线| 日本三级福利片| а天堂中文最新一区二区三区| 中文字幕亚洲无线码在线一区| 瑟瑟视频在线免费观看| 中文字幕欧美国产| 午夜免费福利在线| 日韩在线欧美| 成人激情在线播放| www视频在线免费观看| 日韩一区二区三区电影在线观看 | 日本国产在线观看| 亚洲成人在线网站| 精品夜夜澡人妻无码av| 黄色av网站在线看| 久久免费精品国产久精品久久久久| 黄色一级片在线看| 男人的天堂久久| 日韩免费中文字幕| av福利精品| 欧美精品vⅰdeose4hd| 国产盗摄一区二区三区在线| 福利91精品一区二区三区| 男人添女人下部高潮视频在观看| 欧洲亚洲成人| 国产精品黄色av| 黄色免费网站在线| 精品国产一区二区三区忘忧草| 日韩毛片在线视频| 国产日韩欧美精品电影三级在线 | 精品一区二区三区av| 激情五月六月婷婷| 女厕嘘嘘一区二区在线播放| 国产日韩中文字幕| xxxcom在线观看| 亚洲品质视频自拍网| 国产精品一品二区三区的使用体验| 亚洲一区二区3| 欧美 日韩 国产 成人 在线观看| 国内精品久久久久影院薰衣草 | 日本高清成人vr专区| 亚洲精品福利在线| 亚洲天堂手机在线| 亚洲电影中文字幕在线观看| 中国女人特级毛片| 国产精品白丝av| 少妇高清精品毛片在线视频| 综合久久久久| 免费亚洲一区二区| 视频成人永久免费视频| 国产ts人妖一区二区三区 | 97久久久免费福利网址| 免费大片黄在线观看视频网站| 日韩av在线网页| 国产乱码精品一区二三区蜜臂 | 欧美另类综合| 欧美久久久久久久| 中文字幕视频精品一区二区三区| 国产成人在线一区| 青青在线视频| zzjj国产精品一区二区| 久久99久久| 亚洲成avwww人| 夜夜骚av一区二区三区| 黑人巨大精品欧美一区二区免费| 国产传媒免费在线观看| 久久久久国产精品麻豆ai换脸| 被黑人猛躁10次高潮视频| 日本va欧美va精品| 久久免费视频3| 国内成人在线| 91成人在线视频观看| 日本大胆欧美| 欧洲精品国产| 欧美成人专区| 国产98在线|日韩| 国产亚洲高清在线观看| 国产精品草莓在线免费观看| 波多野结衣久久精品| 久久青草福利网站| 日本片在线观看| 久久av在线播放| 国产调教视频在线观看| 色偷偷av一区二区三区| 3d成人动漫在线| 亚洲视频国产视频| 日韩黄色影片| 精品性高朝久久久久久久| 亚洲av无码一区二区三区性色 | av中文字幕网址| 免费视频最近日韩| 国产视频1区2区3区| 理论视频在线| 欧美日韩在线视频一区| 日本熟妇色xxxxx日本免费看| 亚洲一区二区视频在线| 九九热精彩视频| 一区二区在线观看免费| 玖玖爱免费视频| 亚洲最大的成人av| 国产一级久久久| 亚洲超碰精品一区二区| 久久视频免费在线观看| 天天综合天天做天天综合| 久久久午夜影院| 日韩欧美在线第一页| 国模私拍一区二区| 欧美精品自拍偷拍动漫精品| 国产又粗又大又爽| 91精品国产乱码久久蜜臀| 丰满少妇在线观看bd| 亚洲第一黄色网| 男人av在线| 在线视频中文亚洲| 视频免费一区| 欧美大片免费看| 欧产日产国产精品视频| 国产精品jizz在线观看麻豆| 免费一级欧美在线观看视频| 亚洲影院色无极综合| 伊人精品久久| 欧美精品人人做人人爱视频| 精品久久不卡| 国产欧美综合一区| 亚洲精选久久| 一区二区三区 日韩| 国产精品自在在线| 亚洲国产精品自拍视频| 欧美激情一区二区三区不卡 | 亚洲一区二区五区| 日韩手机在线视频| 3d动漫精品啪啪一区二区竹菊| 草草视频在线播放| 亚洲女同精品视频| 色的视频在线免费看| 高清亚洲成在人网站天堂| 日韩av大片站长工具| 成人在线激情视频| 国产精品第5页| 国产欧美日韩激情| 538任你躁在线精品视频网站| 精品久久久久久久久中文字幕| 亚洲在线视频播放| 亚洲激情在线视频| 麻豆视频在线免费观看| 96精品视频在线| 韩国一区二区三区视频| 麻豆传媒一区| 狠狠爱www人成狠狠爱综合网| 男人舔女人下面高潮视频| 国产成人一区在线| 日韩一级片在线免费观看| 性久久久久久久| 一级片免费观看视频| 日韩电影网在线| 91三级在线| 国产精品久久激情| 欧美a一欧美| 无码毛片aaa在线| 日韩电影在线观看一区| 欧美性生交xxxxx| 成人免费小视频| 在线视频精品免费| 日韩精品一二三四区| 伊人影院蕉久影院在线播放| 国产精品久久一区| 亚洲精华一区二区三区| 777久久精品一区二区三区无码| 日韩高清国产一区在线| 亚洲一级av无码毛片精品| 一区二区三区免费网站| 亚洲综合网av| 中文国产成人精品久久一| 亚洲精品成人图区| 国产精品久久久久久免费观看| 国产精品久久久久久麻豆一区软件| 日韩久久一级片| 99re8在线精品视频免费播放| 美女毛片在线观看| 欧美一区二区三区色| 91美女视频在线| 国产不卡精品视男人的天堂| 亚洲精品亚洲人成在线| 乱妇乱女熟妇熟女网站| 波波电影院一区二区三区| 精品99久久久久成人网站免费 | 一区二区三区免费播放| 91网站黄www| 国产精品男女视频| 日韩av中文字幕在线免费观看 | 蜜桃免费在线| 性欧美亚洲xxxx乳在线观看| 国产精品极品| 国产毛片视频网站| www.99精品| 日本天堂网在线观看| 亚洲国产成人精品久久| 51漫画成人app入口| 国产精品自拍首页| 亚洲精品女人| ass精品国模裸体欣赏pics| 欧美午夜激情在线| 你懂的视频在线观看| 国产精品h片在线播放| 日韩精品影视| 色啦啦av综合| 亚洲美女视频一区| 亚洲老妇色熟女老太| 午夜剧场成人观在线视频免费观看| 国内精品偷拍| 黄色影院一级片| 国产欧美精品一区二区三区四区| 在线观看国产成人| 伦伦影院午夜日韩欧美限制| 亚洲不卡在线| 一区二区传媒有限公司| 久久久蜜桃精品| 亚洲天天综合网| 欧美成人亚洲成人| 国产精品qvod| 欧美三级午夜理伦三级| 中文无字幕一区二区三区| 国产成人a人亚洲精品无码| 久久久久久成人| 免费一区二区| 天堂在线精品视频| 欧美日韩国产一区中文午夜| 黄色大片在线看| 96国产粉嫩美女| 在线亚洲伦理| 黑人と日本人の交わりビデオ| 日韩一级成人av| 永久免费毛片在线播放| 亚洲国产欧美日韩| 懂色av噜噜一区二区三区av| av大片在线免费观看| 啊v视频在线一区二区三区| 高潮久久久久久久久久久久久久| 99草草国产熟女视频在线| 亚洲欧美另类图片小说| 久色视频在线| 成人动漫视频在线观看完整版 | 亚洲一区在线观看免费观看电影高清| 欧洲伦理片一区 二区 三区|