中文字幕人妻一区二区三区-久久88-中文字幕影院-天天干天天操天天爽-91av免费-色呦呦在线视频-手机在线观看毛片-91高清国产-手机在线看a-香蕉久久久久久-人人精品视频-色偷偷男人天堂-欧美tickle狂笑裸体vk-九月婷婷丁香-伊人影院亚洲

蒙狼科技logo
設為首頁| 聯系我們
咨詢熱線: 13917498722
  您的位置: 首頁 > 網站資訊 > 編寫高性能javascript

編寫高性能javascript

發布日期:2017/6/16

百度權重查詢 站長交易 友情鏈接交換 網站監控 服務器監控 seo監控

許多javascript引擎,如Google的V8引擎(被Chrome和Node所用),是專門為需要快速執行的大型javascript應用所設計的。假如你是一個開發者,并且關心內存使用情況與頁面性能,你應該了解用戶瀏覽器中的javascript引擎是如何運作的。無論是V8,SpiderMonkey的(Firefox)的Carakan(Opera),Chakra(IE)或其他引擎,這樣做可以幫助你更好地優化你的應用程序。這并不是說應該專門為某一瀏覽器或引擎做優化,萬萬別這么做。

但是,你應該問自己幾個問題:

•在我的代碼里,是否可以使代碼更高效一些

•主流的javascript引擎都做了哪些優化

•什么是引擎無法優化的,垃圾回收器(GC)是否能回收我所期望的東西

加載快速的網站就像是一輛快速的跑車,需要用到特殊定制的零件

編寫高性能代碼時有一些常見的陷阱,在這篇文章中,我們將展示一些經過驗證的、更好的編寫代碼體例。

那么,javascript在V8里是如何工作的?

假如你對JS引擎沒有較深的了解,開發一個大型Web應用也沒啥問題,就好比會開車的人也只是看過引擎蓋而沒有看過車蓋內的引擎一樣。鑒于Chrome是我的瀏覽器,所以談一下它的javascript引擎。V8是由以下幾個核心部分組成:

•一個基本的編譯器,它會在代碼執行前解析javascript代碼并生成本地機器碼,而不是執行字節碼或簡單地詮釋它。這些代碼好開始并不是高度優化的。

•V8將對象構建為對象模型。在javascript中對象體現為關聯數組,但是在V8中對象被看作是隱藏的類,一個為了優化查詢的內部類型系統。

•運行時分析器監視正在運行的系統,并標識了“hot”的函數(例如花費很長時間運行的代碼)。

•優化編譯重視新編譯和優化那些被運行時分析器標識為“hot”的代碼,并進行“內聯”等優化(例如用被調用者的主體替代函數調用的位置)。

•V8支撐去優化,這意味著優化編譯器假如發現對于代碼優化的假設過于樂觀,它會舍棄優化過的代碼。

•V8有個垃圾收集器,了解它是如何工作的和優化javascript一樣主要。

垃圾回收

垃圾回收是內存管理的一種形式,其實就是一個收集器的概念,嘗試回收不再被使用的對象所占用的內存。在javascript這種垃圾回收語言中,應用程序中仍在被引用的對象不會被消滅。

手動消弭對象引用在大多數情況下是沒有需要的。通過簡單地把變量放在需要它們的地方(理想情況下,盡可能是局部作用域,即它們被使用的函數里而不是函數外層),一切將運作地很好。

垃圾回收器嘗試回收內存

在javascript中,是不可能強制進行垃圾回收的。你不應該這么做,因為垃圾收集過程是由運行時控制的,它知道什么是好好的清理時機。

“消弭引用”的誤解

網上有許多關于javascript內存回收的討論都談到delete這個關鍵字,雖然它可以被用來刪除對象(map)中的屬性(key),但有部分開發者認為它可以用來強制“消弭引用”。建議盡可能避免使用delete,在下面的例子中delete o.x 的弊大于利,因為它改變了o的隱藏類,并使它成為一個"慢對象"。

