首頁 web前端 css教學 淺析CSS 的載入及載入順序

淺析CSS 的載入及載入順序

Dec 26, 2017 am 09:20 AM
css 順序

本文很適合基礎及小夥伴們,本文主要給大家介紹CSS 的加載及加載順序以及遇到的問題思路解析,文中也給大家補充介紹了關於html,css,js三者的加載順序問題,需要的朋友參考下吧,希望能幫助大家。

通常的css載入順序

一般情況下,我們css樣式表是放在頭部,同時為了減少請求,我們通常會對css進行一個合併壓縮。 目前我們css一般是如下載入的:

<head>
  <link rel="stylesheet" href="/all-of-my-styles.css">
</head>
<body>
  …content…
</body>
登入後複製

這樣可以,但是有幾個效能問題,我們可以繼續優化:

問題:

所有的css都合併壓縮成一個文件,放在頁面頭部載入。可能首屏我們只用到一點點css,卻在頭部加載了所有的css,造成資源的不合理加載和浪費。假如css很大,嚴重影響網頁載入速度和首屏顯示速度。

換個想法

假如不合併,單一css壓縮引用,檔案大小是小了,但是請求數量多了一些。 權衡二者,並且進行性能測試對比,發現如下寫法確實比我們所有css放在頭部一次性加載,首屏顯示速度要快些:

<head>
</head>
<body>
  <!-- HTTP/2 push this resource, or inline it, whichever&#39;s faster -->
  <link rel="stylesheet" href="/site-header.css">
  <header>…</header>
  <link rel="stylesheet" href="/article.css">
  <main>…</main>
  <link rel="stylesheet" href="/comment.css">
  <section class="comments">…</section>
  <link rel="stylesheet" href="/about-me.css">
  <section class="about-me">…</section>
  <link rel="stylesheet" href="/site-footer.css">
  <footer>…</footer>
</body>
登入後複製

但是還是有性能可以優化的地方!

例如:

我們首屏僅顯示了頭部和文章,其他模組首屏不顯示。那麼,其他模組的css我們可以完全非同步來載入。如何異步加載呢?

請看下面

loadCSS 及Preload

關於preload,推進2篇文章給大家看下:

#1、透過rel="preload"進行內容預先載入:https://developer.mozilla.org/zh-CN/docs/Web/HTML/Preloading_content

2、preload 的w3文件:https://www.w3.org/TR /preload/

對於一些不是首屏載入的css,我們可以如下寫法:

<link rel="preload" href="path/to/haorooms.css" as="style" onload="this.rel=&#39;stylesheet&#39;">
登入後複製

防止瀏覽器禁止js,保險起見,也可以如下:

<link rel="preload" href="path/to/haorooms.css" as="style" onload="this.rel=&#39;stylesheet&#39;">
登入後複製

為了避免有些瀏覽器會重新呼叫處理程序rel='stylesheet'這個屬性,我們一般推薦如下寫法:

<link rel="preload" href="path/to/haorooms.css" as="style" onload="this.onload=null;this.rel=&#39;stylesheet&#39;">
<noscript><link rel="stylesheet" href="path/to/haorooms.css"></noscript>
登入後複製

為了更好的相容rel=preload,可以使用loadCSS ,github位址: https:/ /github.com/filamentgroup/loadCSS

因此, 不考慮瀏覽器相容問題的情況下(考慮相容問題,可以使用loadCss,這裡不多示範),我們對上面程式碼再次進行最佳化:

<head>
  <link rel="stylesheet" href="/首屏加载css.css">
  <link rel="preload" href="/不是首屏加载的css.css" as="style" onload="this.onload=null;this.rel=&#39;stylesheet&#39;">
</head>
<body>
  <header>…</header>
  <main>…</main>
  <section class="comments">…</section>
  <section class="about-me">…</section>
  <footer>…</footer>
</body>
登入後複製

PS:下面看下關於html,css,js三者的載入順序問題

<head lang="en">
    <meta charset="utf-8">
    <title></title>
    <link rel="stylesheet" href="css/*.css">
    <script src="js/*.js></script>
</head>
登入後複製

DOM文檔的載入順序是由上而下的順序載入;

1 、DOM載入到link標籤

css檔案的載入是與DOM的載入並行的,也就是說,css在載入時Dom還在繼續載入構建,而過程中遇到的css樣式或img,則會向伺服器發送請求,待資源返回後,將其添加到dom中的相對應位置中;

#2、DOM加載到script標籤

