1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      怎么使用javascript雪花算法生成隨機(jī)ID

      這篇文章主要介紹了怎么使用javascript雪花算法生成隨機(jī)ID的相關(guān)知識,內(nèi)容詳細(xì)易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇怎么使用javascript雪花算法生成隨機(jī)ID文章都會有所收獲,下面我們一起來看看吧。

      成都創(chuàng)新互聯(lián)公司堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站建設(shè)、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的饒平網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

      1、snowflake-id插件 

      import SnowflakeId from "snowflake-id";
      
      const guid = num => {
        const id= new SnowflakeId();
        return id.generate();
      };

      2、原生使用 

      var Snowflake = /** @class */ (function() {
        function Snowflake(_workerId, _dataCenterId, _sequence) {
          this.twepoch = 1288834974657n;
          //this.twepoch = 0n;
          this.workerIdBits = 5n;
          this.dataCenterIdBits = 5n;
          this.maxWrokerId = -1n ^ (-1n << this.workerIdBits); // 值為:31
          this.maxDataCenterId = -1n ^ (-1n << this.dataCenterIdBits); // 值為:31
          this.sequenceBits = 12n;
          this.workerIdShift = this.sequenceBits; // 值為:12
          this.dataCenterIdShift = this.sequenceBits + this.workerIdBits; // 值為:17
          this.timestampLeftShift = this.sequenceBits + this.workerIdBits + this.dataCenterIdBits; // 值為:22
          this.sequenceMask = -1n ^ (-1n << this.sequenceBits); // 值為:4095
          this.lastTimestamp = -1n;
          //設(shè)置默認(rèn)值,從環(huán)境變量取
          this.workerId = 1n;
          this.dataCenterId = 1n;
          this.sequence = 0n;
          if(this.workerId > this.maxWrokerId || this.workerId < 0) {
            thrownew Error('_workerId must max than 0 and small than maxWrokerId-[' + this.maxWrokerId + ']');
          }
          if(this.dataCenterId > this.maxDataCenterId || this.dataCenterId < 0) {
            thrownew Error('_dataCenterId must max than 0 and small than maxDataCenterId-[' + this.maxDataCenterId + ']');
          }
      
          this.workerId = BigInt(_workerId);
          this.dataCenterId = BigInt(_dataCenterId);
          this.sequence = BigInt(_sequence);
        }
        Snowflake.prototype.tilNextMillis = function(lastTimestamp) {
          var timestamp = this.timeGen();
          while(timestamp <= lastTimestamp) {
            timestamp = this.timeGen();
          }
          return BigInt(timestamp);
        };
        Snowflake.prototype.timeGen = function() {
          return BigInt(Date.now());
        };
        Snowflake.prototype.nextId = function() {
          var timestamp = this.timeGen();
          if(timestamp < this.lastTimestamp) {
            thrownew Error('Clock moved backwards. Refusing to generate id for ' +
              (this.lastTimestamp - timestamp));
          }
          if(this.lastTimestamp === timestamp) {
            this.sequence = (this.sequence + 1n) & this.sequenceMask;
            if(this.sequence === 0n) {
              timestamp = this.tilNextMillis(this.lastTimestamp);
            }
          } else {
            this.sequence = 0n;
          }
          this.lastTimestamp = timestamp;
          return((timestamp - this.twepoch) << this.timestampLeftShift) |
            (this.dataCenterId << this.dataCenterIdShift) |
            (this.workerId << this.workerIdShift) |
            this.sequence;
        };
        return Snowflake;
      }());
      
      console.log(new Snowflake(1n, 1n, 0n).nextId());
      //1141531990672150528n

      控制臺輸出1141531990672150528n為bigint格式, .toString()轉(zhuǎn)為字符串格式即可

      3、ES6使用

      import bigInt from "big-integer";
      
      const guid = () => {
        const Snowflake = /** @class */ (function() {
          function Snowflake(_workerId, _dataCenterId, _sequence) {
            // this.twepoch = 1288834974657;
            this.twepoch = 0;
            this.workerIdBits = 5;
            this.dataCenterIdBits = 5;
            this.maxWrokerId = -1 ^ (-1 << this.workerIdBits); // 值為:31
            this.maxDataCenterId = -1 ^ (-1 << this.dataCenterIdBits); // 值為:31
            this.sequenceBits = 12;
            this.workerIdShift = this.sequenceBits; // 值為:12
            this.dataCenterIdShift = this.sequenceBits + this.workerIdBits; // 值為:17
            this.timestampLeftShift = this.sequenceBits + this.workerIdBits + this.dataCenterIdBits; // 值為:22
            this.sequenceMask = -1 ^ (-1 << this.sequenceBits); // 值為:4095
            this.lastTimestamp = -1;
            //設(shè)置默認(rèn)值,從環(huán)境變量取
            this.workerId = 1;
            this.dataCenterId = 1;
            this.sequence = 0;
            if (this.workerId > this.maxWrokerId || this.workerId < 0) {
              throw new Error(
                'config.worker_id must max than 0 and small than maxWrokerId-[' + this.maxWrokerId + ']'
              );
            }
            if (this.dataCenterId > this.maxDataCenterId || this.dataCenterId < 0) {
              throw new Error(
                'config.data_center_id must max than 0 and small than maxDataCenterId-[' +
                  this.maxDataCenterId +
                  ']'
              );
            }
            this.workerId = _workerId;
            this.dataCenterId = _dataCenterId;
            this.sequence = _sequence;
          }
          Snowflake.prototype.tilNextMillis = function(lastTimestamp) {
            var timestamp = this.timeGen();
            while (timestamp <= lastTimestamp) {
              timestamp = this.timeGen();
            }
            return timestamp;
          };
          Snowflake.prototype.timeGen = function() {
            //new Date().getTime() === Date.now()
            return Date.now();
          };
          Snowflake.prototype.nextId = function() {
            var timestamp = this.timeGen();
            if (timestamp < this.lastTimestamp) {
              throw new Error(
                'Clock moved backwards. Refusing to generate id for ' + (this.lastTimestamp - timestamp)
              );
            }
            if (this.lastTimestamp === timestamp) {
              this.sequence = (this.sequence + 1) & this.sequenceMask;
              if (this.sequence === 0) {
                timestamp = this.tilNextMillis(this.lastTimestamp);
              }
            } else {
              this.sequence = 0;
            }
            this.lastTimestamp = timestamp;
            var shiftNum =
              (this.dataCenterId << this.dataCenterIdShift) |
              (this.workerId << this.workerIdShift) |
              this.sequence; // dataCenterId:1,workerId:1,sequence:0  shiftNum:135168
            var nfirst = new bigInt(String(timestamp - this.twepoch), 10);
            nfirst = nfirst.shiftLeft(this.timestampLeftShift);
            var nnextId = nfirst.or(new bigInt(String(shiftNum), 10)).toString(10);
            return nnextId;
          };
          return Snowflake;
        })();
      
        return new Snowflake(1, 1, 0).nextId();
      };

      guid()即可調(diào)用

      4、多次重復(fù)調(diào)用出現(xiàn)一樣id的bug

          console.log(guid(), new Date().getTime());
          console.log(guid(), new Date().getTime());
          console.log(guid(), new Date().getTime());
          console.log(guid(), new Date().getTime());
          console.log(guid(), new Date().getTime());
          console.log(guid(), new Date().getTime());
          console.log(guid(), new Date().getTime());
          console.log(guid(), new Date().getTime());
          console.log(guid(), new Date().getTime());
          console.log(guid(), new Date().getTime());
          console.log(guid(), new Date().getTime());
          console.log(guid(), new Date().getTime());

      怎么使用javascript雪花算法生成隨機(jī)ID

      修改如下

      import SnowflakeId from "snowflake-id";
      
      const guid = num => {
        const snowflake = new SnowflakeId();
        let arr = [];
        for (let i = 0; i < num; i++) {
          arr.push(snowflake.generate());
        }
        return num ? arr : snowflake.generate();
      };

      單個調(diào)用 guid()

      n個調(diào)用 guid(n)

      JavaScript有什么特點

      1、js屬于一種解釋性腳本語言;

      2、在絕大多數(shù)瀏覽器的支持下,js可以在多種平臺下運行,擁有著跨平臺特性;

      3、js屬于一種弱類型腳本語言,對使用的數(shù)據(jù)類型未做出嚴(yán)格的要求,能夠進(jìn)行類型轉(zhuǎn)換,簡單又容易上手;

      4、js語言安全性高,只能通過瀏覽器實現(xiàn)信息瀏覽或動態(tài)交互,從而有效地防止數(shù)據(jù)的丟失;

      5、基于對象的腳本語言,js不僅可以創(chuàng)建對象,也能使用現(xiàn)有的對象。

      關(guān)于“怎么使用javascript雪花算法生成隨機(jī)ID”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“怎么使用javascript雪花算法生成隨機(jī)ID”知識都有一定的了解,大家如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


      當(dāng)前名稱:怎么使用javascript雪花算法生成隨機(jī)ID
      當(dāng)前地址:http://www.ef60e0e.cn/article/iggocd.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        湖州市| 广饶县| 五原县| 武安市| 南通市| 文安县| 津南区| 格尔木市| 长汀县| 如皋市| 诏安县| 海丰县| 靖江市| 抚州市| 杨浦区| 武隆县| 美姑县| 稻城县| 赤峰市| 建昌县| 普定县| 江城| 云林县| 聂荣县| 荣昌县| 城市| 建始县| 郓城县| 秦皇岛市| 道孚县| 彭泽县| 德昌县| 茶陵县| 都匀市| 广宁县| 广平县| 中山市| 怀柔区| 赣州市| 靖西县| 龙井市|