首頁  >  文章  >  web前端  >  JavaScript的理解與用法

JavaScript的理解與用法

零下一度
零下一度原創
2017-06-26 11:25:151053瀏覽

(1)什麼是JavaScript?

JavaScript是一種專為與網頁互動而設計的腳本語言,由三個部分組成:( 1).ECMAScript :提供核心語言功能。 (2).文件物件模型(DOM):提供存取與操作網頁內容的方法與介面(3).瀏覽器物件模型(BOM):提供與瀏覽器的互動的方法與介面

(2)HTML 程式碼執行情況

##(

現代瀏覽器原理)

  
作者:錢多多
連結:
來源:知乎
著作權歸作者所有。商業轉載請聯絡作者授權,非商業轉載請註明出處。


1. html下載與執行是同步的嗎?

結論:分情況。

html執行這個描述不準確,所謂的執行包括parseHTML、layout、paint幾個階段。 download、parseHTML/parseCSS/executeJS、layout、paint都在不同流程。

parseHTML/parseCSS並行,共同完成後layout產生渲染樹,進而paint渲染。執行JS會重新回到layout階段。


A.如果網速夠快,內容很快傳送完畢,那parse+layout+paint會靠後執行。

B.如果弱網環境下,針對網速很慢的情況現代瀏覽器是有優化的,會嘗試提前渲染已收到的內容,也就造成了pc上會看到頁面一塊一塊展現的狀況。

C.chunk原理類似,每個chunk斷點都有可能觸發解析渲染。

D.有些瀏覽器也會做首屏優化,下載過程中不斷嘗試parse+layout,如果layout計算出內容超過首屏就paint這些內容,讓用戶優先看到首屏內容。

大部分過程因為是並行的,會相對複雜,分情況討論意義不大,不如從原理上理解。


2. css檔的下載和渲染是同步的嗎? 還是先下載完, 再渲染?

不確定下載過程中是否同步做詞法分析parseCss,但是可能性很大,畢竟是種無損失的優化方案,

但是最終肯定需要下載完再layout生成渲染樹,進而渲染。


3. css檔的下載&執行 和 html檔的下載&執行同步嗎?

並行的。但是要注意一些限制,例如一個網域下最大並發6個請求,再多就得串行。


4. 圖形的載入 和 html檔的下載/執行同步嗎, 音視頻呢, 別的資源呢?

同上。


5. js檔案的下載&執行與html檔案的下載&執行同步還是非同步?如果帶有async和defer呢?

下載,但不executeJS


6. 有沒有可能出現html檔/圖片/css檔/js檔同時下載的情況?

常態。


7.有沒有可能出現html/css檔案/js檔案同時執行的情況?

你讀了上面文章就能理解了:html parse和css parse是並行的,兩者完成後才會layout、paint,新的css掛載會延遲layout、paint。 js parse會阻塞html parse ,所以後面的layout、paint一定不會同時執行。

(3).在html 中使用JavaScript

3.1<script>元素<strong></strong></p><script>元素的六個屬性:<p></p>  1. async:非同步載入屬性,可選。只對外部腳本有效,表示立即下載腳本,但不妨礙頁面<p></p>           的其他操作。 <p></p>  2. charset:字元編碼屬性,可選。預設是utf-8編碼,主要表示透過src屬性指定的<p></p>            代碼的字元集,而大多數瀏覽器會忽略它的值,所以不必使用。 <p></p>  3.defer:腳本延遲屬性,可選。用來延遲腳本的執行時間,直到HTML文件已經全<p></p>         部在解析及顯示後執行,且只對外部腳本文件有效。 <p></p>  4.language:腳本類型屬性,不是標準組成的一部分,<p>已廢棄<span style="background-color: #ff0000;">。大多數瀏覽器</span></p>              則會忽略此屬性,且已沒必要使用。 <p></p>  5.src:連結外部檔案屬性,可選。表示包含要執行程式碼的外部檔案。請注意,<p></p>        一旦設定src屬性,script元素中所寫的JavaScript程式碼就可能無效。 <p></p>  6. type:腳本類型屬性,必須。預設值為text/javascript可以看成language<p></p>          的替代屬性,以表示編寫程式碼所使用的內容類型(也稱為mime類型)。 <p></p> <p>注意事項:程式碼中的任何地方都不要出現</script>

#3.2 標籤位置