【发布时间】:2020-04-04 17:04:05
【问题描述】:
背景
我是 Node.js 中 fast object traversal 的低级库的维护者。该库的重点是速度,并且经过大量优化。但是有一个很大的放缓:回调参数
问题
回调由库使用者提供,每次扫描可以多次调用。对于每次调用,都会计算所有参数并将其传递给回调。在大多数情况下,回调实际上只使用了一小部分参数。
目标
目标是消除这些参数的不必要计算。
解决方案思路
- 理想情况下,NodeJs 会公开回调定义的回调参数。然而,如果没有大量的黑魔法(字符串解析),似乎不可能获得它们。它也无法解决仅有条件地需要参数的情况。
- 我们可以要求回调公开所需的参数,而不是尝试从回调中获取参数。这听起来很不方便且容易出错,而且也无法解决有条件的需求。
- 我们可以为每个参数组合引入不同的回调。这听起来是个坏主意。
- 我们可以为每个参数传入一个计算并返回参数值的函数,而不是直接传入参数。在回调内部,参数将根据需要被调用。这很丑陋,但可能是最好的方法?
问题
- 其他库如何解决这个问题?
- 还有什么其他方法可以解决这个问题?
这是一个非常基本的设计决策,我正在努力做到这一点。
非常感谢您的宝贵时间!一如既往的感激!
【问题讨论】:
-
据我所知,你的回调只有三个参数?
-
@Bergi 不幸的是没有。第三个参数是一个对象,里面隐藏了很多参数。
标签: javascript node.js optimization callback software-design