JavaScript 类似于 C++ 的内联函数
JavaScript inline functions like in C++
未来的 ECMAScript 标准 and/or 是否有任何 grunt/gulp 模块可以像 C++ 一样在 JavaScript 中创建内联函数(或在某些地方内联普通函数调用)?
这是一个简单方法的例子,而不是向量的点积
Vector.dot = function (u, v) {
return u.x * v.x + u.y * v.y + u.z * v.z;
};
每次写的时候都想
Vector.dot(v1, v2)
我想确保 javascript 只是内联计算而不是调用函数
现代 JS 引擎在确定这样做是可能且有用时已经内联函数。
参见http://ariya.ofilabs.com/2013/04/automatic-inlining-in-javascript-engines.html。引用:
If you always worry about manual function inlining, this is a good time to revisit that thought. Simply write the code to be readable even if it means breaking the code into multiple small functions! In many cases, we can trust the modern JavaScript engines to automatically inline those functions.
我想你可以编写一个预处理器来处理 inline
关键字并进行必要的源代码重写(然后将其连接到 gulp 或 grunt,如果你坚持的话),但那样会似乎很复杂,坦率地说很可能不值得麻烦。
鉴于OP要求性能,我会尽力提供答案。
如果您正在针对 V8 引擎进行优化,您可以查看以下文章以了解内联了哪些函数,以及去优化如何影响您的代码。
http://floitsch.blogspot.com/2012/03/optimizing-for-v8-inlining.html
例如,如果您想查看 Vector.dot
是否内联,请使用以下命令行,其中 script.js
包含您的定义和调用代码:
d8 --trace-inlining script.js
优化算法因引擎而异,但内联概念应该几乎相同。如果您想了解其他引擎,请修改问题以包括确切的引擎,以便从 JS 引擎专家那里获得一些见解。
未来的 ECMAScript 标准 and/or 是否有任何 grunt/gulp 模块可以像 C++ 一样在 JavaScript 中创建内联函数(或在某些地方内联普通函数调用)?
这是一个简单方法的例子,而不是向量的点积
Vector.dot = function (u, v) {
return u.x * v.x + u.y * v.y + u.z * v.z;
};
每次写的时候都想
Vector.dot(v1, v2)
我想确保 javascript 只是内联计算而不是调用函数
现代 JS 引擎在确定这样做是可能且有用时已经内联函数。
参见http://ariya.ofilabs.com/2013/04/automatic-inlining-in-javascript-engines.html。引用:
If you always worry about manual function inlining, this is a good time to revisit that thought. Simply write the code to be readable even if it means breaking the code into multiple small functions! In many cases, we can trust the modern JavaScript engines to automatically inline those functions.
我想你可以编写一个预处理器来处理 inline
关键字并进行必要的源代码重写(然后将其连接到 gulp 或 grunt,如果你坚持的话),但那样会似乎很复杂,坦率地说很可能不值得麻烦。
鉴于OP要求性能,我会尽力提供答案。
如果您正在针对 V8 引擎进行优化,您可以查看以下文章以了解内联了哪些函数,以及去优化如何影响您的代码。
http://floitsch.blogspot.com/2012/03/optimizing-for-v8-inlining.html
例如,如果您想查看 Vector.dot
是否内联,请使用以下命令行,其中 script.js
包含您的定义和调用代码:
d8 --trace-inlining script.js
优化算法因引擎而异,但内联概念应该几乎相同。如果您想了解其他引擎,请修改问题以包括确切的引擎,以便从 JS 引擎专家那里获得一些见解。