var o = { x:1 };

delete o.x; // true

o.x; // undefined

你會很容易地在流行的JS庫中找到引用刪除——這是具有語言目的性的。這里需要注重的是避免在運行時修改”hot”對象的結構。javascript引擎可以檢測出這種“hot”的對象,并嘗試對其進行優化。假如對象在生命周期中其結構沒有較大的改變,引擎將會更容易優化對象,而delete操作現實上會觸發這種較大的結構改變,因此不利于引擎的優化。

對于null是如何工作也是有誤解的。將一個對象引用設置為null,并沒有使對象變“空”,只是將它的引用設置為空而已。使用o.x= null比使用delete會更好些,但可能也不是很需要。

var o = { x:1 };

o = null;

o; // null

o.x // TypeError

假如此引用是當前對象的好后引用,那么該對象將被作為垃圾回收。假如此引用不是當前對象的好后引用,則該對象是可訪問的且不會被垃圾回收。

另外需要注重的是,全局變量在頁面的生命周期里是不被垃圾回收器清理的。無論頁面打開多久,javascript運行時全局對象作用域中的變量會一向存在。

var myGlobalNamespace = {};

全局對象只會在刷新頁面、導航到其他頁面、關閉標簽頁或退出瀏覽器時才會被清理。函數作用域的變量將在超出作用域時被清理,即退出函數時,已經沒有任何引用,這樣的變量就被清理了。

經驗法則

為了使垃圾回收器盡早收集盡可能多的對象,不要hold著不再使用的對象。這里有幾件事需要記住:

•正如前面提到的,在合適的范圍內使用變量是手動消弭引用的更好選擇。即一個變量只在一個函數作用域中使用,就不要在全局作用域聲明它。這意味著更干凈省心的代碼。

•確保解綁那些不再需要的事件監聽器,尤其是那些即將被銷毀的DOM對象所綁定的事件監聽器。

•假如使用的數據緩存在本地,確保清理一下緩存或使用老化機制,以避免大量不被重用的數據被存儲。

函數

接下來,我們談談函數。正如我們已經說過,垃圾收集的工作原理,是通過回收不再是訪問的內存塊(對象)。為了更好地說明這一點,這里有一些例子。

function foo(){

var bar = new LargeObject();

bar.someCall();

}

當foo返回時,bar指向的對象將會被垃圾收集器主動回收,因為它已沒有任何存在的引用了。

對比一下:

function foo(){

var bar = new LargeObject();

bar.someCall();

return bar;

}

// somewhere else

var b = foo();

現在我們有一個引用指向bar對象,這樣bar對象的生存周期就從foo的調用一向持續到調用者指定別的變量b(或b超出范圍)。

閉包(CLOSURES)

當你看到一個函數,返回一個內部函數,該內部函數將獲得范圍外的訪問權,即使在外部函數執行之后。這是一個基本的閉包 —— 可以在特定的上下文中設置的變量的表達式。例如:

function sum (x){

function sumIt(y){

return x + y;

};

return sumIt;

}

// Usage

var sumA = sum(4);

var sumB = sumA(3);

console.log(sumB); // Returns 7

在sum調用上下文中生成的函數對象(sumIt)是無法被回收的,它被全局變量(sumA)所引用,并且可以通過sumA(n)調用。

讓我們來看看另外一個例子,這里我們可以訪問變量largeStr嗎?

var a = function (){

var largeStr = new Array(1000000).join(‘x’);

return function (){

return largeStr;

};

}();

是的,我們可以通過a()訪問largeStr,所以它沒有被回收。下面這個呢?

var a = function (){

var smallStr = ‘x’;

var largeStr = new Array(1000000).join(‘x’);

return function (n){

return smallStr;

};

}();

我們不能再訪問largeStr了,它已經是垃圾回收候選人了。【譯者注:因為largeStr已不存在外部引用了】

準時器

