在Javascript中隐藏信息会牺牲性能
information hidding in Javascript will sacrifice performance?
我的主要问题如下:
当你有一个所需的频繁访问函数(返回对象)与之互动的人?
或者,这被认为是微优化,尤其是在使用node.js(长时间运行的进程)这样的平台时。我是否应该考虑性能而不是信息隐藏?
通过阅读Douglas Crockford关于信息隐藏的文章,我知道我可以添加私人成员和特权方法。但根据Douglas Crockford的这句话,原型机制可以帮助你保存记忆:
当一个成员被寻找,但在对象本身中找不到时它取自对象构造函数的原型成员。这个原型机制用于继承。它还能保存内存。
当只保存内存时,我想这可能没什么大不了的,因为内存一秒比一秒便宜。但根据John Resig的这篇文章,在原型链中添加大量属性也会更快(CPU)。
因此,如果您有一个频繁访问的函数(返回一个对象)如果你想让人们与之互动,那么对你有利使对象属性位于原型链中并实例化
用一堆原型属性实例化一个函数是非常,非常快。它完全打破了模块模式和类似模式水。因此,如果您有一个经常访问的函数(返回一个对象),然后它让对象属性在原型中对您有利链并实例化它。
// Very fast function User(){} User.prototype = { /* Lots of properties ... */ }; // Very slow function User(){ return { /* Lots of properties */ }; }
这也可能不是一个大问题,因为CPU的速度越来越快(摩尔定律)。此外,由于Javascript引擎在性能方面取得了令人难以置信的进步,我想知道我是否应该考虑这一点,或者只是使用信息隐藏。
我想我还有一个子问题:
如何使用类似的平台有效地测量内存和CPUnode.js示例?
这听起来确实像是你试图过度优化一些很少需要优化的东西。让你的成本首先是可靠的,其次是可由你或他人维护,然后在你得到需要优化的证据后,只优化真正需要优化的东西。
首先,将事情真正保密会增加复杂性。除非您真的非常需要隐私,否则您可能应该使用成员变量。
其次,实现隐私的闭包确实会产生某种内存消耗成本。每次使用的内存量很小,所以如果你真的需要隐私(第一点),那么除非你有很多这样的闭包,否则你可能不会注意到额外的消耗。
第三,如果你有很多这样的对象(例如数千个),并且你怀疑内存消耗实际上可能是一个重要问题,那么你可能应该在几个流行的浏览器中进行快速内存测试(一个版本带有私有闭包,另一个版本具有更简单的公共成员变量),看看有多大的差异。差异是特定于实现的,因此不同浏览器之间可能会有很大的差异。
根据这些测量结果,你可以决定走哪条路。
如果你没有数千个这样的对象,那么就用最简单的方式编写代码,以实现你的目标,并在运行应用程序后花时间做一些事情,让你知道它们真的很重要。
- 函数参数中的数据与指定变量之间的任何性能差异
- 提高JQuery的性能
- 使用正则表达式评估电子邮件地址时出现性能问题
- React:按键的性能提升
- 在Three.js中导出网格会提高性能吗
- 在javascript中搜索项目列表的性能
- 为什么在许多浏览器中drawImage()的性能略好于createPattern()
- JavaScript数组优化以提高性能
- React+Redux性能优化与组件ShouldUpdate
- 在循环中附加事件处理程序时出现浏览器性能问题
- JavaScript-===vs===运算符性能
- 超时功能的性能
- Pg承诺性能提升:在冲突中
- immutable.js与嵌套映射/对象的比较/相等性能
- NodeJ中的注释会影响性能吗
- 如果条件为循环-性能差异
- <脚本类型=“;模块“>负载性能
- 我应该如何将响应数据保存在对象(json)中以获得更好的操作和性能
- 错误编码的Adsense广告正在扼杀我的网站's的性能
- 在Javascript中隐藏信息会牺牲性能