前端基礎知識CSS系列 - 14(CSS提高性能的方法)

一、前言

每一個網頁都離不開css,但是很多人又認為,css主要是用來完成頁面布局的,像一些細節或者優化,就不需要怎么考慮,實際上這種想法是不正確的

作為頁面渲染和內容展現的重要環節,css影響著用戶對整個網站的第一體驗

因此,在整個產品研發過程中,css性能優化同樣需要貫穿全程

二、實現方式

實現方式有很多種,主要有如下:

  • 內聯首屏關鍵CSS
  • 異步加載CSS
  • 資源壓縮
  • 合理使用選擇器
  • 減少使用昂貴的屬性
  • 不要使用@import

內聯首屏關鍵CSS

在打開一個頁面,頁面首要內容出現在屏幕的時間影響著用戶的體驗,而通過內聯css關鍵代碼能夠使瀏覽器在下載完html后就能立刻渲染

而如果外部引用css代碼,在解析html結構過程中遇到外部css文件,才會開始下載css代碼,再渲染

所以,CSS內聯使用使渲染時間提前

注意:但是較大的css代碼并不合適內聯(初始擁塞窗口、沒有緩存),而其余代碼則采取外部引用方式

異步加載CSS

CSS文件請求、下載、解析完成之前,CSS會阻塞渲染,瀏覽器將不會渲染任何已處理的內容

前面加載內聯代碼后,后面的外部引用css則沒必要阻塞瀏覽器渲染。這時候就可以采取異步加載的方案,主要有如下:

  • 使用javascript將link標簽插到head標簽最后
// 創建link標簽
const myCSS = document.createElement( "link" );
myCSS.rel = "stylesheet";
myCSS.href = "mystyles.css";
// 插入到header的最后位置
document.head.insertBefore( myCSS, document.head.childNodes[ document.head.childNodes.length - 1 ].nextSibling );
  • 設置link標簽media屬性為noexis,瀏覽器會認為當前樣式表不適用當前類型,會在不阻塞頁面渲染的情況下再進行下載。加載完成后,將media的值設為screenall,從而讓瀏覽器開始解析CSS
<link rel="stylesheet" href="mystyles.css" media="noexist" onload="this.media='all'">
  • 通過rel屬性將link元素標記為alternate可選樣式表,也能實現瀏覽器異步加載。同樣別忘了加載完成之后,將rel設回stylesheet
<link rel="alternate stylesheet" href="mystyles.css" onload="this.rel='stylesheet'">

資源壓縮

利用webpackgulp/gruntrollup等模塊化工具,將css代碼進行壓縮,使文件變小,大大降低了瀏覽器的加載時間

合理使用選擇器

css匹配的規則是從右往左開始匹配,例如#markdown .content h3匹配規則如下:

  • 先找到h3標簽元素
  • 然后去除祖先不是.content的元素
  • 最后去除祖先不是#markdown的元素

如果嵌套的層級更多,頁面中的元素更多,那么匹配所要花費的時間代價自然更高

所以我們在編寫選擇器的時候,可以遵循以下規則:

  • 不要嵌套使用過多復雜選擇器,最好不要三層以上
  • 使用id選擇器就沒必要再進行嵌套
  • 通配符和屬性選擇器效率最低,避免使用

減少使用昂貴的屬性

在頁面發生重繪的時候,昂貴屬性如box-shadow/border-radius/filter/透明度/:nth-child等,會降低瀏覽器的渲染性能

不要使用@import

css樣式文件有兩種引入方式,一種是link元素,另一種是@import

@import會影響瀏覽器的并行下載,使得頁面在加載時增加額外的延遲,增添了額外的往返耗時

而且多個@import可能會導致下載順序紊亂

比如一個css文件index.css包含了以下內容:@import url("reset.css")

那么瀏覽器就必須先把index.css下載、解析和執行后,才下載、解析和執行第二個文件reset.css

其他

  • 減少重排操作,以及減少不必要的重繪
  • 了解哪些屬性可以繼承而來,避免對這些屬性重復編寫
  • cssSprite,合成所有icon圖片,用寬高加上backgroud-position的背景圖方式顯現出我們要的icon圖,減少了http請求
  • 把小的icon圖片轉成base64編碼
  • CSS3動畫或者過渡盡量使用transform和opacity來實現動畫,不要使用left和top屬性

三、總結

css實現性能的方式可以從選擇器嵌套、屬性特性、減少http這三面考慮,同時還要注意css代碼的加載順序

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/85985.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/85985.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/85985.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

