嫩草影院久久99_老司机午夜网站国内精品久久久久久久久_久久夜色精品国产_国产一级做a爰片久久毛片

高性能Javascript讀書總結

2020-5-6    前端達人

1. 加載和執行

盡量將所有的<script>標簽放在</body>標簽之前,確保腳本執行前頁面已經完成了渲染,避免腳本的下載阻塞其他資源(例如圖片)的下載。

合并腳本,減少頁面中的<script>標簽

使用<script>標簽的defer和async屬性(兩者的區別見這里)

通過Javascript動態創建<script>標簽插入文檔來下載,其不會影響頁面其他進程

2.數據存取

由于作用域鏈的機制,訪問局部變量比訪問跨作用域變量更快,因此在函數中若要多次訪問跨作用域變量,則可以用局部變量保存。

避免使用with語句,其會延長作用域鏈

嵌套的對象成員會導致引擎搜索所有對象成員,避免使用嵌套,例如window.location.href

對象的屬性和方法在原型鏈的位置越深,訪問的速度也越慢

3.Dom編程

進行大段HTML更新時,推薦使用innerHTML,而不是DOM方法

HTML集合是一個與文檔中元素綁定的類數組對象,其長度隨著文檔中元素的增減而動態變化,因此避免在每次循環中直接讀取HTML集合的length,容易導致死循環

使用節點的children屬性,而不是childNodes屬性,前者訪問速度更快,且不包含空白文本和注釋節點。

瀏覽器的渲染過程包括構建DOM樹和渲染樹,當DOM元素的幾何屬性變化時,需要重新構造渲染樹,這一過程稱為“重排”,完成重排后,瀏覽器會重新繪制受影響的部分到屏幕中,這一過程稱為“重繪”。因此應該盡量合并多次對DOM的修改,或者先將元素脫離文檔流(display:none、文檔片段),應用修改后,再插入文檔中。

每次瀏覽器的重排時都會產生消耗,大多數瀏覽器會通過隊列化修改并批量執行來優化重排過程,可當訪問元素offsetTop、scrollTop、clientTop、getComputedStyle等一系列布局屬性時,會強制瀏覽器立即進行重排返回正確的值。因此不要在dom布局信息改變時,訪問這些布局屬性。

當修改同個元素多個Css屬性時,可以使用CssText屬性進行一次性修改樣式,減少瀏覽器重排和重繪的次數

當元素發生動畫時,可以使用絕對定位使其脫離文檔流,動畫結束后,再恢復定位。避免動畫過程中瀏覽器反復重排文檔流中的元素。

多使用事件委托,減少監聽事件

4.算法和流程控制

for循環和while循環性能差不多,除了for-in循環最慢(其要遍歷原型鏈)

循環中要減少對象成員及數組項的查詢次數,可以通過倒序循環提高性能

循環次數大于1000時,可運用Duff Devices減少迭代次數

switch比if-else快,但如果具有很多離散值時,可使用數組或對象來構建查找表

遞歸可能會造成調用棧溢出,可將其改為循環迭代

如果可以,對一些函數的計算結果進行緩存

5.字符串和正則表達式

進行大量字符串的連接時,+和+=效率比數組的join方法要高

當創建了一個正則表達式對象時,瀏覽器會驗證你的表達式,然后將其轉化為一個原生代碼程序,用戶執行匹配工作。當你將其賦值給變量時,可以避免重復執行該步驟。

當正則進入使用狀態時,首先要確定目標字符串的起始搜索位置(字符串的起始位置或正則表達式的lastIndex屬性),之后正則表達式會逐個檢查文本和正則模式,當一個特定的字元匹配失敗時,正則表達式會試著回溯到之前嘗試匹配的位置,然后嘗試其他路徑。如果正則表達式所有的可能路徑都沒有匹配到,其會將起始搜索位置下移一位,重新開始檢查。如果字符串的每個字符都經歷過檢查,沒有匹配成功,則宣布徹底失敗。

當正則表達式不那么具體時,例如.和[\s\S]等,很可能會出現回溯失控的情況,在js中可以應用預查模擬原子組(?=(pattern))\1來避免不必要的回溯。除此之外,嵌套的量詞,例如/(A+A+)+B/在匹配"AAAAAAAA"時可能會造成驚人的回溯,應盡量避免使用嵌套的量詞或使用預查模擬原子組消除回溯問題。

