准备
作为计算时间的工具,本来打算用mocha,但是还不太会用,于是就手撸了一个很low的test函数。
function test(fn,arrNum,circleTimes,arr) {
var avgTime = [];
var testArr = [];
for(let i = 0; i < arrNum; i++) {
testArr.push(Math.random() * 100)
}
arr = arr || testArr;
for(let i=0;i<circleTimes;i++) {
var start = new Date().getTime();
fn(arr);
var end = new Date().getTime();
avgTime.push(end - start)
}
console.log(avgTime.reduce(function(a,b){a+=b;return a},0)/avgTime.length)
}
同时,也借着这个机会用了用webworker,js的单线程阻塞真不是好玩的。
使用webworker有一点需要注意,它必须在服务端上才能使用。
var ww = new Worker("http://worker.js");
var asc = new Promise((resolve, reject) => {
ww.onmessage = function(e) {
console.log(e.data);
resolve("该关闭webworker啦");
}
})
asc.then((msg) => {
ww.terminate();
console.log("webpack已关闭");
})
快速排序
function fast(arr) {
if (arr.length <= 1) {
return arr
}
var stad = Math.floor((arr.length - 1) / 2);
var stadEl = arr.splice(stad, 1)[0];
var l = [];
var r = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] < stadEl) {
l.push(arr[i])
} else {
r.push(arr[i])
}
}
return fast(l).concat(stadEl).concat(fast(r))
}
“`
这里遇到了一个问题,用数组和数字进行比较会极大的损耗性能。之前也完全不知道数组是可以和数字进行比较的。为了了解这个原理,特地在stackoverflow上问了,等待回答。