和v8幹架之pow函式再實現

2021-08-07 22:52:33 字數 1296 閱讀 3957

環境是node,別的系統配置沒意義 ,相對比對,實現乙個pow函式,然後和v8的比下,順帶試試各種優化效能的江湖傳說

function pow(x,e);
很眼熟,基本和c裡面差不多

然後本著遞迴不靠譜,先實現乙個用棧模擬遞迴的陣列實現

function pow(x,e)

else

if(i==2)

else

else }};

for(i=(m.length-1);i>0;i--)

return

m[0];

};

**量一下子上來,然後測試,大概就是給個時間間隔,中間跑很多次函式結果:

native:70,code1:11000;code2:13000

嗯,這是個假陣列實現,還不如遞迴,可見一般情況下,遞迴還是不錯的選擇,但是,如果再想下,思考點什麼邪術,就可以幹一波大事了

首先考慮一下,pow的指數值其實是侷限的,或者說大了也沒啥卵用,然後呢,這種二分對幹的情況,,不由得想起了二進位制,的確可以,細節略過,反正就是對比一下陣列模擬,來個二進位制模擬,這裡用了es6的位操作(c裡面很常見的套路),然後用了系統計算函式(罪過罪過,說不定就是靠這個函式優化的效能),然後有了下面版本

function

pow(x,e)

else

}return res ;

};

效果是:native:90,code3:1000

真是飛躍。。。。

接著實驗各種邪術江湖傳聞,比較靠譜的是:

避免全域性查詢,將res等變數宣告為全域性,大概慢兩倍或者更多

然後之前陣列實現時,將push換為索引,沒啥大的改變。

將內部var宣告為let,大概也是慢兩倍多,安全和效率會有衝突

而使用arguments來直接用實參比用形參訪問慢(要計算)

然後有些不靠譜(可能我說的不對):

明確迴圈終止條件,while比for(;;)好什麼的,,沒啥用

非同步,這個不考慮,沒啥用

然後,發現了乙個天大的秘密,用幾個函式一層層套,居然執行更快了,,,,不過3層左右就可以了,套個9層還是會變慢

然後還有if..eles 比switch ..case好,可能ie會好,不過因此變成了個逼格不錯的樣子

function

pow(x,e)

return res ;

};

果然搞個這個條件選擇就是感覺不一樣了,但其實也沒怎麼快

python呼叫v8 C 中使用v8

今天編譯了v8,現在v8編譯是依賴gyp是谷歌乙個用python寫的工作方便 管理,可以生成多種專案檔案。1.編譯v8 svn checkout v8 svn co build gyp gyp svn co third party cygwin svn co third party python 2...

v8引擎和v12引擎 深入V8引擎 AST 2

先宣告一下,這種長系列的大塊頭部落格只能保證盡可能的深入到每一行原始碼,有些 我不樂意深究就寫個注釋說明一下作用。另外,由於本地整理的比較好,部落格就隨心寫了。bool parseprogram parseinfo info,isolate isolate 所需要關心的核心 就是這些,非常簡單,pa...

csdn部落格的css樣式 v8

馬永佔,myz,mayongzhan csdn伺服器不行了,這次是對部落格上的頭像下手了,頭像被去掉,並且統計資訊也一起去掉,大快人心!特此去掉手動刪除統計資訊的 全部 如下 subscriptionlist csdnblog allwrap csdnblog sidebar csdnblog si...