javascript - 实例化多个 Mootools 类的性能开销

标签 javascript performance dom mootools

今天灵机一动,或许有javascript的前辈可以解答一下。

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

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

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

沉重的是, 迈克尔

最佳答案

没错。这是我的看法。首先,引自@keeto:

保持优雅

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

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


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

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

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

在类定义过程中,MooTools 会遍历所有构造函数对象属性并尝试处理所有特殊属性和修改器(例如,initializeImplements扩展绑定(bind)(来自-更多)等)。不过,这是一次性的。创建构造函数后,您可以快速使用它。

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

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

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

然后,就是绑定(bind)DOM元素的类,添加事件,监听事件,导出自己的事件...

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

关于javascript - 实例化多个 Mootools 类的性能开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10190317/

相关文章:

php - 我如何使用 php 和 dom 获得第一个、第二个和第三个 TD 值

javascript - 返回图像作为元素的背景

javascript - 如何处理 AngularJS 中文本输入的条件焦点和选择?

javascript - 代码没有执行,可能有语法问题,或者我可能完全错了

Python Pandas - 使用列表理解来连接数据框

sql - 对 Oracle 数据库使用 ORDER BY dbms_random.value 时的性能问题

javascript - 当给定 xmlns 时,DOM XPath 查询不起作用

javascript - polymer 纸输入掩模

javascript - react | UseCallBack 内的 Prop 未在自定义 Hook 内更新

php - 确定数据中的连胜