好糟的內存泄露地方之一是在循環中,或者在setTimeout()/ setInterval()中,但這是相當常見的。思考下面的例子:

var myObj = {

callMeMaybe:function (){

var myRef = this;

var val = setTimeout(function (){

console.log(‘Time is running out!’);

myRef.callMeMaybe();

},1000);

}

};

假如我們運行myObj.callMeMaybe();來啟動準時器,可以看到控制臺每秒打印出“Time is running out!”。假如接著運行myObj = null,準時器依舊處于激活狀況。為了能夠持續執行,閉包將myObj傳遞給setTimeout,這樣myObj是無法被回收的。相反,它引用到myObj的因為它捕捉了myRef。這跟我們為了保持引用將閉包傳給其他的函數是一樣的。

同樣值得牢記的是,setTimeout/setInterval調用(如函數)中的引用,將需要執行和完成,才可以被垃圾收集。

當心性能陷阱

永遠不要優化代碼,直到你真正需要。現在經常可以看到一些基準測試,顯示N比M在V8中更為優化,但是在模塊代碼或應用中測試一下會發現,這些優化真正的效果比你期望的要小的多。

做的過多還不如什么都不做. 

比如我們想要創建這樣一個模塊:

•需要一個本地的數據源包含數字ID

•繪制包含這些數據的表格

•添加事件處理程序,當用戶點擊的任何單元格時切換單元格的css class

這個問題有幾個不同的因素,雖然也很容易解決。我們如何存儲數據,如何高效地繪制表格并且append到DOM中,如何更優地處理表格事件?

面對這些問題好開始(無邪)的做法是使用對象存儲數據并放入數組中,使用jQuery遍歷數據繪制表格并append到DOM中,好后使用事件綁定我們期望地點擊行為。

注重:這不是你應該做的

var moduleA = function (){

return {

data:dataArrayObject,

init:function (){

this.addTable();

this.addEvents();

},

addTable:function (){

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

$tr = $(‘<tr></tr>’);

for (var j = 0; j <this.data.length; j++){

$tr.append(‘<td>’ + this.data[j][‘id’]+ ‘</td>’);

}

$tr.appendTo($tbody);

}

},

addEvents:function (){

$(‘table td’).on(‘click’,function (){

$(this).toggleClass(‘active’);

});

}

};

}();

這段代碼簡單有用地完成了義務。

但在這種情況下,我們遍歷的數據只是本應該簡單地存放在數組中的數字型屬性ID。有趣的是,直接使用DocumentFragment和本地DOM方法比使用jQuery(以這種體例)來生成表格是更優的選擇,當然,事件代理比單獨綁定每個td具有更高的性能。

要注重雖然jQuery在內部使用DocumentFragment,但是在我們的例子中,代碼在循環內調用append并且這些調用涉及到一些其他的小知識,因此在這里起到的優化作用不大。希望這不會是一個痛點,但請務必進行基準測試,以確保自己代碼ok。

對于我們的例子,上述的做法帶來了(期望的)性能提拔。事件代理對簡單的綁定是一種改進,可選的DocumentFragment也起到了助推作用。

var moduleD = function (){

return {

data:dataArray,

init:function (){

this.addTable();

this.addEvents();

},

addTable:function (){

var td,tr;

var frag = document.createDocumentFragment();

var frag2 = document.createDocumentFragment();

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

tr = document.createElement(‘tr’);

for (var j = 0; j <this.data.length; j++){

td = document.createElement(‘td’);

td.appendChild(document.createTextNode(this.data[j]));

frag2.appendChild(td);

}

tr.appendChild(frag2);

frag.appendChild(tr);

}

tbody.appendChild(frag);

},

addEvents:function (){

$(‘table’).on(‘click’,‘td’,function (){

$(this).toggleClass(‘active’);

});

}

};

}();

1 2 3 下一頁



