国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > JS > 正文

JS中用try catch對代碼運行的性能影響分析

2024-05-06 16:34:10
字體:
來源:轉載
供稿:網友

前言

之前一直沒有去研究try catch對代碼運行的性能影響,只是一直停留在了感覺上,正好最近開會交流學習的時候,有人提出了相關的問題。借著周末,正好研究一番。

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

window.JSTracker=window.JSTracker||[];try{//your code}catch(e){JSTracker.push(e);throwe;//建議將錯誤再次拋出,避免測試無法發現異常}

設計實驗方式

簡單的設計方案也就是對比實驗。

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

<!DOCTYPEhtml><html><head><title>1無trycatch的情況耗時</title><script>!function(){//無try catch的情況耗時vart=newDate();//耗時代碼開始for(vari=0;i<100000000;i++){varp=i%2;}//耗時代碼結束document.write(newDate()–t);}();</script></head><body></body></html>

參照組2:[將耗時代碼用 try 包圍,內聯耗時代碼]

<!DOCTYPEhtml><html><head><title>2在try中內聯代碼的耗時情況</title><script>!function(){//在 try 中內聯代碼的耗時情況vart=newDate();try{//耗時代碼開始for(vari=0;i<100000000;i++){varp=i%2;}//耗時代碼結束thrownewError();}catch(e){}document.write(newDate()–t);}();</script></head><body></body></html>

參照組3:[將耗時代碼用 try 包圍,外聯耗時代碼]

<!DOCTYPEhtml><html><head><title>3在try中內聯代碼的耗時情況</title><script>!function(){functionrun(){//耗時代碼開始for(vari=0;i<100000000;i++){varp=i%2;}//耗時代碼結束}//在 try 中內聯代碼的耗時情況vart=newDate();try{run();thrownewError();}catch(e){}document.write(newDate()–t);}();</script></head><body></body></html>

參照組4:[將耗時代碼用 catch 包圍,內聯耗時代碼]

<!DOCTYPEhtml><html><head><title>4在catch中內聯代碼的耗時情況</title><script>!function(){//在 catch 中內聯代碼的耗時情況vart=newDate();try{thrownewError();}catch(e){//耗時代碼開始for(vari=0;i<100000000;i++){varp=i%2;}//耗時代碼結束}document.write(newDate()–t);}();</script></head><body></body></html>

參照組5:[將耗時代碼用 catch 包圍,外聯耗時代碼]

<!DOCTYPEhtml><html><head><title>5在catch中內聯代碼的耗時情況</title><script>!function(){functionrun(){//耗時代碼開始for(vari=0;i<100000000;i++){varp=i%2;}//耗時代碼結束}//在 catch 中內聯代碼的耗時情況vart=newDate();try{thrownewError();}catch(e){run();}document.write(newDate()–t);}();</script></head><body></body></html>

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

不使用 TRY-CATCH TRY 中耗時,內聯代碼 TRY 中耗時,外聯代碼 CATCH 中耗時,內聯代碼 CATCH 中耗時,外聯代碼
Chrome51 98.2 1026.9 107.7 1028.5 105.9

給出總結

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

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

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

建議

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

試驗中的現象解釋

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

!function(){//無 try catch 的情況耗時vart=newDate();//耗時代碼開始for(vari=0;i<100000000;i++){varp=i%2;}//耗時代碼結束document.write(newDate()–t);try{}catch(e){}}();!function(){//無 try catch 的情況耗時vart=newDate();//耗時代碼開始for(vari=0;i<100000000;i++){varp=i%2;}//耗時代碼結束document.write(newDate()–t);}();

其實原因很簡單

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

!function(){!function(){//無 try catch 的情況耗時vart=newDate();//耗時代碼開始for(vari=0;i<100000000;i++){varp=i%2;}//耗時代碼結束document.write(newDate()–t);}();try{}catch(e){}}();

總結

以上就是關于使用try catch對代碼運行性能影響的全部內容,希望本文的內容對大家學習或者使用Javascript能帶來一定的幫助,如果有疑問大家可以留言交流。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 通道| 轮台县| 兴义市| 伊吾县| 依安县| 普定县| 揭阳市| 和平县| 阿荣旗| 楚雄市| 敦煌市| 都昌县| 金坛市| 古浪县| 景德镇市| 建德市| 如皋市| 土默特左旗| 弥渡县| 吴江市| 定边县| 永登县| 郑州市| 依兰县| 临泉县| 霍城县| 通化县| 诏安县| 且末县| 南阳市| 涡阳县| 鹤庆县| 磐石市| 东安县| 清原| 垫江县| 枣强县| 简阳市| 竹溪县| 林西县| 内江市|