將復雜的正則表達式拆分為多個簡單的片段、正則以簡單、必需的字元開始、減少分支數量|,有助于提高匹配的效率。

6.快速響應的用戶界面

  • 單個JavaScript運算操作時間不應該超出100ms,否則可能會阻塞用戶操作
  • 如果要執行長時間的運算,可以通過定時器將計算過程分割成多個步驟,使UI可以得到更新,例如
setTimeout(function(){
    process(todo.shift());

    if (todo.length > 0) {
        setTimeout(arguments.callee, 25);
    } else {
        callback();
    }
})




較長時間的計算過程也可以按照代碼運行的時間進行分割,每次控制運行的時間,例如

setTimeout(function(){
    let start = +new Date();
    do {
        process(todo.shift());
    } while(todo.length > 0 && (+new Date() - start) < 50)

    if (todo.length > 0) {
        setTimeout(arguments.callee, 25);
    } else {
        callback();
    }
})


  • 高頻率重復的定時器數量盡量要少,建議使用一個獨立的重復定時器
  • 使用WebWork進行計算

7. AJAX

  • 設置HTTP頭部信息進行緩存,例如
Expires: Mon,28 Jul 2018 23:30:30 GMT


  • 對于一些函數的計算結果進行本地緩存

8. 編程實踐

  • 避免使用evalFunction進行雙重求值
  • 使用Object/Array字面量定義,不要使用構造函數
  • 使用延遲加載消除函數中重復的工作
  • 使用位操作,例如與1進行按位與計算,得到奇偶交替


if (i & 1) {
    className = 'odd';
} else {
    className = 'even';
}   


  • 多使用JS內置的原生方法,例如Math對象等

9.構建和部署

  • 合并、壓縮多個js文件
  • 設置HTTP緩存
  • 使用內容分發網絡CDN

10.性能分析工具

————————————————
版權聲明:本文為CSDN博主「PAT-python-zjw」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/zjw_python/java/article/details/105293878

日歷

鏈接

個人資料

藍藍設計的小編 http://m.sdgs6788.com

存檔

