![](/img/trans.png)
[英]Is there a performance difference in JavaScript between “>” and “!=”?
[英]Performance difference between function initialization locations [JavaScript]
我對循環外初始化與內聯初始化之間的性能差異感到好奇:
循環外:
const reducer = (acc, val) => {
// work
};
largeArray.reduce(reducer);
排隊:
largeArray.reduce((acc, val) => {
// work
});
我經常遇到這種情況,除非我要重用該函數,否則避免使用內聯版本將另一個變量引入我的作用域似乎很有用。
這兩個示例在性能上是否存在差異,或者JS引擎是否對它們進行了相同的優化?
例如:是否在每次循環運行時創建內聯函數,然后進行垃圾回收? 如果是這樣:
還有其他差異或我不在考慮的事情嗎?
希望您理解我的思路,並可以對此提供一些見識。 我意識到我可以閱讀V8或其他引擎的所有文檔和源代碼,並且可以得到答案,但這似乎是理解該概念的一項艱巨任務。
我確實在jsben上進行了測試
SET1(隨機使用兩次): http : //jsben.ch/8Dukx
SET2 :(使用一次): http : //jsben.ch/SnvxV
設定
const arr = [ ...Array(100).keys() ];
const reducer = (acc, cur) => (acc + cur);
測試1
let sumInline = arr.reduce((acc, cur) => (acc + cur), 0);
let sumInlineHalf = arr.slice(0, 50).reduce((acc, cur) => (acc + cur), 0);
console.log(sumInline, sumInlineHalf);
測試2
let sumOutline = arr.reduce(reducer, 0);
let sumOutlineHalf = arr.slice(0, 50).reduce(reducer, 0);
console.log(sumOutline, sumOutlineHalf);
驚奇
這會對性能產生什么樣的影響,並且
沒有。
函數的大小是否會對此產生影響? 例如,一個200與30_000 Unicode字符的函數。
函數不會作為“ unicode字符”執行。 代碼有多“長”無關緊要。
還有其他差異或我不在考慮的事情嗎?
一個非常重要的代碼:代碼是為人類而不是計算機編寫的。 你為什么還要問我?
每次循環運行時都會創建內聯函數,然后再進行垃圾回收嗎?
那將是不必要和緩慢的。 大概吧:不。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.