我的主要问题如下:
当您希望人们与之交互的频繁访问功能(返回对象)时,信息隐藏会损害性能(CPU/内存)吗?
或者这是否被认为是微优化,尤其是在使用诸如node.js(long running process)之类的平台时。我是否应该考虑性能而不是信息隐藏?
通过阅读 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 引擎在性能方面取得了令人难以置信的进步,我想知道我是否应该考虑这一点,或者只是使用信息隐藏。
我猜我也有这个子问题:
我如何使用诸如 node.js 之类的平台有效地测量内存和 CPU?