判斷 NI Package Manager (NIPM) 版本與 LabVIEW 2019 兼容性

?判斷依據 1. 查閱 LabVIEW 2019 自述文件 LabVIEW 2019 自述文件中包含系統要求&#xff0c;可通過 NI 官網訪問。文件提到使用 NIPM 安裝&#xff0c;但未明確最低版本要求&#xff0c;需結合其他信息判斷。 2. 參考 NI 官方兼容性文檔 NI 官方文檔指出 LabVIEW 運行引擎與…

Django 安裝指南

Django 安裝指南 引言 Django 是一個高級的 Python Web 框架,用于快速開發安全且實用的網站。本文將詳細介紹如何在您的計算機上安裝 Django,以便您能夠開始使用這個強大的工具。 安裝前的準備 在開始安裝 Django 之前,請確保您的計算機滿足以下條件: 操作系統:Django…

Spring MVC參數綁定終極手冊:單多參對象集合JSON文件上傳精講

我們通過瀏覽器訪問不同的路徑&#xff0c;就是在發送不同的請求&#xff0c;在發送請求時&#xff0c;可能會帶一些參數&#xff0c;本文將介紹了Spring MVC中處理不同請求參數的多種方式 一、傳遞單個參數 接收單個參數&#xff0c;在Spring MVC中直接用方法中的參數就可以…

synchronized 做了哪些優化?

Java 中的 synchronized 關鍵字是保證線程安全的基本機制&#xff0c;隨著 JVM 的發展&#xff0c;它經歷了多次優化以提高性能。 1. 鎖升級機制&#xff08;鎖膨脹&#xff09; JDK 1.6 引入了偏向鎖→輕量級鎖→重量級鎖的升級機制&#xff0c;避免了一開始就使用重量級鎖&…

三甲醫院AI醫療樣本數據集分類與收集全流程節點分析(下)

3.3 典型案例分析 —— 以某三甲醫院為例 為了更深入地了解三甲醫院 AI 醫療樣本數據收集的實際情況,本研究選取了具有代表性的某三甲醫院作為案例進行詳細分析。該醫院作為區域醫療中心,在醫療技術、設備和人才方面具有顯著優勢,同時在醫療信息化建設和 AI 應用方面也進行…

設置程序開機自動啟動

在Windows系統中&#xff0c;有幾種方法可以將程序設置為開機自動啟動。下面我將介紹最常用的三種方法&#xff0c;并提供一個C#實現示例。 方法一&#xff1a;使用啟動文件夾&#xff08;最簡單&#xff09; 按下 Win R 鍵打開運行對話框 輸入 shell:startup 并回車 將你的…

多源異構數據接入與實時分析:衡石科技的技術突破

在數字化轉型的浪潮中&#xff0c;企業每天產生的數據量呈指數級增長。這些數據來自CRM系統、IoT設備、日志文件、社交媒體、交易平臺等眾多源頭&#xff0c;格式各異、結構混亂、流速不一。傳統的數據處理方式如同在無數孤立的島嶼間劃著小船傳遞信息&#xff0c;效率低下且無…

JVM——Synchronized:同步鎖的原理及應用

引入 在多線程編程的世界里&#xff0c;共享資源的訪問控制就像一場精心設計的交通管制&#xff0c;而Synchronized作為Java并發編程的基礎同步機制&#xff0c;扮演著"交通警察"的關鍵角色。 并發編程的核心矛盾 當多個線程同時訪問共享資源時&#xff0c;"…

跟著AI學習C# Day26

&#x1f4c5; Day 26&#xff1a;C# 異步編程進階 ? 學習目標&#xff1a; 深入理解 async/await 的底層機制&#xff1b;掌握 ConfigureAwait(false) 的作用與使用場景&#xff1b;避免異步死鎖&#xff0c;理解同步上下文&#xff08;Synchronization Context&#xff09…

Scrapy | 通過爬取豆瓣Top250電影信息來學習在中間件中應用隨機請求頭和代理ip

中間件的使用 1.scrapyl中間件的分類和作用1.1 scrapy中間件的分類1.2 scrapy中間的作用:預處理request和response對象2.下載中間件的使用方法:3.定義實現隨機User-Agent的下載中間件3.1 實戰:爬取豆瓣Top250電影信息3.2 中間件使用實現隨機User-Agent4. 代理ip的使用4.1思路…

