公共函數(shù)
- DJB算法
function genHash (str){
var hash = 5381;
str = str || '';
for(var i=0, len=str.length; i<len; ++i){
hash += (hash << 5) + str.charAt(i).charCodeAt();
}
return hash & 0x7fffffff;
}
- 補(bǔ)齊或截取九位長度
function cut(num){
return (genHash(num)+ "000000000").slice(0, 9);
}
兩種生成顏色方法
- for循環(huán)
//創(chuàng)建RGB顏色
function createRGBColor(num){
var uin = cut(num);var rgb = [];
for(var i = 0 ; i < uin.length ; i+=3 ){
var rgbnum = uin.substr(i,3) % 255;
if(rgbnum < 64) rgbnum += 64;
rgb.push(rgbnum);
}
return 'rgb(' + rgb.join(',') + ')';
}
timeline錄制耗時
Image.png
- 正則替換
function createRGBColor(num){
var colorString = "#" + (cut(num).replace(/(\d{3})/g, function($0) {
var c = $0 % 255;
if(c < 64) c += 64;
return c.toString(16);
}));
return colorString;
}
timeline錄制耗時
Image.png
大量計算測試(百萬次)
//DJB算法
function genHash (str){
var hash = 5381;str = str || '';
for(var i=0, len=str.length; i<len; ++i){
hash += (hash << 5) + str.charAt(i).charCodeAt();
}
return hash & 0x7fffffff;
}
//補(bǔ)齊或截取九位長度
function cut(num){
return (genHash(num)+ "000000000").slice(0, 9);
}
// console.log(cut('35467684654'));
//創(chuàng)建rgb(96,145,215)顏色
function createRGBColor(num){
var uin = cut(num);
var rgb = [];
for(var i = 0 ; i < uin.length ; i+=3 ){
var rgbnum = uin.substr(i,3) % 255;
if(rgbnum < 64) rgbnum += 64;
rgb.push(rgbnum);
}
var ret = 'rgb(' + rgb.join(',') + ')'return ret;
}
//創(chuàng)建#12F5V2顏色
function createRGBColorReg(num){
var colorString = "#" + (cut(num).replace(/(\d{3})/g, function($0) {
var c = $0 % 255;
if(c < 64) c += 64;
return c.toString(16);
}));
return colorString;
}
var TIMES = 1000;
var data = [,,,,,,];
//省略递递,上千數(shù)據(jù)的數(shù)組
var startCreateRGBColorReg = function() {
var ret = [];
console.time("createRGBColorReg");
for(var i = TIMES;i>0; i--) {
data.forEach(function(appid){
createRGBColorReg(appid);
});
}
console.timeEnd("createRGBColorReg");
return 1;
};
var startCreateRGBColor = function() {
var ret = [];
console.time("createRGBColor");
for(var i = TIMES;i>0; i--) {
data.forEach(function(appid){
createRGBColor(appid);
});
}
console.timeEnd("createRGBColor");
return 1;
};
var init = function() {
startCreateRGBColorReg();
startCreateRGBColor();
};
init();
測試數(shù)據(jù)
Image.png