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

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

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

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

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

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

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

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

所以第二原則就是以大規(guī)模循環(huán)體為最主要優(yōu)化對象。

以下的優(yōu)化原則,只在大規(guī)模循環(huán)中才有意義,在循環(huán)體之外做此類優(yōu)化基本上是沒有意義的。

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

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

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

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

所以第四原則就是盡量使用語言本身的構(gòu)造和內(nèi)建函數(shù)。

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

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

比如:

代碼如下:

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通常調(diào)用的時候個數(shù)是較少的,我們希望改進它在參數(shù)較少時的性能。如果改成:

代碼如下:

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倍)。

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

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

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

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

好了上面就是偶總結(jié)的js優(yōu)化五大原則。

更多信息請查看腳本欄目
易賢網(wǎng)手機網(wǎng)站地址:javascript優(yōu)化

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
亚洲欧洲中文日韩久久av乱码| 久久视频这里只有精品| 禁断一区二区三区在线| 亚洲国产成人精品女人久久久 | 欧美剧在线免费观看网站| 欧美激情欧美激情在线五月| 国产精品高潮视频| 黄色精品在线看| 一区二区三区不卡视频在线观看| 亚洲免费在线视频| 国产欧美短视频| 久久久精品国产免大香伊| 亚洲国产高清视频| 亚洲五月婷婷| 亚洲日本理论电影| 午夜精品久久久久久久99樱桃| 久久综合亚洲社区| 国产精品久久久久久久9999 | 亚洲第一精品夜夜躁人人躁| 一区二区三区欧美在线| 美日韩精品免费| 国产乱子伦一区二区三区国色天香| 91久久精品日日躁夜夜躁欧美| 久久国产手机看片| 国产精品免费观看视频| 亚洲日本在线视频观看| 亚洲天堂成人在线观看| 欧美一级播放| 日韩一级在线观看| 国产亚洲午夜高清国产拍精品| 在线观看一区二区视频| 久久国产精品72免费观看| 亚洲一区二区三区国产| 牛人盗摄一区二区三区视频| 国产欧美日韩中文字幕在线| 99国产精品久久久久久久久久| 久热精品视频在线| 国产一区二区在线免费观看 | 欧美大片第1页| 国产一区二区三区的电影| 亚洲一区二区三区四区中文| 欧美国产日韩a欧美在线观看| 尹人成人综合网| 久久久久久高潮国产精品视| 久久久久久久激情视频| 国产无一区二区| 小处雏高清一区二区三区| 国产精品美女久久久久久免费| 99国产精品国产精品久久| 欧美va天堂| 在线观看日韩av| 久久综合色播五月| 狠狠久久亚洲欧美专区| 午夜在线a亚洲v天堂网2018| 国产精品露脸自拍| 亚洲欧美福利一区二区| 国产精品任我爽爆在线播放| 性欧美18~19sex高清播放| 国产日韩精品一区二区三区在线| 欧美一级免费视频| 激情六月婷婷综合| 欧美成人激情视频| 日韩午夜免费| 国产精品国产精品| 欧美一区2区三区4区公司二百| 国产美女精品视频免费观看| 久久久久久亚洲精品不卡4k岛国| 一区免费观看| 欧美二区在线播放| 一区二区欧美精品| 国产美女精品视频| 久久噜噜亚洲综合| 亚洲欧洲在线播放| 国产精品欧美风情| 久久精品日产第一区二区| 亚洲国产成人精品久久久国产成人一区| 女人香蕉久久**毛片精品| 一区二区av在线| 国产亚洲欧美日韩美女| 欧美a级理论片| 亚洲欧美日本国产专区一区| 在线成人av| 欧美日韩综合网| 欧美一级久久| 亚洲精品激情| 国产一区二区激情| 欧美另类69精品久久久久9999| 亚洲一区精品电影| 一区二区三区中文在线观看| 欧美日韩亚洲网| 久久精品水蜜桃av综合天堂| 亚洲日本va午夜在线电影| 欧美午夜片在线观看| 久久久久国产精品麻豆ai换脸| 日韩视频免费| 国产在线不卡视频| 欧美日韩国产综合新一区| 午夜精品一区二区三区在线| 亚洲欧洲在线一区| 国产精品一二三四区| 免费成人在线观看视频| 亚洲欧美另类在线| 欧美日韩伊人| 久久久久久久综合| 久久国产欧美日韩精品| 亚洲九九九在线观看| 国产亚洲欧美日韩日本| 国产精品vvv| 欧美福利视频在线观看| 欧美一区亚洲| 亚洲午夜久久久久久久久电影网| 在线观看欧美日韩| 国产欧美韩日| 欧美午夜无遮挡| 欧美精品成人| 欧美成人国产va精品日本一级| 欧美天天影院| 久久精品首页| 欧美资源在线| 国产婷婷一区二区| 欧美在线播放高清精品| 亚洲欧美一区二区三区久久| 亚洲精品日韩综合观看成人91| 亚洲午夜久久久久久久久电影院| 久久综合色婷婷| 亚洲美女在线视频| 久久亚洲一区| 欧美中文在线视频| 中文精品视频| 亚洲字幕在线观看| 国产日韩一区二区三区在线| 欧美日韩在线高清| 在线观看亚洲视频啊啊啊啊| 亚洲精品在线二区| 欧美日韩调教| 欧美激情成人在线视频| 久久久91精品国产| 久久精品成人一区二区三区| 午夜欧美精品| 欧美一区二区三区四区夜夜大片| 亚洲在线观看视频网站| 一区二区三区四区国产| 在线亚洲电影| 亚洲欧美电影在线观看| 久久av资源网站| 久久久久免费视频| 国产乱码精品| 国产精品揄拍500视频| 国产精品天天看| 国产欧美视频一区二区三区| 国产麻豆一精品一av一免费| 国产综合亚洲精品一区二| 在线观看欧美成人| 亚洲国产欧美一区| 一道本一区二区| 午夜精品久久久久久久 | 欧美在线观看天堂一区二区三区| 欧美一区二区三区在线| 久久精品在线免费观看| 免费亚洲电影| 国产精品成人一区二区三区夜夜夜 | 亚洲欧美日韩另类| 午夜欧美精品| 久久久之久亚州精品露出| 欧美国产三级| 国产精品视频福利| 国产精品一区免费在线观看| 国产精品久久久久一区| 国产日韩视频| 亚洲福利在线观看| 亚洲天堂免费观看| 久久精品72免费观看| 欧美成人a∨高清免费观看| 欧美福利视频| 国产精品日本一区二区| 国产一区二区三区最好精华液| 在线观看国产一区二区| 99国内精品久久久久久久软件| 亚洲一区二区三区免费观看| 久久精品国产成人| 欧美激情一区二区三区在线视频| 国产精品久久波多野结衣| 激情文学综合丁香| 一区二区欧美视频| 久久久久久久久久久久久9999| 欧美另类videos死尸| 国产欧美精品一区二区色综合 | 欧美午夜国产| 精品动漫一区| 亚洲永久精品国产| 国内成人在线| 欧美日韩在线另类| 国产精品久久久久久亚洲调教| 激情国产一区二区| 亚洲尤物在线视频观看| 国产午夜精品一区二区三区视频 | 一区二区日韩伦理片| 久久精品一区二区| 欧美午夜精品一区| 亚洲片区在线|