中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

javascript優化
來源:易賢網 閱讀:1192 次 日期:2016-06-16 11:08:53
溫馨提示:易賢網小編為您整理了“javascript優化”,方便廣大網友查閱!

首先,與其他語言不同,js的效率很大程度是取決于js engine的效率。除了引擎實現的優劣外,引擎自己也會為一些特殊的代碼模式采取一些優化的策略。例如ff、opera和safari的js引擎,都對字符串的拼接運算(+)做了特別優化。顯然,要獲得最大效率,就必須要了解引擎的脾氣,盡量迎合引擎的口味。所以對于不同的引擎,所作的優化極有可能是背道而馳的。

而如果做跨瀏覽器的web編程,則最大的問題是在于ie6(jscript 5.6)!因為在不打hotfix的情況下,jscript引擎的垃圾回收的bug,會導致其在真實應用中的performance跟其他瀏覽器根本不在一個數量級上。因此在這種場合做優化,實際上就是為jscript做優化!

所以第一原則就是只需要為ie6(未打補丁的jscript 5.6或更早版本)做優化!

如果你的程序已經優化到在ie6下可以接受的性能,那基本上在其他瀏覽器上性能就完全沒有問題。

因此,注意我下面講的許多問題在其他引擎上可能完全不同,例如在循環中進行字符串拼接,通常認為需要用array.join的方式,但是由于 spidermonkey等引擎對字符串的“+”運算做了優化,結果使用array.join的效率反而不如直接用“+”!但是如果考慮ie6,則其他瀏覽器上的這種效率的差別根本不值一提。

js優化與其他語言的優化也仍然有相同之處。比如說,不要一上來就急吼吼的做優化,那樣毫無意義。優化的關鍵,仍然是要把精力放在最關鍵的地方,也就是瓶頸上。一般來說,瓶頸總是出現在大規模循環的地方。這倒不是說循環本身有性能問題,而是循環會迅速放大可能存在的性能問題。

所以第二原則就是以大規模循環體為最主要優化對象。

以下的優化原則,只在大規模循環中才有意義,在循環體之外做此類優化基本上是沒有意義的。

目前絕大多數js引擎都是解釋執行的,而解釋執行的情況下,在所有操作中,函數調用的效率是較低的。此外,過深的prototype繼承鏈或者多級引用也會降低效率。jscript中,10級引用的開銷大體是一次空函數調用開銷的1/2。這兩者的開銷都遠遠大于簡單操作(如四則運算)。

所以第三原則就是盡量避免過多的引用層級和不必要的多次方法調用。

特別要注意的是,有些情況下看似是屬性訪問,實際上是方法調用。例如所有dom的屬性,實際上都是方法。在遍歷一個nodelist的時候,循環條件對于nodes.length的訪問,看似屬性讀取,實際上是等價于函數調用的。而且ie dom的實現上,childnodes.length每次是要通過內部遍歷重新計數的。(my god,但是這是真的!因為我測過,childnodes.length的訪問時間與childnodes.length的值成正比!)這非常耗費。所以預先把nodes.length保存到js變量,當然可以提高遍歷的性能。

同樣是函數調用,用戶自定義函數的效率又遠遠低于語言內建函數,因為后者是對引擎本地方法的包裝,而引擎通常是c,c++,java寫的。進一步,同樣的功能,語言內建構造的開銷通常又比內建函數調用要效率高,因為前者在js代碼的parse階段就可以確定和優化。

所以第四原則就是盡量使用語言本身的構造和內建函數。

這里有一個例子是高性能的string.format方法。string.format 傳統的實現方式是用string.replace(regex, func),在pattern包含n個占位符(包括重復的)時,自定義函數func就被調用n次。而這個高性能實現中,每次format調用所作的只是一次array.join然后一次string.replace(regex, string)的操作,兩者都是引擎內建方法,而不會有任何自定義函數調用。兩次內建方法調用和n次的自定義方法調用,這就是性能上的差別。

同樣是內建特性,性能上也還是有差別的。例如在jscript中對于arguments的訪問性能就很差,幾乎趕上一次函數調用了。因此如果一個可變參數的簡單函數成為性能瓶頸的時候,可以將其內部做一些改變,不要訪問arguments,而是通過對參數的顯式判斷來處理。

比如:

代碼如下:

1. function sum() {

2. var r = 0;

3. for (var i = 0; i < arguments.length; i++) {

4. r += arguments[i];

5. }

6. return r;

7. }

