为什么V8不能优化try-catch-finally?

csv*_*van 8 javascript v8 node.js

为什么V8无法优化try-catch-finally块,而其他突出的运行时(SpiderMonkey,Chakra)似乎没有问题呢?

Paw*_*iel 8

除了该问题具有相对较低的优先级之外,没有特别的原因.

这将在某些时候进行优化

查看 chrome v8 issue 1065

如果你的目标是v8,你可以将try-catch移动到单独的函数,但是只有当它是一个真正的性能问题时才应该这样做,否则它只是过早的优化.

"程序员浪费了大量的时间来考虑或担心程序中非关键部分的速度,而这些效率尝试实际上在考虑调试和维护时会产生很大的负面影响.我们应该忘记效率低下,比如说97%的时间:过早优化是所有邪恶的根源.但我们不应该放弃我们在那个关键的3%中的机会" - 唐纳德·克努特

唯一可能永远不会优化的功能是

  • 具有"调试器"语句的函数
  • 调用eval()的函数
  • 包含"with"语句的函数

其他优化问题应该在某个时候修复.

  • 作为这个答案的后续后续,应该注意的是,V8中的新TurboFan编译器现在优化了try-catch-finally以及其他功能:https://news.ycombinator.com/item?id = 12178856 (3认同)