由於js檔案不會與DOM並行加載,因此需要等待js整個文件加載完之後才能繼續DOM的加載,倘若js腳本文件過大,則可能導致瀏覽器頁面顯示滯後,出現“假死”狀態,這種效應稱之為“阻塞效應」;會導致出現非常不好的使用者體驗;

而這個特性也是為什麼在js檔案中開頭需要$(document).ready(function(){})或(function(){})或window.onload,也就是讓DOM文件載入完成之後才執行js文件,這樣才不會出現查找不到DOM節點等問題;

js阻塞其他資源的載入的原因是:瀏覽器為了防止js修改DOM樹,需要重新建構DOM樹的情況出現;

3、解決方法

前提,js是外部腳本;

在script標籤中加入defer =“ture”,則會讓js與DOM並行加載,待頁面加載完成後再執行js文件,這樣則不存在阻塞;

在scirpt標籤中添加async=“ture”,這個屬性告訴瀏覽器該js檔案是非同步載入執行的,也就是不依賴其他js和css,也就是說無法保證js檔案的載入順序,但是同樣有與DOM並行載入的效果;

同時使用defer和async屬性時,defer屬性會失效;

可以將scirpt標籤放在body標籤之後,這樣就不會出現載入的衝突了。

相關推薦:

html、css以及js檔案載入順序及執行情況

頁面載入順序問題_html /css_WEB-ITnose

Java中類別的載入順序執行結果詳細介紹

以上是淺析CSS 的載入及載入順序的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

bootstrap按鈕怎麼用 bootstrap按鈕怎麼用 Apr 07, 2025 pm 03:09 PM

如何使用 Bootstrap 按鈕?引入 Bootstrap CSS創建按鈕元素並添加 Bootstrap 按鈕類添加按鈕文本

bootstrap怎麼插入圖片 bootstrap怎麼插入圖片 Apr 07, 2025 pm 03:30 PM

在 Bootstrap 中插入圖片有以下幾種方法:直接插入圖片,使用 HTML 的 img 標籤。使用 Bootstrap 圖像組件,可以提供響應式圖片和更多樣式。設置圖片大小,使用 img-fluid 類可以使圖片自適應。設置邊框,使用 img-bordered 類。設置圓角,使用 img-rounded 類。設置陰影,使用 shadow 類。調整圖片大小和位置,使用 CSS 樣式。使用背景圖片,使用 background-image CSS 屬性。

bootstrap怎麼寫分割線 bootstrap怎麼寫分割線 Apr 07, 2025 pm 03:12 PM

創建 Bootstrap 分割線有兩種方法:使用 標籤,可創建水平分割線。使用 CSS border 屬性,可創建自定義樣式的分割線。

bootstrap怎麼調整大小 bootstrap怎麼調整大小 Apr 07, 2025 pm 03:18 PM

要調整 Bootstrap 中元素大小,可以使用尺寸類,具體包括:調整寬度:.col-、.w-、.mw-調整高度:.h-、.min-h-、.max-h-

bootstrap怎麼設置框架 bootstrap怎麼設置框架 Apr 07, 2025 pm 03:27 PM

要設置 Bootstrap 框架,需要按照以下步驟:1. 通過 CDN 引用 Bootstrap 文件;2. 下載文件並將其託管在自己的服務器上;3. 在 HTML 中包含 Bootstrap 文件;4. 根據需要編譯 Sass/Less;5. 導入定製文件(可選)。設置完成後,即可使用 Bootstrap 的網格系統、組件和样式創建響應式網站和應用程序。

bootstrap怎麼看日期 bootstrap怎麼看日期 Apr 07, 2025 pm 03:03 PM

答案:可以使用 Bootstrap 的日期選擇器組件在頁面中查看日期。步驟:引入 Bootstrap 框架。在 HTML 中創建日期選擇器輸入框。 Bootstrap 將自動為選擇器添加樣式。使用 JavaScript 獲取選定的日期。

HTML,CSS和JavaScript的角色:核心職責 HTML,CSS和JavaScript的角色:核心職責 Apr 08, 2025 pm 07:05 PM

HTML定義網頁結構,CSS負責樣式和佈局,JavaScript賦予動態交互。三者在網頁開發中各司其職,共同構建豐富多彩的網站。

bootstrap日期怎麼驗證 bootstrap日期怎麼驗證 Apr 07, 2025 pm 03:06 PM

在 Bootstrap 中驗證日期,需遵循以下步驟:引入必需的腳本和样式;初始化日期選擇器組件;設置 data-bv-date 屬性以啟用驗證;配置驗證規則(如日期格式、錯誤消息等);集成 Bootstrap 驗證框架,並在表單提交時自動驗證日期輸入。

See all articles