這個sum通常調用的時候個數是較少的,我們希望改進它在參數較少時的性能。如果改成:

代碼如下:

1. function sum() {

2. switch (arguments.length) {

3. case 1: return arguments[0];

4. case 2: return arguments[0] + arguments[1];

5. case 3: return arguments[0] + arguments[1] + arguments[2];

6. case 4: return arguments[0] + arguments[1] + arguments[2] + arguments[3];

7. default:

8. var r = 0;

9. for (var i = 0; i < arguments.length; i++) {

10. r += arguments[i];

11. }

12. return r;

13. }

14. }

其實并不會有多少提高,但是如果改成:

代碼如下:

1. function sum(a, b, c, d, e, f, g) {

2. var r = a ? b ? c ? d ? e ? f ? a + b + c + d + e + f : a + b + c + d + e : a + b + c + d : a + b + c : a + b : a : 0;

3. if (g === undefined) return r;

4. for (var i = 6; i < arguments.length; i++) {

5. r += arguments[i];

6. }

7. return r;

8. }

就會提高很多(至少快1倍)。

最后是第五原則,也往往是真實應用中最重要的性能障礙,那就是盡量減少不必要的對象創建。

本身創建對象是有一定的代價的,但是這個代價其實并不大。最根本的問題是由于jscript愚蠢之極的垃圾回收調度算法,導致隨著對象個數的增加,性能嚴重下降(據微軟的人自己說復雜度是o(n^2))。

比如我們常見的字符串拼接問題,經過我的測試驗證,單純的多次創建字符串對象其實根本不是性能差的原因。要命的是在對象創建期間的無謂的垃圾回收的開銷。而array.join的方式,不會創建中間字符串對象,因此就減少了那該死的垃圾回收的開銷。

因此,如果我們能把大規模對象創建轉化為單一語句,則其性能會得到極大的提高!例如通過構造代碼然后eval——實際上pies項目中正在根據這個想法來做一個專門的大規模對象產生器……

好了上面就是偶總結的js優化五大原則。

更多信息請查看腳本欄目
下一篇:jquery數據緩存
易賢網手機網站地址:javascript優化
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點

版權所有:易賢網

