Javascript中基于类的框架导致浏览器挂起

Class-based frameworks in Javascript cause browser to hang

本文关键字:浏览器 挂起 框架 于类 Javascript      更新时间:2023-09-26

我早些时候问过这个关于EXT的大型实现使浏览器崩溃的问题。

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

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

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

我不想在这里表现得迟钝。当我问"当你实例化1000个EXT组件时会发生什么",我得到的回答是"不要实例化那么多"时,响应者只是没有抓住要点。

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

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

如何将基于类的框架结构化为不同时实例化所有类?

但在浏览器中,脚本加载时间是有限的资源,大量基于类的系统必须同时编译,这是每个基于类的javascript框架的明显可扩展性问题:EXT.Backbone、Three.js等等。

有人能说明如何使这些框架具有可扩展性吗?

感谢的任何帮助

4000行代码根本不多。浏览器崩溃通常意味着无休止的自我维持循环,这些循环会消耗所有可用内存,因此一般来说,以下是一些可能的原因:

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

要调试,

  1. 获取每个框架的开发副本
  2. 在有罪构造函数中设置一些断点
  3. 使用javascript探查器来查看到底发生了什么

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

即使EXT的"延迟加载"也只是延迟对象的实例化,而不是类

ExtJS4确实能够只在需要的时候加载类(通过发出AJAX请求)。