在 JavaScript 中使用 instanceof 运算符是性能问题吗? [关闭]

Posted

技术标签:

【中文标题】在 JavaScript 中使用 instanceof 运算符是性能问题吗? [关闭]【英文标题】:Is using instanceof operator in javascript a performance issue? [closed] 【发布时间】:2010-12-31 00:33:09 【问题描述】:

听说java中的instanceof操作符是个性能问题,

javascript 也是这样吗(IE6、IE7、IE8、FF、Chrome、safari 等)? 任何指向真实论文的链接都会有所帮助。

【问题讨论】:

您正在寻找确定性的东西,我明白了。但是“性能问题”并不是一个确定的问题。相反,它非常模糊。此外,性能问题需要以“A 或 B 是否需要更多内存/运行时间/其他可测量数量”的形式提出,其中 A 和 B 是不同的事物,产生相同的结果。因此,您需要将 instanceof 运算符与执行相同操作的其他运算符进行比较。 嗯,我的问题没有以正确的方式提出。 我想您可能会运行一个基准测试,它告诉您 instanceof 运算符需要 7 微秒(例如随机选择的数字)来执行。但是你必须问自己在一些实际代码的上下文中这意味着什么。 这应该是评论,而不是答案。 OP 显然要求提供有关instanceof 性能的论文/数据的链接,这并不含糊。 如果你想跳过臃肿,这里有一个 JSPerf:jsperf.com/instanceof-performance/2 【参考方案1】:

Java 不再是这样了——see here。

至于 Javascript,我找不到任何讨论这个问题的文章,但我非常怀疑 instanceof 会导致任何性能问题。如果您需要使用它,我会建议您使用它,然后仅在遇到性能问题时重新考虑。

【讨论】:

即使我没有找到任何这样说的文章,但我想,可能会有影响。仍在等待结论/基准结果...【参考方案2】:

您可以很容易地制作自己的 JavaScript 基准,类似于从 Kaleb 的链接链接的 this one。

【讨论】:

嗯。我也在做自己的测试,但我仍然希望参考有关此问题的文章或论文。【参考方案3】:

我自己并不担心 instanceof 运算符的性能,因为 JavaScript 本身很少会导致性能问题。 DOM 操作通常需要更多时间。但是,如果您需要在大量使用的循环中使用 instanceof,我建议您使用 FireBug 分析器对其进行分析。

【讨论】:

如果你认为它是前端 JavaScript。假设它是 Node.js... “JavaScript 本身很少是性能问题的原因”——也许是在 2009 年 :) 但在 2020 年,SPA 和大量数据以交互方式更新/加载,而且 DOM操作并不那么明显并且隐藏在框架中,“不担心”某事的性能就像告诉自己“准备好[未]预见的后果”【参考方案4】:

简而言之:它似乎取决于浏览器。

更详细: 我发现了这个 JSPerf 测试:http://jsperf.com/instanceof-performance/2 比较 JavaScript instanceof 检查与对象中现有/缺失属性的布尔检查。

总体结果(注意样本数量很少)是在 Chrome 中这两种方法都是相似的,但都具有 instanceof 的优点。然而,在 FF 中,属性检查比 instanceof 运算符快。 2017 年 4 月更新:正如 @ngryman 指出的:在最近的 FF 和 Chrome 版本中,进行属性检查似乎比 instenaceof 快得多。

用一个例子来扩展这个测试会很有趣,比如检查像obj.type == 'MyClass'这样的字符串比较是否对主题有很大的影响。

【讨论】:

2017年Chrome中,属性检查更快。 @ngryman 感谢您指出这一点。我已经更新了我的答案。

以上是关于在 JavaScript 中使用 instanceof 运算符是性能问题吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Javascript设计模式

javascript代码,希望高手分析解释一下下面这段函数是啥意思?谢谢了!

如何将 wei/eth 发送到合约地址? (使用 truffle javascript 测试)

深入理解javascript原型和闭包——instanceof

JavaScript克隆“类”实例[重复]

JavaScript克隆“类”实例[重复]