实现多个Mootools类的性能开销

Mic*_*sen 5 javascript performance mootools dom

我今天想到可能有些javascript老人可以回答.

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

良好的OO设计要求任何可重复使用的代码都应该属于Class.但是,由于mootools中每个创建的类都明确地继承自"Class",因此它当然会得到很多额外的实例化.

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

笨拙地,迈克尔

Dim*_*off 1

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

\n\n

保持优雅

\n\n

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

\n\n

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

\n\n
\n\n

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

\n\n

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

\n\n

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

\n\n

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

\n\n

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

\n\n

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

\n\n

事件、事件侦听器等也可以堆叠起来。\n保存的对象引用将随着时间的推移而累积。

\n\n

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

\n\n

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

\n