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为什么不将其放入答案中?:-)@西蒙萨里斯谁工作