5

我今天有个想法,也许一些javascript前辈可以回答。

在 Mootools 中创建多个类时估计的 DOM 开销是多少?

好的 OO 设计要求任何可重用的代码都应该放在一个类中。但是由于 mootools 中创建的每个类都显式地继承自“类”,因此它当然会得到很多额外的实例化。

所以我的 - 或多或少的哲学问题是,与简单对象相比,这对浏览器中的性能有多大影响,因为所有代码都是在加载时实例化的,例如使用 DTO 模式在数组中包含数百或数千个类。

沉思地,迈克尔

4

1 回答 1

1

正确的。这是我的看法。首先,引用@keeto 的一句话:

保持优雅

''最后一部分很重要。虽然类是实现模块化代码的一种非常好的方法,但它们并不是唯一的方法。我发现现在有些开发人员有一种令人反感的倾向,即对所有事物都使用类。就像众所周知的锤子一样,每个编码钉都使用类——这是不幸的,因为并非所有事物都应该是类。

类非常适合创建可跨项目使用的可重用代码,我个人坚持这一标准。除非我确定我正在构建的东西会被多次使用,否则我不会把它变成一个类。如果您没有注意到,您可以使用 MooTools 而无需定义单个自定义类。毕竟,仅仅因为 MooTools 有类并不意味着您必须像使用 Java 一样使用 JavaScript 编写代码。* ''


资料来源:http: //keetology.com/blog/2010/10/01/modules-and-callbacks-going-hollywood-with-mootools

这是非常主观的,因为它在很大程度上取决于您通常如何编写类和 javascript。

使用类并非没有惩罚和开销。根据您实例化的类的类型,这会有所不同。例如,如果您的类是一个简单的数据抽象,不接触其他对象或输出到 DOM,那么制作实例相对便宜。成本将围绕处理选项对象和(有时)将属性复制到您的实例构造函数中。

在类定义本身期间,MooTools 会循环遍历所有构造函数对象属性并尝试处理所有特殊属性和突变体(例如,、、、initializeImplements来自-more)等)Extendsbinds不过,这是一次性的。创建构造函数后,您可以快速使用它。

它还会做其他事情——它将包装所有具有函数值的属性,以便您可以将它们装饰为私有(通过.protect()在当前 API 中),这样您运行的任何函数都会为您进行柯里化。此外,您通常也倾向于使用.bind()方法装饰器,这意味着运行的实际代码有 2 个包装器。

您的类越复杂(从不同的类原型扩展和实现),创建类实例的工作就越多。实际上,您需要创建一个绝对的怪物才能开始注意到这不是内存分配(启动延迟或垃圾收集)。当然,构造函数中的 cpu-heavy 或异步/阻塞的东西也不会很好,如果你做很多......

事件、事件监听器等也可以叠加。保存的对对象的引用会随着时间的推移而堆积起来。

然后,有类绑定到 DOM 元素,添加事件,监听事件,导出自己的事件......

将它们放在一起,它可能会变得有些昂贵。您正在创建从许多地方继承(希望通过原型链引用)的对象。即便如此,类构造函数本身的定义还是很快的,直到您创建了 1000 个实例,事情才会开始变得有趣,并对现代浏览器进行测试。

于 2012-04-26T15:51:05.803 回答