我有node.JS应用程序,它具有多次使用相同参数调用的方法。 (尝试组合的优化问题)
源代码非常庞大,我对它并不熟悉,我试图找到使用相同参数多次调用哪些方法,以便记住它们并提高算法的性能
因此,我尝试使用各自的参数拦截所有方法调用,将它们存储在 Set()中,并查看方法调用和唯一参数之间的区别。
我正在使用ES6代理对象,如下所示:
module.exports = function (app) {
const fitness = {
staticFunction: () => true,
normalize: (a, b) => {
return (fitness.staticFunction()) ? a+b : 0;
}
};
return process.traceMethodCalls(fitness); // injected my proxy here
};
然后,我可以查看 log 变量,了解 log.calls 与 log.params.size()之间的差异,以查看最佳候选人记忆。
这种技术效果很好,但显然不会拦截对象文字调用本身。 以下是(项目中的示例模块):
失败的示例message_level
执行后,我的日志变量中有规范化功能,但 staticFunction 却没有,因为它不是<\ n>调用拦截的对象,但直接调用健身。
拦截这些方法调用的最佳方法是什么?
答案 0 :(得分:2)
您可以像这样注入代理:
let fitness = { … };
fitness = process.traceMethodCalls(fitness);
return fitness;
或者,只是不要使用引用原始目标的函数。相反,请使用this
:
const fitness = {
staticFunction() { return true },
normalize(a, b) {
return (this.staticFunction()) ? a+b : 0;
}
};