其他相關文章
  • 網站建設后的轉讓問題
  • 網絡推廣具體方法
  • 多域名同內容的常見問題
  • 根據不同的時期來進行優化關鍵詞?
  • 網站SEO關鍵字排名容易忽略的6個因素
  • 新老域名對于網站建設的影響




  • 企業網站后臺使用
    購物網站后臺使用
    網站產品圖片的處理



    農業銀行支付
    建設銀行支付
    郵政儲蓄銀行支付



    企業網站建設
    整站建設
    購物網站



    企業網站建設建議
    注冊適合自己的域名
    什么是虛擬主機




    售前咨詢QQ: 838821345
    售后服務QQ: 464698733
    應急手機:13917498722


    微信掃一掃
    添加24小時微信客服


    郵箱:lang@MENGL.CN
    地址:上海寶山區城銀路555弄2號樓3樓
    ICP備案:滬ICP備12042844號-3
     滬公網安備:31011402002917號
    做網站 | 企業網站建設 | 上海做網站 | 企業網站制作 | 做網站的公司 | 關于蒙狼 | 整站建設 | 購物網站 | 企業網絡營銷 | 成功案例 | 加盟代理 | 在線訂單
    服務區域: 臨港新區做網站 徐匯做網站 閔行做網站 長寧做網站 虹口做網站 黃浦做網站 盧灣做網站 靜安做網站 浦東做網站 楊浦做網站 普陀做網站 閘北做網站 寶山做網站 嘉定做網站 松江做網站 昆山做網站
    Copyright 2012-2025 上海蒙狼網絡科技有限公司 www.zyjjkqf.com All Rights Reserved
    日韩精品极品视频在线观看免费 | 91视频www| 欧美一级淫片bbb一84 | 久草视频免费在线 | 男人午夜天堂 | 91视频在线观看 | 91蝌蚪少妇 | 九九国产视频 | 麻豆国产91在线播放 | 看一级黄色片 | 成全影视在线观看第8季 | 一区二区三区四区五区 | 国产一级二级 | 抱着老师的嫩臀猛然挺进视频 | 小视频在线观看 | 国语对白做受欧美 | 97自拍视频 | 久草精品在线 | 欧美性天天影院 | 奶妈的诱惑| 福利视频网| 91激情网 | 9.1人网站免费 | 日日碰狠狠添天天爽无码 | 熟妇女人妻丰满少妇中文字幕 | 国产精品一品二区三区的使用体验 | 五月色丁香 | 国产一级二级 | 欧美国产综合 | 嫩草av91| 亚洲激情文学 | 欧美视频在线播放 | 亚洲国产区 | 天堂资源 | 五月天丁香社区 | 亚洲熟女一区二区 | 日本在线观看 | 日本欧美一区二区 | 午夜在线观看视频18 | 黄色美女视频网站 | 欧美激情网址 | 黄色一区二区三区 | 人妻无码中文字幕 | 欧美成人一区二区三区 | 成人黄色在线视频 | 欧美超碰在线 | 午夜寂寞视频 | 在线观看视频一区二区 | 国产色视频一区二区三区qq号 | 手机看片久久 | 欧美成人精品 | 欧美日韩精品在线 | 国产伦精品一区二区三区妓女下载 | 免费在线毛片 | 免费在线观看av | 西西人体44rt高清大胆 | www.尤物| 成人v精品蜜桃久一区 | 无码人妻一区二区三区线 | 国产1区2区3区 | 黄色大片视频 | 91在线观看免费 | 免费看裸体视频 | 国产又粗又猛又爽又黄视频 | 五月色综合 | 中文字幕一区在线观看 | 五月综合激情 | 国产精品无码在线 | 日韩专区在线观看 | 国产精品伦子伦免费视频 | 国产主播在线播放 | 97在线观看 | 91成人在线| 欧美激情在线播放 | 欧美日韩精品一区二区三区 | 91丨porny丨尤物 | 国产精品自拍一区 | 亚洲精品一区二区三区不卡 | 亚洲天堂一区二区三区 | 在线黄网 | 被室友玩屁股(h)男男 | 久久久久精| 女上男下动态图 | 能看av的网站 | 国产3p视频 | 欧美性猛交一区二区三区精品 | 国产激情综合五月久久 | 亚洲第一av | 欧美高清性xxxxhdvideosex | 天堂av中文 | 91在线网址 | 中文字幕一区在线观看 | 亚洲av成人片色在线观看高潮 | 97香蕉碰碰人妻国产欧美 | 欧美一级在线观看 | 综合成人| 国产一区二区三区四区 | 久草视频免费在线 | 热久久久久 | 综综综综合网 | 可以免费看黄的网站 | 欧美视频在线观看免费 | 色婷婷色 | av在线一区二区三区 | 久久人妻少妇嫩草av | 欧美专区第一页 | 久久久精品电影 | 91丨porny丨国产 | 欧美97 | 丰满大肥婆肥奶大屁股 | 99久久99| 国产一区免费 | 91爱爱爱 | 精品亚洲一区二区 | 久久精品噜噜噜成人 | 日韩一区二区三区四区 | 成人在线观看av | 99久久精品国产色欲 | 亚洲欧美va天堂人熟伦 | 亚洲精品在线免费 | 国产精品久久久爽爽爽麻豆色哟哟 | 亚洲一区欧美 | 久久三级视频 | 国产卡一卡二 | 亚洲欧美综合 | 久久综合热| 揉我啊嗯~喷水了h视频 | 人妻无码中文字幕免费视频蜜桃 | 黄色免费网 | 成人无码视频 | 光明影院手机版在线观看免费 | 少妇高潮灌满白浆毛片免费看 | 欧美高清在线 | 国产精品一区二区在线播放 | 天天舔天天干 | 国产一级片在线 | 超碰在线公开 | 中文字幕日韩有码 | 91好色先生tv | 天天干狠狠操 | 久久成人在线 | 亚洲区欧美区 | 丰满的女邻居 | 国产又粗又猛又爽 | 欧美色图88 | av手机天堂网 | 性史性dvd影片农村毛片 | 伊人网av| 亚洲精品99 | 成人在线观看av | 亚洲成人精品 | 亚洲三级在线观看 | 亚洲狠狠干 | 制服.丝袜.亚洲.中文.综合 | 亚洲综合五月天婷婷丁香 | 免费看91| 亚洲成人黄色 | 美国少妇在线观看免费 | 成人看片网站 | 国产精品毛片久久久久久久 | 四虎网站| 国产女主播在线观看 | 成年人免费在线观看 | 亚洲小视频 | 91高潮大合集爽到抽搐 | 国产又粗又黄 | 欧美精品在线观看视频 | av不卡在线 | 中国女人性猛交 | 日韩黄色网| 17c在线| 毛片无码一区二区三区a片视频 | 日韩成人精品 | 毛片无码一区二区三区a片视频 | h片在线播放 | 日韩综合网 | 自拍偷拍一区二区三区 | 免费看裸体网站视频 | 天天操天天操天天操 | 一区二区三区www污污污网站 | 亚洲天堂网在线观看 | 亚洲免费高清视频 | 草莓视频黄色 | 男人天堂影院 | 樱花影院最新免费观看攻略 | 污网站在线看 | 免费视频久久 | 久久精品99久久久久久 | 欧美激情视频一区二区三区不卡 | 被闺蜜摁住强啪futa百合漫画 | 麻豆精品在线观看 | 国产免费小视频 | 午夜电影福利 | 日韩精品免费在线观看 | 亚洲一卡二卡 | h视频在线免费观看 | 看一级片| 性色av一区二区三区 | 国产精品欧美日韩 | 一级片黄色 | 夜夜春很很躁夜夜躁 | 91影院在线观看 | 秋霞国产午夜精品免费视频 | 波多野结衣 在线 | 一级片毛片 | 波多野结衣在线观看视频 | 超碰在线公开 | gogogo日本免费观看电视剧_第17集 | 黄色国产视频 | 非洲黑人狂躁日本妞 | 一级片在线免费观看 | 亚洲欧美天堂 | 日本五十路 | 国产精品福利在线 | 亚洲色欧美| 国产又粗又硬又长又爽的演员 | 国产女人18毛片水真多18精品 | 午夜视频在线看 | 91成人免费 | 一区二区三区久久 | 99re这里只有 | 男男做性免费视频网 | 亚洲第一色 | 天天天天干 | 男女插插视频 | 91美女网站 | 体内精视频xxxxx | 国产精品视频无码 | 日本国产欧美 | 久久丫精品久久丫 | 日韩成人在线观看 | 免费看片黄色 | 在线观看视频一区二区 | 特级西西444www大精品视频 | 久久久久久久久免费看无码 | 在线观看欧美日韩 | 欧美日韩国产精品 | 久久最新| 成人免费视频网站入口 | 天天干天天操天天射 | 成人免费片 | 久草视频免费在线观看 | 国产一区二区三区免费 | 蜜臀av在线观看 | 国产激情久久 | 黄色短视频在线观看 | 国产1区 | 免费看黄色的网站 | 中文字幕欧美人妻精品一区蜜臀 | 久久久精品电影 | 久久久精品国产 | 91av导航| 在线观看特色大片免费网站 | 91综合在线 | 天天摸天天操 | 日韩欧美在线观看视频 | 激情中文字幕 | 国产一级二级 | 久久毛片视频 | gogo人体做爰大胆视频 | 日日摸日日添日日躁av | 在线免费看黄色 | 国产成人在线播放 | 国产精品97| 黄网站在线观看 | 日韩不卡av | 婷婷综合网 | 黄色一级一片免费播放 | 亚洲一区二区av | 欧美日韩国产一区 | 亚洲国产精品无码久久久久高潮 | 午夜网址 | 亚洲97 | 波多野结衣一二三区 | 国产视频福利 | 国产精品福利视频 | 五月婷婷激情综合 | 日韩成人av电影 | 欧美黄视频 | 国产又黄又硬又粗 | 91av在线免费观看 | av男人天堂网 | 午夜av在线| 热久久久 | 国产欧美自拍 | 亚洲天堂影院 | 一区二区黄色 | 99久久久久 | 成年人免费网站 | 国产精品91在线 | 国产又色又爽又黄刺激在线视频 | 看av网站 | 国产综合久久 | 精品无码国产一区二区三区51安 | 免费黄色小视频 | 麻豆一级片 | 国语对白 | 黄网站在线观看 | 影音先锋在线播放 | 国产精品视频一区二区三区, | 色婷婷18| 岳奶大又白下面又肥又黑水多 | 91精品国产综合久久久久久 | 久久精品一区二区 | 免费毛片在线 | 岛国一区二区 | 中国女人真人一级毛片 | 色偷偷超碰 | 黄色av网 | 久久神马| 免费看毛片网站 | 色综合久久天天综合网 | 亚洲精品网站在线播放gif | 风流少妇 | 91久久国产综合久久91精品网站 | 波多野结衣视频在线 | 国产毛片视频 | 天天操综合 | 潘金莲一级淫片aaaaaa播放 | 国精产品一区二区三区 | 99re| 色综合久久88色综合天天 | 国产精品天美传媒入口 | 国产性猛交 | 国产真实乱人偷精品视频 | 久久加勒比 | 麻豆精品视频 | 日韩欧美高清 | 天天摸夜夜操 | 黄色在线观看视频 | 91精选| 色综合色 | 国产精品久久久久久久久久久久久久久 | 男女视频网站 | 国产午夜激情 | 欧美成人乱码一区二区三区 | 最好看的电影2019中文字幕 | zzjizzji亚洲日本少妇 | 日日操av | 日本老熟俱乐部h0930 | 欧美精品影院 | 在线免费观看黄 | 国产精品一区一区三区 | 黄色福利网站 |