JavaScript对象初始化时间是否取决于变量和函数的数量?

JavaScript对象初始化时间是否取决于变量和函数的数量?,javascript,prototype,performance,Javascript,Prototype,Performance,问题1:如果JavaScript对象有大量变量和函数,那么初始化它会花费更多的时间吗 问题2:大型JavaScript(.js)文件大小是否是性能问题 例如: 我正在使用Prototype创建一个JavaScript对象,示例代码如下: function SimpleObject(){ // no variables and functions attached to it } function RootObject(){ var one = "one"; var two

问题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
相比会花费更多的时间吗

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

  • 是的,因为它需要由浏览器下载(因此越大-越慢),而不是由js引擎解析(同样,越大-越慢)

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

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

  • 是的,因为它需要由浏览器下载(因此越大-越慢),而不是由js引擎解析(同样,越大-越慢)

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

  • 不会。实例化一个新对象所需的大部分时间将由构造函数中的操作决定
  • 拥有大量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++和其他一些程序在生成可用的机器代码之前必须进行链接和优化。并不是说在编程语言上“解析很容易”,但它不是性能最密集的部分

  • 不会。实例化一个新对象所需的大部分时间将由构造函数中的操作决定
  • 拥有大量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++和其他一些程序在生成可用的机器代码之前必须进行链接和优化。这并不是说在编程语言上“解析很容易”,但它不是性能最密集的部分。

    问题一:

    使对象更复杂,包括成员、函数等将增加实例化它所需的时间。我在这里编写了一个简单的jsPerf测试来证明这一点:

    但需要注意的是,你仍然在每秒创建数十万个对象——这几乎不慢,即使对于非常复杂的对象也是如此

    问题二:

    大文件之所以有问题,只是因为它们的大小决定了客户端必须下载它们。缩小代码将有助于实现这一点。e、 g.

    问题一:

    使对象更复杂,包括成员、函数等将增加实例化它所需的时间。我在这里编写了一个简单的jsPerf测试来证明这一点:

    但需要注意的是,你仍然在每秒创建数十万个对象——这几乎不慢,即使对于非常复杂的对象也是如此

    问题二:


    大文件之所以有问题,只是因为它们的大小决定了客户端必须下载它们。缩小代码将有助于实现这一点。e、 g.

    如果
    子对象
    具有共享变量,则在原型中定义它们。在side
    构造函数中定义变量
    内存将更大。数据:。复杂对象的创建速度较慢(如您所料)。@RobH为什么不将其放入答案中?:-)@西蒙萨里斯谁工作