如果Protractor正在取代Angular Scenario Runner进行E2E测试,这是否意味着我仍然可以将它与Karma一起用作我的E2E测试框架?
作为测试一些代码的副作用,我编写了一个小函数来比较使用array.push方法与直接寻址(array [n] = value)的速度.令我惊讶的是,推送方法通常表现得更快,特别是在Firefox中,有时在Chrome中.只是出于好奇:任何人都有解释吗?您可以在此页面找到测试(单击"数组方法比较")
例如:
Given time: 08:22 => Rounded to: 08:15
Given time: 08:23 => Rounded to: 08:30
Run Code Online (Sandbox Code Playgroud)
应该很简单.但我能够生成的只是冗长而不是很好的代码来解决这个问题.我的思绪一片空白.
问候
非常简单,但我只是想知道哪个更快.
我认为简单地乘以数字-1
比调用预定义方法要快得多,前提是您确定该值为负数.
但如果是这样,那么abs()
功能是什么?它是否只是为了确保返回的值始终是正值而不管值的符号?
我想保留一个字符串列表,我只会检查它是否存在,例如:
corporatePlan = [
'canDeAuthorize',
'hasGmailSupport',
'canShareReports',
'canSummonKraken',
'etc'
]
Run Code Online (Sandbox Code Playgroud)
因此,当用户试图召唤海妖时,我会corporatePlan.indexof('canSummonKraken') != -1
看看他是否可以.
同事建议将它作为对象存储会更快:
"Corporate Plan" = {
'canDeAuthorize' : null,
'hasGmailSupport' : null,
'canShareReports' : null,
'canSummonKraken' : null,
'etc' : null
}
Run Code Online (Sandbox Code Playgroud)
并且只'canSummonKraken' in corporatePlan
需要检查计划是否包含该密钥.这在经典的CS意义上是有意义的,因为当然"包含"是地图上的恒定时间和数组上的线性.这会检查数组和对象是如何在JS中引入的吗?
在我们的特殊情况下,使用少于100个元素,速度并不重要.但是对于更大的阵列,访问哪种方式会更快?
JavaScript中的道格拉斯·克罗克福德(Douglas Crockford)表示"转变通常比流行音乐慢得多".jsPerf 证实了这一点.有谁知道为什么会这样?从一个不成熟的角度来看,他们似乎做了几乎相同的事情.
为什么我的C++插件中的Google V8 JavaScript引擎的工作速度明显慢于Node.JS?
我试着编写一些简单的代码来生成JavaScript中的素数,并通过我的C++插件在V8中运行,直接在Node.JS中运行.
我非常震惊,因为两者都应该使用相同的JavaScript引擎,并且两者都执行相同的代码(时间以毫秒为单位,越少越好):
V8 in Node.JS: 495517
V8 in Node.JS C++ Addon: 623598
Run Code Online (Sandbox Code Playgroud)
这是JavaScript模块的源代码和运行相同JavaScript代码的C++插件的源代码(我认为问题不在interop中,因为测量时间直接在JS中工作):
index.js:
var jsInNodeJsPrimeGeneratorBenchmark = require("./javascript.js");
var jsInNativePrimeGeneratorBenchmark = require("./native");
console.log("V8 in Node.JS: ", jsInNodeJsPrimeGeneratorBenchmark.primeGeneratorBenchmark());
console.log("V8 in Node.JS C++ Addon: ", jsInNativePrimeGeneratorBenchmark.primeGeneratorBenchmark());
Run Code Online (Sandbox Code Playgroud)
javascript.js:
function primeGeneratorBenchmark() {
var result, primeNumberCounter, i, j, isPrime, start, end;
i = 3;
primeNumberCounter = 1;
start = Date.now();
while (primeNumberCounter < 100000) {
isPrime = true;
for (j = 2; j < i; j++) {
if (i % …
Run Code Online (Sandbox Code Playgroud) 我做了一些测试,发现它array.sort(function(a, b) { return a - b; });
比array.sort();
JavaScript 快得多.
结果令人震惊,IE9快1.7倍,FF7 1.6倍,Chrome浏览器6.7倍.
另外,通过我自己在JS中实现快速排序,我发现它比上面提到的两种方法都要快.(两种不同的实现,一种接受比较器函数作为参数,另一种不接受.两者都更快.)
有没有合理的解释?
编辑:我的实现:
没有比较者:
function quickSort(array, from, to) {
if(typeof from === 'undefined') {
from = 0;
to = array.length - 1;
}
else if(typeof to === 'undefined') {
to = array.length - 1;
}
if(to - from < 1) {
return;
}
var i = from, pivot = to, t;
while(i < pivot) {
if(array[i] > array[pivot]) {
t = array[i];
array[i] = array[pivot …
Run Code Online (Sandbox Code Playgroud) 在JavaScript中,您可以使用整数或字符串来获取和设置数组的索引和对象的"数字"属性,并获得相同的结果:
var a=[], o={};
a[1] = "foo"; a["1"] == "foo" // true
a["2"] = "bar"; a[2] == "bar" // true
a["-3"] = "baz"; a[-.3e1] == "baz" // true
o[1] = "foo"; o["1"] == "foo" // true
o["2"] = "bar"; o[2] == "bar" // true
o["-3"] = "baz"; o[-.3e1] == "baz" // true
Run Code Online (Sandbox Code Playgroud)
虽然字符串和数字是可互换的 - 对于获取和设置 - 哪个更快(对于数组和对象)?
我已经看到了来自不同语言的几个例子,这些例子毫不含糊地证明了连接列表(数组)的元素比连接字符串要快一些.不幸的是我没有找到解释原因?有人可以解释在两种操作下都能运行的内部算法,为什么这种算法比另一种更快.
这是我的意思的python示例:
# This is slow
x = 'a'
x += 'b'
...
x += 'z'
# This is fast
x = ['a', 'b', ... 'z']
x = ''.join(x)
Run Code Online (Sandbox Code Playgroud)
谢谢提前)
javascript ×10
performance ×8
angularjs ×1
arrays ×1
browser ×1
c++ ×1
firefox ×1
join ×1
karma-runner ×1
node.js ×1
protractor ×1
python ×1
sorting ×1
testing ×1
time ×1
v8 ×1