第33篇

一、CommonJS中的require/exports和ES6中的import/export的區別css

CommonJS模塊的重要特性是加載時執行,即腳本代碼在require的時候,就會所有執行。一旦出現某個模塊被「循環加載」,es6

就只輸出已經執行的部分,還未執行的部分不會輸出。算法

ES6模塊是動態引用,若是使用import從一個模塊加載變量,那些變量不會被緩存,而是成爲一個指向被加載模塊的引用瀏覽器

,須要開發者本身保證,真正取值的時候可以取到值。緩存

 

import/exports最終都是編譯爲require/exports來執行的,commonJS規定,每一個模塊內部,module變量表明當前模塊,安全

這個變量是一個對象,它的exports屬性(即module.exports)使對外的接口。加載某個模塊實際上是加載該模塊module.exports性能優化

屬性。export命令規定的是對外的接口,必須與模塊內部的變量創建一一對應關係。dom

 

二、項目作過那些性能優化?異步

減小HTTP請求數async

減小DNS查詢

使用CDN

避免重定向

圖片懶加載

減小DOM元素數量

減小DOM操做

使用外部Javascript和css

壓縮Javascript、css、字體、圖片等

使用CSS Sprite

使用iconfont

字體剪裁

多域名分發分容到不一樣域名

儘可能減小iframe使用

把樣式放置在頭部

把腳本放置在頁面底部

 

三、js異步加載的方式

渲染引擎遇到script標籤會停下來,等到執行完腳本,繼續向下渲染。

defer是「渲染完再執行」,async是「下載完就執行「

defer若是有多個腳本,會按照在頁面中出現的順序加載,

多個async腳本不能保證加載順序

加載es6模塊的時候設置type=module,

異步加載不會形成阻塞瀏覽器,頁面渲染完再執行,能夠同時加上async屬性

異步執行腳本(利用頂層的this等於undefined這個語法點),能夠偵測當前代碼是否在ES6模塊之中

 

四、gei和post通信的區別?

Get請求能緩存,Post不能。

Post相對Get安全一點點,由於Get請求都包含在URL裏,且會被瀏覽器保存歷史記錄,

post不會,可是在抓包的狀況下都是同樣的。

post能夠經過request body來傳輸比get更多的數據,get沒有這個數據

url長度有限制,會影響get請求,可是這個長度限制是瀏覽器規定的,post支持更多的編碼類型且不對數據類型限制

 

五、爲何虛擬dom會提升性能?

虛擬dom至關於在js和真實dom中間加了一個緩存,利用dom diff算法避免了沒有必要的dom操做,從而提升性能。

用Javascript對象結構表示DOM樹的解構,而後用這個樹構建一個真正的DOM樹,插到文檔當中,當狀態變動的時候,從新構造一棵新的對象樹,

而後用新的樹和舊的樹進行比較,記錄2棵樹的差別,,把記錄的差別應用到前面所構建的真正的DOM樹上,視圖就更新了。

相關文章
相關標籤/搜索