中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
色婷婷香蕉在线一区二区| caoporn国产精品| 成人免费在线观看入口| 国产网站一区二区| 欧美激情一区二区三区四区| 久久久久久一级片| 国产精品免费看片| 国产清纯白嫩初高生在线观看91 | 精品一二线国产| 日韩一区精品视频| 蜜桃久久久久久久| 激情偷乱视频一区二区三区| 美女脱光内衣内裤视频久久网站| 久久精工是国产品牌吗| 国产一区二区电影| 国产成人av自拍| 91污在线观看| 91精品国产一区二区三区蜜臀| 91精品国产综合久久精品| 久久伊99综合婷婷久久伊| 中文字幕高清一区| 国产精品网站在线观看| 久久综合色天天久久综合图片| 精品精品国产高清a毛片牛牛| 久久午夜羞羞影院免费观看| 国产精品色在线观看| 一区二区三区在线看| 美女视频一区二区三区| 国产麻豆成人传媒免费观看| 91色视频在线| 欧美一级搡bbbb搡bbbb| 国产精品午夜在线| 日韩不卡一区二区| 成人国产一区二区三区精品| 欧美日韩午夜影院| 国产亚洲午夜高清国产拍精品| 亚洲精品你懂的| 精品一区二区三区免费播放| av在线播放成人| 欧美亚洲动漫制服丝袜| 欧美日韩和欧美的一区二区| 日韩久久久精品| 亚洲永久免费视频| 激情六月婷婷久久| 91久久精品一区二区三| 久久久国产精品午夜一区ai换脸| 一区二区三区在线视频免费观看| 久久精品国产99国产精品| 91国产成人在线| 中文字幕精品一区二区精品绿巨人| 亚洲国产裸拍裸体视频在线观看乱了 | 欧美三级午夜理伦三级中视频| 日韩免费在线观看| 一区二区三区加勒比av| 国产成a人无v码亚洲福利| 欧美一区午夜视频在线观看| 亚洲免费资源在线播放| 国产在线国偷精品产拍免费yy| 欧美人与禽zozo性伦| 国产精品进线69影院| 美美哒免费高清在线观看视频一区二区 | 极品少妇xxxx偷拍精品少妇| 日韩亚洲欧美成人一区| 欧美精品一区二区三区蜜桃| 一卡二卡三卡日韩欧美| 国产美女久久久久| 91精品国产美女浴室洗澡无遮挡| 国产精品嫩草影院av蜜臀| 久久99国产精品久久99| 欧美一区二区视频在线观看2022| 亚洲视频一区二区在线| 国产福利精品导航| 日韩欧美色综合| 精品国产电影一区二区| 爽爽淫人综合网网站| 欧美视频一区在线| 亚洲精品高清在线| 一本色道**综合亚洲精品蜜桃冫| 国产精品美女久久久久av爽李琼| 国产成人精品免费网站| 国产亚洲视频系列| 国产在线不卡视频| 国产日韩欧美一区二区三区乱码 | 激情综合亚洲精品| 日韩精品一区二区三区四区| 久久99日本精品| 精品国产自在久精品国产| 国内精品伊人久久久久影院对白| 久久久久久久网| 成人黄色网址在线观看| 亚洲欧美色图小说| 欧美亚一区二区| 日韩av电影免费观看高清完整版| 日韩一级片在线播放| 国产美女在线精品| 中文字幕一区免费在线观看| 91精品办公室少妇高潮对白| 日韩国产高清在线| 久久久亚洲午夜电影| 91免费在线看| 日韩经典中文字幕一区| 久久精品视频免费| 色就色 综合激情| 青青草国产精品97视觉盛宴| 日本一区二区成人在线| 欧美性色黄大片| 国产麻豆精品在线| 亚洲在线观看免费| 精品成人私密视频| 色综合天天综合网天天狠天天| 日韩和欧美一区二区| 国产日韩欧美激情| 欧美优质美女网站| 狠狠色综合日日| 一区二区欧美国产| 久久午夜老司机| 欧美精品色综合| 成人一区二区三区中文字幕| 日本成人在线网站| 亚洲制服丝袜av| 国产精品麻豆欧美日韩ww| 7777精品伊人久久久大香线蕉超级流畅 | 日韩欧美一卡二卡| 99久久精品免费看国产| 婷婷成人激情在线网| 中国色在线观看另类| 日韩欧美一区中文| 欧美剧在线免费观看网站 | 欧美美女视频在线观看| 成人性色生活片| 麻豆精品国产传媒mv男同| 亚洲专区一二三| 一区2区3区在线看| 亚洲品质自拍视频| 日本一区二区高清| 久久青草欧美一区二区三区| 日韩一区二区三区视频在线| 日本久久电影网| 91丨porny丨在线| 国产91高潮流白浆在线麻豆| 韩国成人在线视频| 免费高清成人在线| 日韩国产成人精品| 天涯成人国产亚洲精品一区av| 夜夜夜精品看看| 亚洲精品欧美专区| 亚洲免费观看高清完整| 国产精品免费人成网站| 国产精品丝袜一区| 18成人在线视频| 亚洲六月丁香色婷婷综合久久| 国产精品美女久久久久av爽李琼| 中文字幕成人在线观看| 久久精品视频网| 国产精品视频你懂的| 国产精品女同一区二区三区| 国产精品护士白丝一区av| 国产精品女上位| 综合久久给合久久狠狠狠97色 | 精品一区二区三区免费观看| 青青草伊人久久| 国产综合久久久久久鬼色| 国产伦精品一区二区三区免费 | 欧美卡1卡2卡| 日韩欧美综合一区| 久久精品亚洲精品国产欧美| 久久精品人人做人人综合| 日韩精品影音先锋| 亚洲福中文字幕伊人影院| 一区二区不卡在线视频 午夜欧美不卡在| 自拍偷自拍亚洲精品播放| 尤物在线观看一区| 亚洲成人av一区| 极品美女销魂一区二区三区| 成人午夜视频在线| 91视频国产资源| 日韩天堂在线观看| 2022国产精品视频| 亚洲视频免费看| 日韩av午夜在线观看| 国产精品一线二线三线精华| 91香蕉国产在线观看软件| 911精品产国品一二三产区| 2020日本不卡一区二区视频| 国产精品家庭影院| 日本成人在线一区| jlzzjlzz亚洲女人18| 欧美日本在线播放| 欧美激情资源网| 婷婷开心激情综合| 成人h动漫精品| 欧美电影免费观看高清完整版在线| 欧美高清在线精品一区| 日韩中文字幕91| a美女胸又www黄视频久久| 91精品国产欧美日韩| 亚洲人成网站色在线观看| 精品午夜久久福利影院| 91久久精品一区二区| 国产女主播一区|