我今天想到了一些javascript老人可能会回答。
在Mootools中创建多个类的估计DOM开销是多少?
良好的OO设计要求任何可重复使用的代码都应该在Class中。但是由于mootools中每个创建的类都明确地继承自“Class”,因此它当然会得到很多额外的实例化。
所以我的 - 或多或少的哲学 - 问题是,这会影响浏览器中的性能,因为所有代码都是在onload上实例化的,例如使用DTO模式,数组中有数百或数千个类,与简单相比对象。
笨重, 迈克尔
答案 0 :(得分:1)
右。我就是这样看的。首先,来自@keeto的引用:
''最后一部分很重要。虽然类是实现模块化代码的一种非常好的方法,但它们并不是唯一的方法。我发现现在有些开发人员使用类来解决所有问题,这是一种令人反感的倾向。就像众所周知的锤子一样,每个编码钉子都会使用类 - 这是不幸的,因为不是所有的东西都应该是类。
类非常适合创建可以跨项目使用的可重用代码,我个人坚持这个标准。除非我确定我正在建造的东西不止一次被使用,否则我不会把它变成一个类。如果您没有注意到,您可以使用MooTools而无需定义单个自定义类。毕竟,只是因为MooTools有类并不意味着你必须用JavaScript编写代码就像Java一样。 * ''
来源:http://keetology.com/blog/2010/10/01/modules-and-callbacks-going-hollywood-with-mootools
这是非常主观的,因为它在很大程度上取决于你如何编写你的类和javascript。
使用类不是没有惩罚和开销。根据您实例化的类的类型,这将有所不同。例如,如果您的类是一个简单的数据抽象,它不会触及其他对象或输出到DOM,那么创建实例相对便宜。成本将围绕处理选项对象和(有时)将属性复制到实例构造函数中。
在类定义本身期间,MooTools会遍历所有构造函数对象属性,并尝试处理所有特殊的和mutator(例如initialize
,Implements
,Extends
,{ {1}}(从 - 更多)等)。不过,这是一次性的。一旦创建了构造函数,就可以快速使用它。
它还将执行其他操作 - 它将包装所有具有函数值的属性,以便您可以将它们装饰为私有(在当前API中通过binds
),这样您运行的任何函数都将为您进行调整。此外,您经常使用.protect()
作为方法装饰器,这意味着运行的实际代码有2个包装器。
您的类越复杂(从不同的类原型扩展和实现),创建类的实例可能涉及的工作就越多。实际上,你需要创建一个绝对怪物来开始注意除了内存分配之外的任何东西(启动或垃圾收集的延迟)。当然,构造函数中的cpu-heavy或async / blocking东西也不会很好,如果你做的很多......
事件,事件监听器等也可以叠加起来。 保存的对象引用会随着时间的推移而堆积起来。
然后,有一些类绑定到DOM元素,添加事件,监听事件,导出自己的事件......
把它们放在一起,它可能会变得有些昂贵。您正在创建从许多地方继承(希望通过原型链引用)的对象。即便如此,您的类构造函数本身的定义也很快,直到您创建1000个实例才会开始变得有趣并且将现代浏览器放入测试中。