js顏色生成器

公共函數(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ǔ)齊或截取九位長(zhǎng)度
function cut(num){
    return (genHash(num)+ "000000000").slice(0, 9);
}
兩種生成顏色方法
  1. 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錄制耗時(shí)

Image.png
  1. 正則替換
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錄制耗時(shí)

Image.png
大量計(jì)算測(cè)試(百萬次)
//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ǔ)齊或截取九位長(zhǎng)度
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();
測(cè)試數(shù)據(jù)
Image.png
測(cè)試證明:截?cái)嗖僮魇褂醚h(huán)的效率快于正則
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,725評(píng)論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,502評(píng)論 19 139
  • 提筆竟然開不了第一句,到底該寫些什么了,我絞盡腦汁,想了又想,還是不知道怎么開頭,明明早晨就已經(jīng)想好了的話題,現(xiàn)在...
    coffee漫閱讀 293評(píng)論 2 2
  • 光陰荏苒,轉(zhuǎn)眼之間來到五月。又是一年勞動(dòng)節(jié),也是出行旅游日。而我,這些都跟我不相干。 春天就要過去了,夏日還遠(yuǎn)么?...
    大野的竹閱讀 451評(píng)論 0 0

友情鏈接更多精彩內(nèi)容