相关疑难解决方法(0)

在JavaScript中创建多行字符串

我在Ruby中有以下代码.我想将此代码转换为JavaScript.什么是JS中的等效代码?

text = <<"HERE"
This
Is
A
Multiline
String
HERE
Run Code Online (Sandbox Code Playgroud)

javascript string heredoc multiline

2412
推荐指数
27
解决办法
137万
查看次数

为什么array.push有时比array [n] = value更快?

作为测试一些代码的副作用,我编写了一个小函数来比较使用array.push方法与直接寻址(array [n] = value)的速度.令我惊讶的是,推送方法通常表现得更快,特别是在Firefox中,有时在Chrome中.只是出于好奇:任何人都有解释吗?您可以在此页面找到测试(单击"数组方法比较")

javascript browser arrays performance firefox

69
推荐指数
4
解决办法
3万
查看次数

添加到数组时使用push方法或.length?

做的缺点是什么:

var myArray = [];
myArray[myArray.length] = val1;
myArray[myArray.length] = val2;
Run Code Online (Sandbox Code Playgroud)

代替:

var myArray = [];
myArray.push(val1);
myArray.push(val2);
Run Code Online (Sandbox Code Playgroud)

我确信push方法更"可接受",但是功能上有什么不同吗?

javascript

12
推荐指数
2
解决办法
1万
查看次数

为什么push方法比在Javascript中通过数组索引放置值要慢得多

我很不明白为什么这个测试:

http://jsperf.com/push-method-vs-setting-via-key

显示出来

 a.push(Math.random());
Run Code Online (Sandbox Code Playgroud)

比...慢十倍

 a[i] = Math.random();
Run Code Online (Sandbox Code Playgroud)

你能解释一下为什么会这样吗?什么魔法"推"使它变得如此之慢?(与其他有效的方法相比,这种方法很慢).

编辑

注意:推送测试是有偏见的.我每次迭代都会增加数组的大小!阅读仔细接受的答案!

基准测试结果

javascript arrays performance benchmarking hashtable

12
推荐指数
1
解决办法
8849
查看次数

为数组赋值的性能

代码优化在这里说,分析是优化javascript的第一步,建议的引擎是Chrome和Firefox的分析器.这些问题是他们以某种奇怪的方式告诉每个函数执行的时间,但我对它们没有很好的理解.最有用的方法是分析器会告诉每行执行的次数,以及每行可能花费的时间.这样就可以严格地看到瓶颈.但在实施/找到此类工具之前,我们有两种选择:

1)制作自己的计算器,计算某个代码块或行执行的时间和次数2)学会理解哪些是慢速方法,哪些不是

对于选项2,jsperf.com非常有帮助.我试图学习优化数组并在JSPERF.COM中进行速度测试.下图显示了5个主要浏览器的结果,发现了一些我之前不知道的瓶颈.

速度测试

主要调查结果如下:

1)尽管使用哪种方法进行分配,但为数组分配值要比分配给正常变量要慢得多.

2)在性能关键循环之前预初始化和/或预填充阵列可以显着提高速度

3)与将数值推入数组相比,数学三角函数不是那么慢(!)

以下是每项测试的解释:


1. non_array(100%):

变量以这种方式给出了预定义的值:

var non_array_0=0;
var non_array_1=0;
var non_array_2=0;
...
Run Code Online (Sandbox Code Playgroud)

在定时区域,他们被称为这样:

non_array_0=0;
non_array_1=1;
non_array_2=2;
non_array_3=3;
non_array_4=4;
non_array_5=5;
non_array_6=6;
non_array_7=7;
non_array_8=8;
non_array_9=9;
Run Code Online (Sandbox Code Playgroud)

上面是一个类似数组的变量,但似乎无法以其他方式迭代或引用这些变量作为对阵列的反对.还是有吗?

此测试中的任何内容都不比为变量赋值更快.


2. non_array_non_pre(83.78%)

与测试1完全相同,但变量未预先初始化或预先填充.速度是测试速度的83.78%.在每个测试的浏览器中,预填充变量的速度比未预先填充的速度快.因此,在任何速度关键循环之外初始化(并可能预填充)变量.

测试代码在这里:

var non_array_non_pre_0=0;
var non_array_non_pre_1=0;
var non_array_non_pre_2=0;
var non_array_non_pre_3=0;
var non_array_non_pre_4=0;
var non_array_non_pre_5=0;
var non_array_non_pre_6=0;
var non_array_non_pre_7=0;
var non_array_non_pre_8=0;
var non_array_non_pre_9=0;
Run Code Online (Sandbox Code Playgroud)

3. pre_filled_array(19.96%):

阵列是邪恶的!当我们丢弃正常变量(test1和test2)并将数组放入图片时,速度会显着降低.虽然我们进行了所有优化(预初始化和预填充数组),然后直接分配值而不进行循环或推送,但速度降低到19.96%.这非常难过,我真的不明白为什么会这样.这是我在这次测试中受到的主要冲击之一.数组是如此重要,我没有找到一种方法来制作没有数组的很多东西.

测试数据在这里:

pre_filled_array[0]=0;
pre_filled_array[1]=1;
pre_filled_array[2]=2;
pre_filled_array[3]=3;
pre_filled_array[4]=4;
pre_filled_array[5]=5;
pre_filled_array[6]=6;
pre_filled_array[7]=7;
pre_filled_array[8]=8;
pre_filled_array[9]=9;
Run Code Online (Sandbox Code Playgroud)

4. non_pre_filled_array(8.34%):

这与3的测试相同,但是数组成员不是预先初始化的,也不是预先填充的,只有优化是事先初始化数组: …

javascript arrays optimization

5
推荐指数
1
解决办法
1814
查看次数