2012-07-11 64 views
0

我早些时候询问过this question有关EXT崩溃浏览器的大型实现。Javascript中的基于类的框架导致浏览器挂起

我现在已经发现这是主干和three.js的情况。似乎每个基于类的JavaScript库都有一个内置的可伸缩性限制,因为无法限制代码加载。

在每一种情况下是挂在浏览器中的事情是类的实例,而不是对象实例化。即使EXT的“延迟加载”也只会延迟实例化的对象,而不是在EXT甚至开始对象实例化阶段之前经常出现类和浏览器崩溃。

骨干试图通过分离代码到的意见,以解决这一问题,但只是尝试按次加载太多的代码,看着它崩溃。

我不想在这里呆过。当我询问'当你实例化1000个EXT组件时会发生什么',并且我得到回应,'不要实例化那么多',响应者完全忽略了这一点。

不要紧的代码是什么,它的可扩展性限制是什么的问题。

而且在EXT,骨干网和其他很多JS框架,基于类的实例是不是负载平衡。

如何基于类的框架结构来一次不实例的所有类?

但在浏览器,脚本加载时间是一种有限的资源和大量基于类的系统必须编译所有的一次,这是明确的可扩展性问题与每一个基于类的JavaScript框架:EXT。 Backbone,Three.js等等。

任何人都可以解释如何使这些框架可扩展吗?

任何帮助赞赏

+2

究竟是什么问题? – 2012-07-11 04:04:06

+0

更新了一个更具体的问题,谢谢! – BishopZ 2012-07-11 04:05:49

+2

你能提供导致上述崩溃的示例代码吗?哪些浏览器? – 2012-07-11 04:07:09

回答

4

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

  • 非命名空间框架的名称冲突
  • 超载原型与功能,并通过圆形物体迭代
  • 执行不力

要调试,

  1. 抢每一个框架
  2. 的发展副本设置一些断点到有罪构造
  3. 使用JavaScript探查器,看看到底发生了什么
+0

我很感谢你的建议,并且肯定会看到它如何成为其他人的好建议。我可以亲自证明,这不是“不好实施”的情况。 – BishopZ 2012-07-11 04:43:44

+0

@BishopZ如果你想测试这些框架是否被设计为一起工作,那么把你的整个应用程序排除在外,并尝试实例化一个对象。如果它使浏览器崩溃,这意味着你必须改变这些框架的工作方式。 ExtJS(v3早在几天前)曾经为每个其他框架都有适配器。 – 2012-07-11 05:01:48

+0

我很抱歉,但我不明白你的回复。你能进一步解释吗? – BishopZ 2012-07-11 05:24:55

0

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

即使EXT的“懒加载”仅延迟被实例化的对象,而不是类

ExtJS的4确实(通过使AJAX请求)有能力只加载类when they're needed