簡單介紹 JavaScript的發(fā)展歷史
- 1990年底屋确,歐洲核能研究組織(CERN)科學(xué)家Tim Berners-Lee贮勃,發(fā)明了萬維網(wǎng)(World Wide Web)忆矛,從此可以在網(wǎng)上瀏覽網(wǎng)頁文件舌剂。最早的網(wǎng)頁只能在操作系統(tǒng)的終端里瀏覽气破,也就是說只能使用命令行操作聊浅,網(wǎng)頁都是在字符窗口中顯示,非常不方便现使。
- 1992年底低匙,美國國家超級電腦應(yīng)用中心(NCSA)開始開發(fā)一個獨立的瀏覽器,叫做Mosaic朴下。這是人類歷史上第一個瀏覽器努咐,從此網(wǎng)頁可以在圖形界面的窗口瀏覽。
- 1994年10月殴胧,NCSA的一個主要程序員Marc Andreessen聯(lián)合風(fēng)險投資家Jim Clark渗稍,成立了Mosaic通信公司(Mosaic Communications)佩迟,不久后改名為Netscape。這家公司的方向竿屹,就是在Mosaic的基礎(chǔ)上报强,開發(fā)面向普通用戶的新一代的瀏覽器Netscape Navigator。
- Netscape公司很快發(fā)現(xiàn)拱燃,Navigator瀏覽器需要一種可以嵌入網(wǎng)頁的腳本語言秉溉,用來控制瀏覽器行為。1995年碗誉,Netscape公司雇傭了程序員Brendan Eich開發(fā)這種網(wǎng)頁腳本語言召嘶。5月,Brendan Eich只用了10天哮缺,就設(shè)計完成了這種語言的第一版弄跌。它是一個大雜燴,語法有多個來源尝苇。
- Netscape公司與Sun公司(Java語言的發(fā)明者和所有者)達成協(xié)議铛只,后者允許將這種語言叫做JavaScript。這樣一來糠溜,Netscape公司可以借助Java語言的聲勢淳玩,而Sun公司則將自己的影響力擴展到了瀏覽器。
- 1996年3月非竿,Navigator 2.0瀏覽器正式內(nèi)置了JavaScript腳本語言蜕着。
- 1996年8月,微軟模仿JavaScript開發(fā)了一種相近的語言汽馋,取名為JScript侮东。Netscape公司面臨喪失瀏覽器腳本語言的主導(dǎo)權(quán)的局面。
- 1996年11月豹芯,Netscape公司決定將JavaScript提交給國際標準化組織ECMA,希望JavaScript能夠成為國際標準驱敲,以此抵抗微軟铁蹈。
- 1997年7月,ECMA組織發(fā)布262號標準文件(ECMA-262)的第一版众眨,規(guī)定了瀏覽器腳本語言的標準握牧,并將這種語言稱為ECMAScript。ECMAScript和JavaScript的關(guān)系是娩梨,前者是后者的規(guī)格沿腰,后者是前者的一種實現(xiàn)。在日常場合狈定,這兩個詞是可以互換的颂龙。ECMAScript只用來標準化JavaScript這種語言的基本語法結(jié)構(gòu)习蓬,與部署環(huán)境相關(guān)的標準都由其他標準規(guī)定。
- 1997年7月措嵌,ECMAScript 1.0發(fā)布躲叼。
- 1998年6月,ECMAScript 2.0版發(fā)布企巢。
- 1999年12月枫慷,ECMAScript 3.0版發(fā)布,成為JavaScript的通行標準浪规,得到了廣泛支持或听。
- 2007年10月,ECMAScript 4.0版草案發(fā)布笋婿,對3.0版做了大幅升級神帅,預(yù)計次年8月發(fā)布正式版本。草案發(fā)布后萌抵,由于4.0版的目標過于激進找御,各方對于是否通過這個標準,發(fā)生了嚴重分歧绍填。2008年7月霎桅,由于對于下一個版本應(yīng)該包括哪些功能,各方分歧太大讨永,爭論過于激進滔驶,ECMA開會決定,中止ECMAScript 4.0的開發(fā)(即廢除了這個版本)卿闹,將其中涉及現(xiàn)有功能改善的一小部分揭糕,發(fā)布為ECMAScript 3.1,而將其他激進的設(shè)想擴大范圍锻霎,放入以后的版本著角。會后不久,ECMAScript 3.1就改名為ECMAScript 5旋恼。
- 2009年12月吏口,ECMAScript 5.0版正式發(fā)布。
- 2011年6月冰更,ECMAscript 5.1版發(fā)布产徊,并且成為ISO國際標準(ISO/IEC 16262:2011)。到了2012年底蜀细,所有主要瀏覽器都支持ECMAScript 5.1版的全部功能舟铜。
- 2013年3月,ECMAScript 6草案凍結(jié)奠衔,不再添加新功能谆刨。新的功能設(shè)想將被放到ECMAScript 7塘娶。
- 2013年12月,ECMAScript 6草案發(fā)布痴荐。然后是12個月的討論期血柳,聽取各方反饋。
- 2015年6月生兆,ECMAScript 6正式發(fā)布难捌,并且更名為“ECMAScript 2015”。下一個版本在2016年發(fā)布鸦难,稱為“ECMAScript 2016”根吁。
簡述頁面的渲染機制
- 解析 HTML 標簽, 構(gòu)建 DOM 樹
- 解析 CSS 標簽, 構(gòu)建 CSSOM 樹
- 把 DOM 和 CSSOM 組合成 渲染樹 (render tree)
- 在渲染樹的基礎(chǔ)上進行布局, 計算每個節(jié)點的幾何結(jié)構(gòu)
-
把每個節(jié)點繪制到屏幕上 (painting)
樣式、JS 在 HTML 中如何放置?
- 使用 link 標簽將樣式表放在頂部
- 將JS放在底部
1.腳本會阻塞后面內(nèi)容的呈現(xiàn)
2.腳本會阻塞其后組件的下載
解釋白屏和 FOUC
- 白屏是由于把script標簽放在了head頭部進行加載合蔽,由于script標簽的特性會阻礙其他文件加載击敌,必須等待腳本加載完畢,其他資源才能進行加載顯示拴事,應(yīng)該放在body的尾部進行加載避免白屏沃斤,把CSS文件放在底部同樣也會造成白屏,用@import也會刃宵。
- FOUC(flash of unstyled cotent)無樣式內(nèi)容閃爍:是由于把css的link標簽放在了HTML標簽后面衡瓶,那么瀏覽器就會先渲染到HTML標簽展示無樣式的標簽,等到加載到對應(yīng)的CSS樣式后牲证,會進行重繪哮针,回流,造成無樣式閃爍坦袍。
如何異步加載腳本
- 沒有 defer 或 async十厢,瀏覽器會立即加載并執(zhí)行指定的腳本,“立即”指的是在渲染該 script 標簽之下的文檔元素之前捂齐,也就是說不等待后續(xù)載入的文檔元素蛮放,讀到就加載并執(zhí)行。
- 有 async辛燥,加載和渲染后續(xù)文檔元素的過程將和 script.js 的加載與執(zhí)行并行進行(異步)筛武。
- 有 defer,加載后續(xù)文檔元素的過程將和 script.js 的加載并行進行(異步)挎塌,但 script.js 的執(zhí)行要在所有元素解析完成之后,DOMContentLoaded 事件觸發(fā)之前完成内边。