iT邦幫忙

DAY 19
2

30 天學會 Web 前端效能優化系列 第 19

[30 天學會 Web 前端效能優化] 19. CSS 會阻擋 Javascript 的執行

  • 分享至 

  • xImage
  •  

前面提到 Javascript 會阻擋 DOM 的建構,很神奇的是,CSS 會阻擋 Javascript 的執行。讓我們繼續以前例說明(不過增加了一段 jQuery)。

  <link href="layout.css" rel="stylesheet" type="text/css" />
  <script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
  <script src="script.js" />


  <p id="first">Hello this is a test page.</p>

CSS file 的內容:

p {
  color: red;
}

JS file 的內容:

$(document).ready(function(){
  $("#first").css("color","blue");
});

假設兩個 JS file 都抵達了,然而 CSS file 還沒到的話,瀏覽器一樣只能傻傻等待,為什麼呢?各位仔細看就會發現第二個 JS 修改了 id=first 的 p tag 的 CSS 屬性,原本 CSS 裡面設定它的文字顏色是紅色,後來被 JS 改成藍色。這一段 JS 很單純,但會操作 CSSOM ,瀏覽器還沒抓完 CSS 自然無法建構 CSSOM , CSSOM 都還沒建好,JS 怎麼可能操作它呢?

看到這邊你有沒有發現 HTML 、 Javascript 以及 CSS 三者間微妙的關係了呢?

  1. Javascript 會阻擋 DOM 的建構
  2. CSS 會阻擋 Javascript 的執行
  3. CSS 會影響頁面的 Rendering

上面第二、第三點加起來,更加凸顯讓瀏覽器盡快取得 CSS file 的重要性。


上一篇
[30 天學會 Web 前端效能優化] 18. Javascript 會阻擋 DOM Construction 的進行
下一篇
[30 天學會 Web 前端效能優化] 20. 瀏覽器 Pre-loader 的功用
系列文
30 天學會 Web 前端效能優化30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
jasper
iT邦新手 3 級 ‧ 2014-10-06 08:59:22

你的 p 沒有文章說的 id=first XD

&lt;pre class="c" name="code">


  &lt;link href="layout.css" rel="stylesheet" type="text/css" />
  &lt;script src="http://code.jquery.com/jquery-1.11.0.min.js">&lt;/script>
  &lt;script src="script.js" />


  &lt;p id="first">Hello this is a test page.&lt;/p>
0
kevin3372000
iT邦新手 3 級 ‧ 2014-10-06 11:11:46

Thanks !!!

0
Pymaster
iT邦新手 5 級 ‧ 2014-11-30 21:51:32

你好,我有點問題想請教。

文中提到的「瀏覽器一樣只能傻傻等待」以及「CSSOM 都還沒建好,JS 怎麼可能操作它呢」,
實際上發生這樣的情況,如上述的 JavaScript 執行之後會發生什麼事?

&lt;pre class="c" name="code">
$(document).ready(function(){
  $("#first").css("color","blue");
});

我本來一直以為 CSSOM 跟 DOM 裡的 CSS 操作是分開的,理論上上述程式碼應該也只會動到 DOM 而已?改變 HTML 為

&lt;pre class="c" name="code">
&lt;p id="first" style="color: blue;">Hello this is a test page.&lt;/p>

我要留言

立即登入留言