0

问题 1:如果 JavaScript 对象有大量变量和函数,它是否需要更多时间来初始化它?

问题 2:较大的 JavaScript(.js) 文件大小是否是性能问题?

例如:我正在使用 Prototype 创建一个 JavaScript 对象,我的示例代码如下:

function SimpleObject(){
     // no variables and functions attached to it
}
function RootObject(){
   var one = "one";
   var two = "two";
   .
   .
   var one_thousand = "One Thousand";
}
function Child_1_Object(){
    // n number of variables
}
.
.
function Child_1000_Object(){
    // n number of variables
}

RootObject.prototype.get_Child_1_Object = function(){
   return new Child_1_Object();
}
.
.
RootObject.prototype.get_Child_1000_Object = function(){
   return new Child_1000_Object();
}

以上所有代码都在一个 .js 文件中,该文件有 10k 行代码(10KLOC)。
我的问题是我什么时候会创建一个对象,与创建一个对象RootObject相比,它会花费更多的时间SimpleObject吗?

4

3 回答 3

1
  1. 确实。在快速的现代浏览器中,这些是毫秒(或更短),但每个变量都必须初始化,所以 10k 总是比 1 差。

  2. 它是,因为它需要由浏览器下载(所以越大 - 越慢),而不是由 js 引擎解析(再次 - 越大 - 越慢)

这是一个简单的数学,虽然 - 就像我之前说的 - 你只是初始化变量 - 延迟可以忽略不计,所以你不必担心。

于 2013-07-25T11:52:27.677 回答
1
  1. 不会。实例化新对象所需的大部分时间将取决于构造函数中所做的事情。
  2. 拥有大量 JavaScript(10k 甚至不是一个大的 JavaScript 文件)的主要问题仍然是它到底在做什么?当然,如果你有 10mb 的 JavaScript,一些 JavaScript 虚拟机可能会遇到性能问题,但我从未见过 Internet Explorer 7 会因 ExtJS 3.4 之类的东西而窒息,因为它有大约 2.5mb 的未压缩 JavaScript。

现在,下载速度可能是个问题,但解析 JavaScript 不是。所有这些都是用 C 或 C++ 编写的,并且运行速度非常快。当您只是在 JavaScript 中声明对象类型时,其中大部分只是代码解析并将原型分配为 JavaScript VM 中的已知类型。此时不必实际执行构造函数,因此您上面的代码将快速运行,直到您开始初始化对象。

解析 JavaScript 的另一件事是解析只是其他语言所采取的步骤之一。Java、C#、C、C++等也至少有一个将解析树转换为某种形式的目标代码的阶段。Java 和 C# 停在那里,因为它们的运行时必须即时进行额外的 JIT 编译和优化;C/C++ 和其他一些必须在生成可用机器代码之前进行链接和优化。并不是说在编程语言上“解析很容易”,但它不是性能最密集的部分。

于 2013-07-25T11:52:37.977 回答
1

问题一:

使用成员、函数等使对象更复杂,将增加实例化它所需的时间。我在这里写了一个简单的 jsPerf 测试来证明这一点:http: //jsperf.com/simple-vs-complex-object

不过需要注意的一点是,您仍然每秒创建数十万个对象 - 即使对于非常复杂的对象,它也不会很慢。

问题二:

大文件是有问题的,只是因为它们的大小就客户端必须下载它们而言。缩小代码将对此有所帮助。例如http://javascript-minifier.com/

于 2013-07-25T12:10:05.147 回答