<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答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
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        JavaScript提升運行速度之循環(huán)篇譯文_javascript技巧

        來源:懂視網(wǎng) 責編:小采 時間:2020-11-27 20:43:58
        文檔

        JavaScript提升運行速度之循環(huán)篇譯文_javascript技巧

        JavaScript提升運行速度之循環(huán)篇譯文_javascript技巧:這篇著重講第一個原因。最后給出了一個開發(fā)模式,替換傳統(tǒng)的循環(huán)結(jié)構(gòu),可以完全避免腳本失控的狀況發(fā)生。 原文標題:Speed up your JavaScript, Part 1 原文作者:Nicholas C. Zakas 在我 上一篇帖子 (譯文 ) 中,談到了各個瀏覽器究竟會在什么情況下彈出
        推薦度:
        導讀JavaScript提升運行速度之循環(huán)篇譯文_javascript技巧:這篇著重講第一個原因。最后給出了一個開發(fā)模式,替換傳統(tǒng)的循環(huán)結(jié)構(gòu),可以完全避免腳本失控的狀況發(fā)生。 原文標題:Speed up your JavaScript, Part 1 原文作者:Nicholas C. Zakas 在我 上一篇帖子 (譯文 ) 中,談到了各個瀏覽器究竟會在什么情況下彈出

        這篇著重講第一個原因。最后給出了一個開發(fā)模式,替換傳統(tǒng)的循環(huán)結(jié)構(gòu),可以完全避免腳本失控的狀況發(fā)生。

        原文標題:Speed up your JavaScript, Part 1
        原文作者:Nicholas C. Zakas
        在我 上一篇帖子 (譯文 ) 中,談到了各個瀏覽器究竟會在什么情況下彈出腳本失控提示,對于Internet Explorer 來說,當瀏覽器執(zhí)行了數(shù)量過多的語句時就會停止執(zhí)行腳本,而其他的瀏覽器,則是持續(xù)執(zhí)行腳本超過一定時間的時候就會給出提示。而我們要探討的核心問題,不是這些瀏覽器如果探測失控的腳本,而是我們?nèi)绾尾趴梢宰屇_本運行的更快一些,從而避免這些警告 。
        腳本失控基本上有以下四個方面的原因:
        在循環(huán)中執(zhí)行了太多的操作。
        臃腫的函數(shù)體
        過多的遞歸
        過多的 DOM 調(diào)用
        在這篇帖子中,我將會把重點放到第一條上:循環(huán)中的過多操作。循環(huán)的操作是同步進行的,所以執(zhí)行一個循環(huán)所花費的時間完全取決于循環(huán)的次數(shù)。因此有 兩種情況會導致循環(huán)執(zhí)行的時間過長,并直接導致鎖定瀏覽器。一是循環(huán)體中包含了太多的操作,二是循環(huán)的次數(shù)過多。這兩種情況都能直接導致鎖定瀏覽器,并顯示腳本失控的提示。
        解決這個問題的訣竅就是用下面這兩個問題來評估每個循環(huán):
        這個循環(huán)必須要同步執(zhí)行么?
        循環(huán)里面的數(shù)據(jù),必須要按順序執(zhí)行么?
        如果兩個問題的答案都是否定的話,你就可以選擇將循環(huán) 里的操作進行分解。關(guān)鍵是要根據(jù)代碼的具體環(huán)境確定上面兩個問題的答案。一個典型的循環(huán)可能像下面這個樣子:
        代碼如下:
        for(var i=0; i < items.length; i++){
        process(items[i]);
        }

        乍一看這個循環(huán)并沒有太大的問題,是不是會運行很長時間完全取決于循環(huán)的次數(shù)。如果緊接循環(huán)后沒有其他代碼在執(zhí)行的時候需要依賴于循環(huán)的結(jié)果,那么 對于第一個問題的答案就是“ 不” 。你還可以發(fā)現(xiàn),循環(huán)每次只處理一個數(shù)值,而且不依賴于上一次循環(huán)的結(jié)果,所以對于第二個問題的答案同樣也是否定的。這就意味著,循環(huán)可以通過某種方式進行拆解,不會導致鎖定瀏覽器而顯示腳本失控的提示。
        在《Professional JavaScript, Second Edition 》這本書中,對于那些執(zhí)行次數(shù)非常巨大的虛幻,我推薦使用下面的方式來處理:
        代碼如下:
        function chunk(array, process, context){
        setTimeout(function(){
        var item = array.shift();
        process.call(context, item);
        if (array.length > 0){
        setTimeout(arguments.callee, 100);
        }
        }, 100);
        }

        chunk() 函數(shù)的用途就是將一個數(shù)組分成小塊處理(這也是名字的由來),我們可以傳遞三個參數(shù)。要處理的數(shù)組對象、處理函數(shù)以及一個可選的上下文變量,用于設(shè)置process() 函數(shù)中對應的this 對象。第一個timer 用于處理操作之間的延時(這里設(shè)置為100 毫秒,大家可以根據(jù)實際需要自行修改)。每次執(zhí)行這個函數(shù),都會將數(shù)組中的第一個對象取出,并傳給process() 函數(shù)進行操作,如果這時process() 中還有未處理完的對象, 另外一個timer 就會啟動,用于重復等待。上面提到的循環(huán),可以通過下面的方法使用這個函數(shù):
        chunk(items, process);
        需要注意的是,在這里數(shù)組采用了隊列(queue )的形式,而且在循環(huán)的過程中,每次都會發(fā)生修改。如果你要修改數(shù)組的原始狀態(tài),這里介紹兩種途徑:一種是通過concat() 函數(shù),在傳遞之前,建立一個當前數(shù)組的副本:
        chunk(items.concat(), process);
        另外一種選擇是直接修改chunk() 函數(shù),直接在函數(shù)內(nèi)部進行修改:
        代碼如下:
        function chunk(array, process, context){
        var items = array.concat(); //clone the array
        setTimeout(function(){
        var item = items.shift();
        process.call(context, item);
        if (items.length > 0){
        setTimeout(arguments.callee, 100);
        }
        }, 100);
        }

        注意這種方法要比只保存一個索引安全的多,因為數(shù)組的內(nèi)容在下次計時器生效之前可能會發(fā)生變化。
        這里提到的chunk() 函數(shù),只是優(yōu)化循環(huán)性能的一個起點。你可以根據(jù)需要不斷改進它,讓它擁有更多的功能。比如說,在數(shù)組中所有對象都處理完成以后,可以增加一個函數(shù)回調(diào)。無論你是否會按照這種方式對函數(shù)進行修改,這只是一種JavaScript 的代碼開發(fā)模式,可以幫助優(yōu)化數(shù)組的處理性能,還可以避免那個腳本失控的警告。

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

        文檔

        JavaScript提升運行速度之循環(huán)篇譯文_javascript技巧

        JavaScript提升運行速度之循環(huán)篇譯文_javascript技巧:這篇著重講第一個原因。最后給出了一個開發(fā)模式,替換傳統(tǒng)的循環(huán)結(jié)構(gòu),可以完全避免腳本失控的狀況發(fā)生。 原文標題:Speed up your JavaScript, Part 1 原文作者:Nicholas C. Zakas 在我 上一篇帖子 (譯文 ) 中,談到了各個瀏覽器究竟會在什么情況下彈出
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 日本永久免费a∨在线视频| 亚洲永久网址在线观看| 亚欧乱色国产精品免费视频| 免费国产一级特黄久久| 美女被免费视频网站| 亚洲国产成人久久综合野外| 搜日本一区二区三区免费高清视频 | 日本一道一区二区免费看| 亚洲乱亚洲乱妇24p| 国产三级免费观看| 国产精品成人啪精品视频免费| 在线亚洲人成电影网站色www | 99在线视频免费观看视频| 在线综合亚洲中文精品| 日日AV拍夜夜添久久免费| 羞羞漫画登录页面免费| 久久国产成人亚洲精品影院 | 在线亚洲人成电影网站色www| 亚洲视频在线观看免费| 亚洲国产精品免费观看| www.亚洲色图.com| 日本免费中文字幕| 亚洲午夜精品一区二区麻豆| 亚洲精品tv久久久久久久久久| 久久一区二区三区免费播放| 亚洲一区二区三区无码国产| 亚洲AV无码成H人在线观看| 青青操免费在线观看| 亚洲国产成人无码av在线播放| 日韩中文字幕在线免费观看| 亚洲天堂免费在线视频| 亚洲黄色在线视频| 国产午夜免费秋霞影院| 香港a毛片免费观看| 亚洲第一成年网站视频| 亚洲AV午夜福利精品一区二区| 影音先锋在线免费观看| A级毛片高清免费视频在线播放| 亚洲日韩精品无码AV海量| 亚洲国产一二三精品无码| 成人男女网18免费视频|