【深度學習】深度學習入門:從理論到實踐的全面指南

深度學習入門&#xff1a;從理論到實踐的全面指南 深度學習&#xff1a;開啟人工智能新時代的鑰匙一、深度學習的廣泛應用場景1.1 改變生活的深度學習應用1.2 行業變革案例深度解析案例一&#xff1a;深度學習檢測皮膚癌案例二&#xff1a;移動端OCR技術突破案例三&#xff1a;…

MySQL 數據庫操作完整指南

MySQL 數據庫操作完整指南 目錄 創建數據庫 連接數據庫 創建表 約束詳解 插入數據 查詢數據 多表聯合查詢 連接查詢 高級查詢 更新數據 刪除數據 視圖詳解 存儲過程詳解 函數詳解 觸發器 事務處理 索引優化 安全性管理 備份和恢復 性能優化 刪除表和數據庫 1. 創建數據庫 基…

Java面試復習:面向對象編程、Java 8新特性與Spring

Java面試復習&#xff1a;面向對象編程、Java 8新特性與Spring 面向對象編程 概念解析&#xff1a;面向對象編程&#xff08;OOP&#xff09;是將現實世界中的概念抽象為軟件模型的編程范式&#xff0c;包括封裝、繼承和多態。 核心原理&#xff1a; 封裝&#xff1a;通過訪…

藍牙數據通訊,實現內網電腦訪問外網電腦

最近突然想到了一個可以繞開單位安全管控軟件&#xff0c;讓單位內部辦公電腦連上外網的方法。大概是這個樣子&#xff0c;讓單位辦公電腦與自己的外網電腦進行藍牙配對&#xff0c;然后用配對成功的藍牙進行網絡數據交互。這里大家可能會想用一下藍牙的網絡共享功能&#xff0…

硬件面經-具身機器人通用技術要求

目錄 簡介 場景 技術面試 設計知識點 總結 簡介 最近機器人特別的火。所以收集了一些關于機器人的面試及要求 場景 目前具身機器人賽道可謂是十分火熱,全國大大小小崛起了幾十家具身機器人公司,國外比較出名的有波士頓動力,特斯拉等,國內目前比較火的就是宇樹,眾擎…

DeepSeek生成HTML5圖片拼接工具

讓DeepSeek生成一個HTML5圖片拼接工具&#xff0c;給的提示詞如下 提示詞(prompt) 幫我生成一個可以將兩張圖片拼接到一起的程序 支持橫向拼接和豎向拼接&#xff0c;可以用html5實現功能嗎&#xff1f; DeepSeek大概20秒左右就做好了&#xff0c;而且像這么簡單的功能的話也沒…

Java面試復習指南:Java基礎、面向對象編程與并發編程

Java面試復習指南&#xff1a;Java基礎、面向對象編程與并發編程 1. Java基礎 概念解析: Java是一種面向對象的編程語言&#xff0c;具有跨平臺的特性。 核心原理: JVM負責Java程序的跨平臺運行&#xff0c;通過字節碼來實現。 高頻面試問題: Java如何實現跨平臺&#xff…

LeeCode2566替換一個數字后的最大差值

項目場景&#xff1a; 給你一個整數 num 。你知道 Danny Mittal 會偷偷將 0 到 9 中的一個數字 替換 成另一個數字。 請你返回將 num 中 恰好一個 數字進行替換后&#xff0c;得到的最大值和最小值的差為多少。 注意&#xff1a; 當 Danny 將一個數字 d1 替換成另一個數字 …

李宏毅2025《機器學習》第三講-AI的腦科學

在之前的課程中探討了如何利用大模型構建AI Agent,本科將暫時放下應用層面的探索,拿起“手術刀”和“顯微鏡”,深入剖析LLM的“大腦”,帶您踏上一場“AI腦神經科學”的旅程。課程不討論模型的訓練過程,而是假設我們擁有一個已經訓練好的、功能完備的LLM。我們的目標是:理…

CVPR 2025 | 微米級光影CT精度!復旦騰訊優圖開源Real-IAD D3數據集

【導讀】 本文介紹了復旦聯合騰訊優圖發布高精度多模態數據集Real-IAD D&#xff0c;并基于此數據集提出了一種創新的多模態融合檢測方法&#xff0c;數據集已被CVPR 2025收錄&#xff0c;并開源。>>更多資訊可加入CV技術群獲取了解哦~ 目錄 一、Real-IAD D的創新之處…