所以我读到了关于V8代码的函数式编程和优化,我决定检查bind函数是否可以被V8优化?
所以我阅读了本机javascript代码,并被这些代码行击中,
var newfn = function() {
// Combine the static args and the new args into one big array
var args = boundargs.concat(Array.prototype.slice.call(arguments));
return fn.apply(self, args);
};这几行代码清楚地表明,参数对象的处理将使返回的函数根据MDN由v8进行优化。所以问题是,他们的任何本地的选择,绑定我可以使用吗?
资源
发布于 2017-08-12 07:04:58
我将尝试把我的评论总结成一个答案。
您的问题引用了一些Javascript代码,这些代码实现了类似于Function.prototype.bind()的内容,并且来自Chromium资源库。老实说,我不知道该代码的来源,但是当我查看V8存储库,它代表了当前在V8上的活跃开发(据我所知),您引用的代码是找不到的。我查看了V8存储库中关于"bind“的35页搜索点击,并在您引用的代码中的注释中搜索了几个有些独特的单词,我在当前的V8存储库中找不到它们。
而且,在C++、这里和这里中有几个类似于Function.prototype.bind的“本机代码”实现。
因此,我的结论是,您从Chromium引用的类似绑定的Javascript代码目前不是V8的一部分,V8使用原生C++代码实现来实现不存在JS优化问题的Function.prototype.bind。因此,您关于寻找替换的问题实际上是无效的,因为Function.prototype.bind的内置实现似乎没有像您所关心的那样存在任何优化问题。
我熟悉您链接到的优化文档,以及如何非常小心地使用arguments对象,以避免破坏某些Javascript优化。但是,这个问题不适用于用本机Function.prototype.bind代码完成的C++实现,因为这些优化问题只适用于用Javascript编写的代码,而不是用C++编写的代码。
https://stackoverflow.com/questions/45646023
复制相似问题