0

我之前问过这个问题,关于 EXT 的大型实现会导致浏览器崩溃。

我现在发现骨干网和three.js 也是如此。似乎每个基于类的 javascript 库都有一个内置的可伸缩性约束,因为没有办法限制代码加载。

在这些情况下,让浏览器挂起的是类实例化,而不是对象实例化。甚至 EXT 的“延迟加载”也只是延迟了对象的实例化,而不是类和浏览器崩溃通常发生在 EXT 甚至开始对象实例化阶段之前。

Backbone 试图通过将代码分离到视图中来解决这个问题,但只是尝试在每个视图中加载太多代码并观察它崩溃。

我不想在这里变得迟钝。当我问“当你实例化 1000 个 EXT 组件时会发生什么”并且我得到响应时,“不要实例化那么多”,响应者根本没有抓住重点。

代码是什么并不重要,重要的是可伸缩性限制是什么。

并且在 EXT、Backbone 和许多其他 JS 框架中,基于类的实例化不是负载均衡的。

如何构建基于类的框架以不一次实例化所有类?

但是在浏览器中,脚本加载时间是一种有限的资源,大量基于类的系统必须一次全部编译,这对于每个基于类的 JavaScript 框架来说都是明显的可伸缩性问题:EXT。Backbone、Three.js 等等。

谁能解决如何使这些框架具有可扩展性?

任何帮助表示赞赏

4

2 回答 2

4

4000行代码一点也不多。浏览器崩溃通常意味着无休止的自我维持循环,这些循环会反弹到另一个消耗所有可用内存,所以一般来说,这里有一些可能的原因:

  • 非命名空间框架的名称冲突
  • 用函数重载原型,并遍历循环对象
  • 执行不力

要调试,

  1. 获取每个框架的开发副本
  2. 在有罪的构造函数中设置一些断点
  3. 使用 javascript profiler 来查看到底发生了什么
于 2012-07-11T04:24:07.653 回答
0

这不是一个真正的答案,但我认为类/对象的区别在这种情况下并不相关。就 JavaScript 而言,一切都是对象。“类”只是某些框架(如 ExtJS)允许您使用的高级概念。

甚至 EXT 的“延迟加载”也只会延迟对象的实例化,而不是类

ExtJS 4 确实能够仅在需要时加载类(通过发出 AJAX 请求)。

于 2012-07-11T04:30:28.007 回答