嫩草影院久久99_老司机午夜网站国内精品久久久久久久久_久久夜色精品国产_国产一级做a爰片久久毛片
<em id="09ttv"></em>
    <sup id="09ttv"><pre id="09ttv"></pre></sup>
    <dd id="09ttv"></dd>

        • 亚洲永久免费精品| 一区二区三区免费观看| 欧美高清视频在线| 久久久噜噜噜久久狠狠50岁| 久久av老司机精品网站导航| 久久国产精品黑丝| 久久九九久久九九| 男女精品视频| 欧美日韩一区二区国产| 国产精品久久久久久亚洲毛片 | 久久综合影音| 欧美激情一区二区三区蜜桃视频| 亚洲黄色免费网站| 亚洲精品久久在线| 亚洲曰本av电影| 久久久www| 欧美日韩亚洲视频一区| 国产欧美日韩另类视频免费观看| 亚洲电影免费在线观看| 亚洲伊人观看| 久热re这里精品视频在线6| 亚洲福利视频一区二区| 一区二区三区四区五区精品| 亚洲欧美日韩另类| 麻豆视频一区二区| 国产九区一区在线| 亚洲人体偷拍| 欧美一区二区三区在线看 | 国产精品无人区| 亚洲电影免费在线观看| 亚洲欧美在线x视频| 欧美激情一区二区三区在线| 亚洲一区二区在线| 欧美精品在线极品| 在线观看日韩av电影| 亚洲欧美综合精品久久成人| 免费成人高清在线视频| 亚洲欧美视频在线观看| 欧美日韩国产在线播放网站| 狠狠色狠狠色综合日日小说| 亚洲视频香蕉人妖| 亚洲第一主播视频| 久久精品成人欧美大片古装| 国产精品免费网站| 夜夜嗨av一区二区三区网页| 欧美jizz19性欧美| 久久国内精品自在自线400部| 欧美三级网址| 亚洲国内精品| 久久中文字幕一区| 亚洲欧美激情视频在线观看一区二区三区| 欧美顶级大胆免费视频| 在线观看精品一区| 久久亚洲精品一区二区| 午夜在线一区| 国产美女一区| 亚洲欧美第一页| 一区二区三区国产在线观看| 美女免费视频一区| 亚洲成人原创| 亚洲成人在线视频播放 | 久久激情婷婷| 亚洲欧美日韩精品久久久久| 亚洲国产精品一区制服丝袜| 久久精品亚洲精品| 国产一区日韩一区| 久久在线精品| 久久人人爽国产| 1024精品一区二区三区| 麻豆精品91| 欧美成人精品高清在线播放| 亚洲精品裸体| 亚洲欧洲日产国产综合网| 欧美精品一区二区三区视频| 在线一区观看| 性色av一区二区三区在线观看| 国产欧美精品一区二区色综合| 欧美制服丝袜| 久久亚洲视频| 亚洲国产欧美一区| 亚洲欧洲日产国产网站| 国产精品久久久久91| 欧美在线观看一区| 久久婷婷麻豆| 在线一区免费观看| 亚洲欧美日韩精品久久| 欲香欲色天天天综合和网| 亚洲国产裸拍裸体视频在线观看乱了中文 | 亚洲欧美视频在线| 久久精品成人| 99精品国产在热久久| av不卡免费看| 国产自产v一区二区三区c| 欧美电影在线观看完整版| 欧美精品久久天天躁| 亚洲欧美综合网| 老司机精品视频网站| 一区二区三区欧美在线观看| 亚洲欧美久久久久一区二区三区| 激情久久一区| 一区二区激情视频| 亚洲福利久久| 午夜精品美女自拍福到在线 | 久久亚洲精品中文字幕冲田杏梨 | 欧美激情中文不卡| 国产精品区一区二区三区| 欧美国产免费| 国产一区二区按摩在线观看| 亚洲精品影视| 亚洲国产高清aⅴ视频| 亚洲一区制服诱惑| 99re视频这里只有精品| 久久久久久九九九九| 亚洲欧美日韩高清| 欧美日本中文字幕| 免费一区二区三区| 国产自产在线视频一区| 中文在线不卡| 一本色道久久综合亚洲精品不| 久久―日本道色综合久久| 久久aⅴ国产欧美74aaa| 欧美视频在线观看免费| 亚洲娇小video精品| 在线成人性视频| 欧美在线一区二区| 久久国产精品网站| 国产精品乱码妇女bbbb| 亚洲精品一区二区在线| 亚洲美女电影在线| 欧美电影在线免费观看网站| 欧美大片一区二区三区| 亚洲电影中文字幕| 久久久久久久波多野高潮日日| 欧美在线999| 国产精品普通话对白| 亚洲手机视频| 香蕉国产精品偷在线观看不卡 | 欧美日韩视频在线一区二区观看视频 | 亚洲精品久久嫩草网站秘色| 日韩一级网站| 欧美视频中文一区二区三区在线观看| 亚洲黄色av一区| 一区二区电影免费在线观看| 欧美人与性动交cc0o| 亚洲三级影院| 亚洲一区日韩在线| 国产精品视频不卡| 欧美一级午夜免费电影| 久久精品夜夜夜夜久久| 国产香蕉久久精品综合网| 欧美在线视频导航| 美女图片一区二区| 亚洲国产精品电影| 欧美精品国产| 亚洲午夜精品福利| 久久色在线播放| 亚洲区一区二区三区| 欧美日韩国产一级片| 99精品久久久| 久久精品国产一区二区三| 极品日韩久久| 欧美国产精品中文字幕| 亚洲伦伦在线| 久久精品亚洲一区| 91久久线看在观草草青青| 欧美性猛交99久久久久99按摩| 亚洲欧美中文在线视频| 欧美激情视频免费观看| 99日韩精品| 国产亚洲午夜| 欧美精品久久一区| 欧美在线观看日本一区| 亚洲激情网站| 久久久国产视频91| 日韩一级片网址| 久久本道综合色狠狠五月| 亚洲精品久久久久久久久久久| 欧美在线播放视频| aa级大片欧美三级| 国产在线一区二区三区四区| 你懂的亚洲视频| 午夜精品美女久久久久av福利| 欧美激情va永久在线播放| 午夜精品免费在线| 亚洲美女视频在线免费观看| 国产精品社区| 欧美日韩高清区| 久久综合久久久| 亚洲欧美在线另类| 一区二区欧美日韩视频| 欧美99在线视频观看| 香蕉av777xxx色综合一区| 日韩一级在线| 91久久久久久久久久久久久| 国产在线播精品第三| 国产精品久久久久久久免费软件| 免费看亚洲片| 久久久久久久久综合| 欧美一区二区在线观看| 中文精品99久久国产香蕉|