不确定这是否是一个新问题,所以如果你有任何好的来源,请参考。
我的团队正在开发一个大型 JS 图表项目,我们继承自以前的开发人员,他们大量使用内置对象原型来添加可重用代码。我们在 Date、Object 和其他内部对象中添加了许多新的实用函数,所以我猜他们是这样设计的,因为更改原型提供了更直观的 API。
另一方面,我们的组件受到性能/内存问题的困扰,我们应用了所有可能的优化和最佳实践。我找不到有关 API 设计的内容。我试图弄清楚用库代码植入内置对象的原型是否更好,而不是通过某种命名空间模式将它们组合到专用对象中。
问题是哪种设计更好?他们中的一个会比另一个获得性能和/或内存吗?
Date.prototype.my_custom_function = new function (...) {...};
var period = new Date();
period.my_custom_function();
对比
DateLib.my_custom_function // defined in a DateLib function
var period = new Date();
DateLib.my_custom_function(period);
谢谢,伙计们,任何帮助表示赞赏!
编辑:主要问题是我们的组件最终变成了一个笨拙的 JS 野兽,它减慢了一些移动设备的速度,尤其是旧设备,例如 iPad1 和早期的 Android ......我们已经做了很多优化,但我仍然看到一些有问题的部分。我想确定内置的原型污染是否是另一个需要研究的候选者。特别是,Date
and的Object
人大量加载了典型的库代码。例如,实际上my_custom_function
是一个很大的函数,它并不是Date
代码启动时原型上唯一的附加成员。Object
加载更多。大多数客户端代码没有使用这些附加功能,它是故意使用的 - 所以我们将决定我们最好坚持哪种方式:
- 继续使用原型污染设计
- 将可重用 API 重构为单独的库静态对象
老实说,我还没有运行性能基准测试,一旦我有时间就会这样做。如果有人有结果/想法将非常有帮助。