日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

編寫高性能的 JavaScript

瀏覽:90日期:2023-11-15 18:35:53

編寫高性能的 JavaScript

本文的初衷是想介紹如何利用些簡單的代碼小技巧就能促進JavaScript編譯器的優化進程從而提升代碼運行效率。特別是在游戲這種對于垃圾回收速度要求較高,你性能稍微差點用戶就能見到白屏的地方。

Monomorphism:單態性

JavaScript中允許函數調用時候傳入動態參數,不過就以簡單的2參數函數為例,當你的參數類型、參數數目與返回類型動態調用時才能決定,編譯器需要更多的時間來解析。編譯器自然地希望能夠處理那些單態可預測的數據結構、參數統計等。

function example(a, b) { // we expect a, b to be numeric console.log(++a * ++b);};example(); // badexample(1); // still badexample('1', 2); // dammit megexample(1, 2); // good Constants:常量

使用常量能夠讓編譯器在編譯時即完成變量的值替換:

const a = 42; // we can easily unfold thisconst b = 1337 * 2; // we can resolve this expressionconst c = a + b; // still can be resolvedconst d = Math.random() * c; // we can only unfold ’c’// before unfoldinga;b;c;d;// after unfolding// we can do this at compile time!42;2674;2716;Math.random() * 2716; Inlining:內聯

JIT編譯器能夠找出你的代碼中被執行次數最多的部分,將你的代碼分割成多個小的代碼塊能夠有助于編譯器在編譯時將這些代碼塊轉化為內聯格式然后增加執行速度。

Data Types:數據類型

盡可能地多用Numbers與Booleans類型,因為他們與其他類似于字符串等原始類型相比性能表現更好。使用字符串類型可能會帶來額外的垃圾回收消耗。

const ROBOT = 0;const HUMAN = 1;const SPIDER = 2;let E_TYPE = { Robot: ROBOT, Human: HUMAN, Spider: SPIDER};// bad// avoid uncached strings in heavy tasks (or better in general)if (entity.type === 'Robot') { }// good// the compiler can resolve member expressions// without much deepness pretty fastif (entity.type === E_TYPE.Robot) { }// perfect// right side of binary expression can even get unfoldif (entity.type === ROBOT) { } Strict & Abstract Operators

盡可能使用 === 這個嚴格比較操作符而不是 == 操作符。使用嚴格比較操作符能夠避免編譯器進行類型推導與轉換,從而提高一定的性能。

Strict Conditions

JavaScript中的if語句也非常靈活,你可以直接在 if(a) then bla 這個類型的條件選擇語句中傳入隨意類似的a值。不過這種情況下,就像上文提及的嚴格比較操作符與寬松比較操作符一樣,編譯器需要將其轉化為多個數據類型進行比較,而不能立刻得出結果。當然,這并不是一味的反對使用簡寫方式,而是在非常強調性能的場景,還是建議做好每一個細節的優化:

let a = 2;// bad// abstracts to check in the worst case:// - is value equal to true// - is value greater than zero// - is value not null// - is value not NaN// ..if (a) { // if a is true, do something }// goodif (a === 2) { // do sth }// same goes for functionsfunction b() { return (!false);};if (b()) { // get in here slow}if (b() === true) { // get in here fast // the compiler knows a specific value to compare with} Arguments

盡可能避免使用arguments[index]方式進行參數獲取,并且盡量避免修改傳入的參數變量:

function mul(a, b) { return (arguments[0]*arguments[1]); // bad, very slow return (a*b); // good};function test(a, b) { a = 5; // bad, dont modify argument identifiers let tmp = a; // good tmp *= 2; // we can now modify our fake ’a’}; Toxicity:這些關鍵字有毒 Toxicity

如下列舉的幾個語法特性會影響優化進程:

eval

with

try/catch

同時盡量避免在函數內聲明函數或者閉包,可能在大量的運算中導致過多的垃圾回收操作。

Objecs

Object實例通常會共享隱類,因此當我們訪問或者設置某個實例的未預定義變量值的時候會創建一個隱類。

// our hidden class ’hc_0’class Vector { constructor(x, y) { // compiler finds and expects member declarations here this.x = x; this.y = y; }};// both vector objects share hidden class ’hc_0’let vec1 = new Vector(0, 0);let vec2 = new Vector(2, 2);// bad, vec2 got hidden class ’hc_1’ nowvec2.z = 0;// good, compiler knows this membervec2.x = 1; Loops

盡可能的緩存數組長度的計算值,并且盡可能在同一個數組中存放單個類型。避免使用 for-in 語法來遍歷某個數組,因為它真的很慢。另外,continue與break語句在循環中的性能也是不錯的,這一點使用的時候不用擔心。另外,盡可能將短小的邏輯部分拆分到獨立的函數中,這樣更有利于編譯器進行優化。另外,使用前綴自增表達式,也能帶來小小的性能提升。(++i代替i++)

let badarray = [1, true, 0]; // bad, dont mix typeslet array = [1, 0, 1]; // happy compiler// bad choicefor (let key in array) { };// better// but always try to cache the array sizelet i = 0;for (; i < array.length; ++i) { key = array[i];};// goodlet i = 0;let key = null;let length = array.length;for (; i < length; ++i) { key = array[i];}; drawImage

draeImage函數算是最快的2D Canvas API之一了,不過我們需要注意的是如果為了圖方便省略了全參數傳入,也會增加性能損耗:

// badctx.drawImage( img, x, y);// goodctx.drawImage( img, // clipping sx, sy, sw, sh, // actual stuff x, y, w, h);// much hax// no subpixel rendering by passing integersctx.drawImage( img, sx|0, sy|0, sw|0, sh|0, x|0, y|0, w|0, h|0);

來自:https://segmentfault.com/a/1190000007604645

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
精品国产中文字幕第一页| 一区二区三区四区日韩| 国产日产一区| 亚洲区国产区| 国产亚洲久久| 视频在线不卡免费观看| 丝袜国产日韩另类美女| 日本成人在线不卡视频| 麻豆中文一区二区| 日韩高清欧美| 美女久久一区| 国产精品亚洲欧美一级在线| 国产精品片aa在线观看| 国产一区二区三区四区五区 | 日本亚洲不卡| 精品久久久久中文字幕小说| 人人精品亚洲| 亚洲精品少妇| 成人免费电影网址| 婷婷精品在线| 日韩免费av| 日韩av中文字幕一区二区三区| 国产精品av一区二区| 国产综合婷婷| 国产欧美一区| 精品一区二区男人吃奶 | 国产亚洲福利| 狠狠久久伊人中文字幕| 日韩精品一级二级| 伊人久久高清| 久久av影院| 91大神在线观看线路一区| 久久亚洲精品中文字幕蜜潮电影| 日韩中文字幕一区二区高清99| 日韩精品麻豆| 精品免费av| 欧美一区久久| 久久精品主播| 在线天堂中文资源最新版| 欧美一区网站| 蜜桃视频一区二区三区在线观看| 欧美日韩国产观看视频| 国产精品美女在线观看直播| 久久xxxx| 99视频一区| 蜜臀av免费一区二区三区| 日本不良网站在线观看| 久久精品国产久精国产| 久久av综合| 欧美成人精品一级| 欧美精品国产一区| 日韩av一级片| 蜜臀久久99精品久久久画质超高清| 久久久久久久久久久9不雅视频| 精品视频一区二区三区在线观看| 国产精品欧美日韩一区| 91亚洲精品视频在线观看 | 99精品小视频| 久久免费黄色| 亚洲一卡久久| 日韩精品欧美大片| 婷婷综合国产| 成人国产精品一区二区网站| 亚洲日本国产| 国产乱码精品| 日韩精品免费一区二区夜夜嗨| 视频一区日韩精品| 国产精品久久久久9999高清| 欧美a在线观看| 欧美日韩精品免费观看视欧美高清免费大片 | 国产三级精品三级在线观看国产| 奇米狠狠一区二区三区| 久久伊人久久| 亚洲二区精品| 伊人久久亚洲热| 日韩精品免费一区二区夜夜嗨| 久久gogo国模啪啪裸体| 99tv成人| 7777精品| 国产99久久| 国产一级久久| 成人美女视频| 噜噜噜躁狠狠躁狠狠精品视频| 青草综合视频| 999久久久精品国产| 亚洲精品在线二区| 中文一区一区三区高中清不卡免费| 亚洲午夜精品久久久久久app| 日本不卡的三区四区五区| 国产欧美日韩精品一区二区免费 | 国产传媒在线观看| 亚洲我射av| 日韩毛片在线| 国产精品三p一区二区| 日韩午夜av| 国产一区二区三区视频在线| 国产精品社区| 国产精品原创| 国产欧美日本| 亚洲激情偷拍| 久久国产欧美| 精品久久久久久久| 国产精品国产三级在线观看| 亚洲少妇自拍| 国产v日韩v欧美v| 国产精品成人一区二区网站软件| 国产亚洲综合精品| 欧美 日韩 国产精品免费观看| 美女免费视频一区| 亚洲综合不卡| 91精品电影| 999久久久91| 久久久精品五月天| 欧美亚洲日本精品| 国产精品多人| 欧美有码在线| 青青青国产精品| 清纯唯美亚洲综合一区| 97成人超碰| 婷婷成人av| 欧美片网站免费| 亚洲人成亚洲精品| 亚洲乱码视频| 91久久精品无嫩草影院| 91亚洲无吗| 精品女同一区二区三区在线观看| 老牛国内精品亚洲成av人片| 国产毛片精品久久| 久久久91麻豆精品国产一区| 日韩免费精品| 国产极品嫩模在线观看91精品| 国产精品红桃| 麻豆视频在线观看免费网站黄 | 黄色av一区| 日本在线视频一区二区| 午夜国产欧美理论在线播放| 久久99国产精品视频| 日本免费在线视频不卡一不卡二| 欧美羞羞视频| 黑丝一区二区三区| 高清不卡亚洲| 日本精品不卡| 亚洲性色av| 国产资源在线观看入口av| 国产剧情在线观看一区| 日韩精品导航| 国产精品扒开腿做爽爽爽软件| 日韩精品一区二区三区中文在线| 99re国产精品| 日韩高清国产一区在线| 69堂免费精品视频在线播放| 麻豆久久一区| 国产不卡精品在线| 国产毛片一区| 久久国产精品免费一区二区三区| 国产伦一区二区三区| 国产欧美日韩视频在线| 日韩欧美一区二区三区免费看| 欧美日韩国产高清电影| 狠狠操综合网| 国产精品资源| 亚洲高清二区| 久久福利毛片| 水蜜桃久久夜色精品一区| 欧美一级精品| 久久亚洲二区| 久久99影视| 最新亚洲国产| 麻豆成人91精品二区三区| 高清不卡亚洲| 日韩中文字幕一区二区高清99| 国产一区二区三区成人欧美日韩在线观看 | 日韩精品欧美| 日韩一区二区免费看| 丁香婷婷久久| 欧美久久精品| 亚洲精品va| 免费一区二区三区在线视频| 99热国内精品| 国产精品专区免费| 国产精品一页| 免费国产自线拍一欧美视频| 色婷婷精品视频| 国产精品视频一区视频二区| 欧美aa国产视频| 久久影院资源站| 中文一区二区| 在线免费观看亚洲| 在线综合欧美| 久久精品国产68国产精品亚洲| 综合日韩av| 手机在线电影一区| 国产精品一页| 成人午夜网址| 国产一区二区精品久| 国产精品a久久久久| 奇米亚洲欧美| 欧美黄色一区二区| 欧美日本不卡高清| 亚洲三级观看|