一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

【譯】編寫(xiě)高性能JavaScript

  英文鏈接:Writing Fast, Memory-Efficient JavaScript

  很多JavaScript引擎,如Google的V8引擎(被Chrome和Node所用),是專門為需要快速執(zhí)行的大型JavaScript應(yīng)用所設(shè)計(jì)的。如果你是一個(gè)開(kāi)發(fā)者,并且關(guān)心內(nèi)存使用情況與頁(yè)面性能,你應(yīng)該了解用戶瀏覽器中的JavaScript引擎是如何運(yùn)作的。無(wú)論是V8,SpiderMonkey的(Firefox)的Carakan(Opera),Chakra(IE)或其他引擎,這樣做可以幫助你更好地優(yōu)化你的應(yīng)用程序。這并不是說(shuō)應(yīng)該專門為某一瀏覽器或引擎做優(yōu)化,千萬(wàn)別這么做。

  但是,你應(yīng)該問(wèn)自己幾個(gè)問(wèn)題:

  • 在我的代碼里,是否可以使代碼更高效一些
  • 主流的JavaScript引擎都做了哪些優(yōu)化
  • 什么是引擎無(wú)法優(yōu)化的,垃圾回收器(GC)是否能回收我所期望的東西

加載快速的網(wǎng)站就像是一輛快速的跑車,需要用到特別定制的零件. 圖片來(lái)源: dHybridcars.

  編寫(xiě)高性能代碼時(shí)有一些常見(jiàn)的陷阱,在這篇文章中,我們將展示一些經(jīng)過(guò)驗(yàn)證的、更好的編寫(xiě)代碼方式。

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

  如果你對(duì)JS引擎沒(méi)有較深的了解,開(kāi)發(fā)一個(gè)大型Web應(yīng)用也沒(méi)啥問(wèn)題,就好比會(huì)開(kāi)車的人也只是看過(guò)引擎蓋而沒(méi)有看過(guò)車蓋內(nèi)的引擎一樣。鑒于Chrome是我的瀏覽器首選,所以談一下它的JavaScript引擎。V8是由以下幾個(gè)核心部分組成:

  • 一個(gè)基本的編譯器,它會(huì)在代碼執(zhí)行前解析JavaScript代碼并生成本地機(jī)器碼,而不是執(zhí)行字節(jié)碼或簡(jiǎn)單地解釋它。這些代碼最開(kāi)始并不是高度優(yōu)化的。
  • V8將對(duì)象構(gòu)建為對(duì)象模型。在JavaScript中對(duì)象表現(xiàn)為關(guān)聯(lián)數(shù)組,但是在V8中對(duì)象被看作是隱藏的類,一個(gè)為了優(yōu)化查詢的內(nèi)部類型系統(tǒng)。
  • 運(yùn)行時(shí)分析器監(jiān)視正在運(yùn)行的系統(tǒng),并標(biāo)識(shí)了“hot”的函數(shù)(例如花費(fèi)很長(zhǎng)時(shí)間運(yùn)行的代碼)。
  • 優(yōu)化編譯器重新編譯和優(yōu)化那些被運(yùn)行時(shí)分析器標(biāo)識(shí)為“hot”的代碼,并進(jìn)行“內(nèi)聯(lián)”等優(yōu)化(例如用被調(diào)用者的主體替換函數(shù)調(diào)用的位置)。
  • V8支持去優(yōu)化,這意味著優(yōu)化編譯器如果發(fā)現(xiàn)對(duì)于代碼優(yōu)化的假設(shè)過(guò)于樂(lè)觀,它會(huì)舍棄優(yōu)化過(guò)的代碼。
  • V8有個(gè)垃圾收集器,了解它是如何工作的和優(yōu)化JavaScript一樣重要。

  垃圾回收

  垃圾回收是內(nèi)存管理的一種形式,其實(shí)就是一個(gè)收集器的概念,嘗試回收不再被使用的對(duì)象所占用的內(nèi)存。在JavaScript這種垃圾回收語(yǔ)言中,應(yīng)用程序中仍在被引用的對(duì)象不會(huì)被清除。

  手動(dòng)消除對(duì)象引用在大多數(shù)情況下是沒(méi)有必要的。通過(guò)簡(jiǎn)單地把變量放在需要它們的地方(理想情況下,盡可能是局部作用域,即它們被使用的函數(shù)里而不是函數(shù)外層),一切將運(yùn)作地很好。

垃圾回收器嘗試回收內(nèi)存. 圖片來(lái)源: Valtteri Mäki.

  在JavaScript中,是不可能強(qiáng)制進(jìn)行垃圾回收的。你不應(yīng)該這么做,因?yàn)槔占^(guò)程是由運(yùn)行時(shí)控制的,它知道什么是最好的清理時(shí)機(jī)。

  “消除引用”的誤解

  網(wǎng)上有許多關(guān)于JavaScript內(nèi)存回收的討論都談到delete這個(gè)關(guān)鍵字,雖然它可以被用來(lái)刪除對(duì)象(map)中的屬性(key),但有部分開(kāi)發(fā)者認(rèn)為它可以用來(lái)強(qiáng)制“消除引用”。建議盡可能避免使用delete,在下面的例子中delete o.x 的弊大于利,因?yàn)樗淖兞薿的隱藏類,并使它成為一個(gè)"慢對(duì)象"。

var o = { x: 1 };delete o.x; // trueo.x; // undefined

it知識(shí)庫(kù)【譯】編寫(xiě)高性能JavaScript,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 欧美色视频网 | 国产日韩一区二区 | 91国高清视频 | 国产69页| 午夜视频在线免费 | 国产91精品系列在线观看 | 看成年全黄大色黄大片 | 欧美日本综合一区二区三区 | 久久91精品国产91久久户 | 久国产精品久久精品国产四虎 | 99热成人精品国产免男男 | 激情五月五月婷婷 | 色婷婷色99国产综合精品 | 成年ssswww网站| 色多多视频在线播放 | 精品亚洲一区二区三区在线播放 | 开心激情网五月天 | 亚洲激情五月 | 日韩免费视频在线观看 | 免费观看黄色网 | 99久久香蕉国产综合影院 | 国内精品福利视频 | 最新国产午夜精品视频成人 | 九九99久久精品午夜剧场免费 | 99久久国产综合精品网成人影院 | 伊人久久免费 | 欧美成人精品福利在线视频 | 午夜激情一区 | xxxx日日摸夜夜添夜夜添视频 | 亚洲国产综合精品中文字幕 | 影音先锋色偷偷米奇四色 | 国产精自产拍久久久久久蜜 | 国产原创中文字幕 | 精品一区二区三区视频在线观看免 | 国产第一页久久亚洲欧美国产 | 亚洲欧美在线综合一区二区三区 | 日本高清中文字幕一区二区三区a | 99久久精品国产麻豆 | 国产成人免费高清视频 | 欧美成人v视频免费看 | 免费人成综合在线视频 |