• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    trycatch對代碼運行的性能影響_html/css

    來源:懂視網(wǎng) 責編:小采 時間:2020-11-27 16:40:54
    文檔

    trycatch對代碼運行的性能影響_html/css

    trycatch對代碼運行的性能影響_html/css_WEB-ITnose:起因 要捕獲 JavaScript 代碼中的異常一般會采用 try catch,不過 try catch 的使用是否是對代碼性能產(chǎn)生影響呢?答案是肯定有的,但是有多少不得而知。 前端線上腳本錯誤的捕獲方法: window . JSTracker = window . JSTracker
    推薦度:
    導(dǎo)讀trycatch對代碼運行的性能影響_html/css_WEB-ITnose:起因 要捕獲 JavaScript 代碼中的異常一般會采用 try catch,不過 try catch 的使用是否是對代碼性能產(chǎn)生影響呢?答案是肯定有的,但是有多少不得而知。 前端線上腳本錯誤的捕獲方法: window . JSTracker = window . JSTracker

    起因

    要捕獲 JavaScript 代碼中的異常一般會采用 try catch,不過 try catch 的使用是否是對代碼性能產(chǎn)生影響呢?答案是肯定有的,但是有多少不得而知。

    前端線上腳本錯誤的捕獲方法:

    window . JSTracker = window . JSTracker || [ ] ;

    try {

    //your code

    } catch ( e ) {

    JSTracker . push ( e ) ;

    throw e ; //建議將錯誤再次拋出,避免測試無法發(fā)現(xiàn)異常

    }

    設(shè)計實驗方式

    簡單的設(shè)計方案也就是對比實驗。

    空白組1:[無 try catch 的情況下對數(shù)據(jù)取模1千萬次耗時]

    < ! DOCTYPE html >

    < html >

    < head >

    < title > 1無 try catch的情況耗時 < / title >

    //無try catch的情況耗時

    var t = new Date ( ) ;

    //耗時代碼開始

    for ( var i = 0 ; i < 100000000 ; i ++ ) {

    var p = i % 2 ;

    }

    //耗時代碼結(jié)束

    document . write ( new Date ( ) – t ) ;

    } ( ) ;

    < / head >

    < body >

    < / body >

    < / html >

    參照組2:[將耗時代碼用 try 包圍,內(nèi)聯(lián)耗時代碼]

    < ! DOCTYPE html >

    < html >

    < head >

    < title > 2在 try中內(nèi)聯(lián)代碼的耗時情況 < / title >

    //在 try 中內(nèi)聯(lián)代碼的耗時情況

    var t = new Date ( ) ;

    try {

    //耗時代碼開始

    for ( var i = 0 ; i < 100000000 ; i ++ ) {

    var p = i % 2 ;

    }

    //耗時代碼結(jié)束

    throw new Error ( ) ;

    } catch ( e ) {

    }

    document . write ( new Date ( ) – t ) ;

    } ( ) ;

    < / head >

    < body >

    < / body >

    < / html >

    參照組3:[將耗時代碼用 try 包圍,外聯(lián)耗時代碼]

    < ! DOCTYPE html >

    < html >

    < head >

    < title > 3在 try中內(nèi)聯(lián)代碼的耗時情況 < / title >

    function run ( ) {

    //耗時代碼開始

    for ( var i = 0 ; i < 100000000 ; i ++ ) {

    var p = i % 2 ;

    }

    //耗時代碼結(jié)束

    }

    //在 try 中內(nèi)聯(lián)代碼的耗時情況

    var t = new Date ( ) ;

    try {

    run ( ) ;

    throw new Error ( ) ;

    } catch ( e ) {

    }

    document . write ( new Date ( ) – t ) ;

    } ( ) ;

    < / head >

    < body >

    < / body >

    < / html >

    參照組4:[將耗時代碼用 catch 包圍,內(nèi)聯(lián)耗時代碼]

    < ! DOCTYPE html >

    < html >

    < head >

    < title > 4在 catch中內(nèi)聯(lián)代碼的耗時情況 < / title >

    //在 catch 中內(nèi)聯(lián)代碼的耗時情況

    var t = new Date ( ) ;

    try {

    throw new Error ( ) ;

    } catch ( e ) {

    //耗時代碼開始

    for ( var i = 0 ; i < 100000000 ; i ++ ) {

    var p = i % 2 ;

    }

    //耗時代碼結(jié)束

    }

    document . write ( new Date ( ) – t ) ;

    } ( ) ;

    < / head >

    < body >

    < / body >

    < / html >

    參照組5:[將耗時代碼用 catch 包圍,外聯(lián)耗時代碼]

    < ! DOCTYPE html >

    < html >

    < head >

    < title > 5在 catch中內(nèi)聯(lián)代碼的耗時情況 < / title >

    function run ( ) {

    //耗時代碼開始

    for ( var i = 0 ; i < 100000000 ; i ++ ) {

    var p = i % 2 ;

    }

    //耗時代碼結(jié)束

    }

    //在 catch 中內(nèi)聯(lián)代碼的耗時情況

    var t = new Date ( ) ;

    try {

    throw new Error ( ) ;

    } catch ( e ) {

    run ( ) ;

    }

    document . write ( new Date ( ) – t ) ;

    } ( ) ;

    < / head >

    < body >

    < / body >

    < / html >

    運行結(jié)果(只選取了 Chrome 作為示例)

    不使用 try-catch try 中耗時,內(nèi)聯(lián)代碼 try 中耗時,外聯(lián)代碼 catch 中耗時,內(nèi)聯(lián)代碼 catch 中耗時,外聯(lián)代碼
    Chrome51 98.2 1026.9 107.7 1028.5 105.9

    給出總結(jié)

  • 使用 try catch 的使用無論是在 try 中的代碼還是在 catch 中的代碼性能消耗都是一樣的。

  • 需要注意的性能消耗在于 try catch 中不要直接塞進去太多的代碼(聲明太多的變量),最好是吧所有要執(zhí)行的代碼放在另一個 function 中,通過調(diào)用這個 function 來執(zhí)行。

  • 針對第二點,可以查看 ECMA 中關(guān)于 try catch 的解釋,在代碼進入 try catch 的時候 js引擎會拷貝當前的詞法環(huán)境,拷貝的其實就是當前 scope 下的所有的變量。

    建議

    在使用 try catch 的時候盡量把 try catch 放在一個相對干凈的 scope 中,同時在 try catch 語句中也盡量保證足夠少的變量,最好通過函數(shù)調(diào)用方式來 try catch。

    試驗中的現(xiàn)象解釋

    測試過程中還是發(fā)現(xiàn)了一個疑問, 以下兩段代碼在 Chrome 44 中運行出來的結(jié)果差距非常大,加了一句空的 try catch 之后平均為:850ms,加上之前為:140ms。

    ! function ( ) {

    //無 try catch 的情況耗時

    var t = new Date ( ) ;

    //耗時代碼開始

    for ( var i = 0 ; i < 100000000 ; i ++ ) {

    var p = i % 2 ;

    }

    //耗時代碼結(jié)束

    document . write ( new Date ( ) – t ) ;

    try {

    } catch ( e ) {

    }

    } ( ) ;

    ! function ( ) {

    //無 try catch 的情況耗時

    var t = new Date ( ) ;

    //耗時代碼開始

    for ( var i = 0 ; i < 100000000 ; i ++ ) {

    var p = i % 2 ;

    }

    //耗時代碼結(jié)束

    document . write ( new Date ( ) – t ) ;

    } ( ) ;

    其實原因很簡單

    只要把代碼改為這樣 耗時就降下來了:

    ! function ( ) {

    ! function ( ) {

    //無 try catch 的情況耗時

    var t = new Date ( ) ;

    //耗時代碼開始

    for ( var i = 0 ; i < 100000000 ; i ++ ) {

    var p = i % 2 ;

    }

    //耗時代碼結(jié)束

    document . write ( new Date ( ) – t ) ;

    } ( ) ;

    try {

    } catch ( e ) {

    }

    } ( ) ;

    聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    trycatch對代碼運行的性能影響_html/css

    trycatch對代碼運行的性能影響_html/css_WEB-ITnose:起因 要捕獲 JavaScript 代碼中的異常一般會采用 try catch,不過 try catch 的使用是否是對代碼性能產(chǎn)生影響呢?答案是肯定有的,但是有多少不得而知。 前端線上腳本錯誤的捕獲方法: window . JSTracker = window . JSTracker
    推薦度:
    標簽: it 代碼 html
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 亚洲午夜福利精品无码| 国产精品美女久久久| 国产AV午夜精品一区二区三区| 国产精品99久久久久久董美香| 久久精品国产亚洲AV嫖农村妇女| 国产精品狼人久久久久影院 | 国99精品无码一区二区三区| 婷婷久久精品国产| 狠狠精品久久久无码中文字幕 | 国产亚洲精品免费视频播放| 动漫精品专区一区二区三区不卡| 在线亚洲精品自拍| 久久精品国产99国产精品| 亚洲午夜久久久精品影院| 91精品国产福利尤物| 国产伦精品免编号公布| 亚洲国产精品va在线播放| 亚洲一区二区精品视频| 日韩精品视频在线观看免费| 久久精品成人影院| 精品一区二区三区色花堂| 99久久国产主播综合精品| 久久久精品一区二区三区| 538国产精品一区二区在线| 精品久久久久久中文字幕人妻最新| 亚洲日韩精品A∨片无码| 亚洲欧洲精品成人久久奇米网| 久久久国产精品| 精品视频一区二区三区| 久久www免费人成精品香蕉| 精品少妇一区二区三区在线| 欧美亚洲综合免费精品高清在线观看| 久久99精品国产99久久6| 欧美精品色精品一区二区三区| 欧美成人精品第一区二区三区| 日韩AV毛片精品久久久| 国内精品99亚洲免费高清| 国产精品亚洲综合一区| 国产在线观看高清精品| 精品国产呦系列在线观看免费 | 99久久人妻无码精品系列蜜桃 |