欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

javascript日期處理函數(shù),性能優(yōu)化批處理

 更新時(shí)間:2015年09月06日 12:55:04   投稿:lijiao  
這篇文章主要介紹了javascript日期處置函數(shù),對(duì)批處理做了性能優(yōu)化,需要的朋友可以參考下

其實(shí)網(wǎng)上寫javascript日期格式化的博文很多,大體都看了看,都還不錯(cuò)。唯一遺憾的是只顧著實(shí)現(xiàn)了功能,沒對(duì)函數(shù)進(jìn)行性能優(yōu)化。
俗話說:不要重復(fù)造輪子。google上找了一個(gè)比較不錯(cuò)的日期格式化函數(shù),來開始我的優(yōu)化之旅吧!
google上找的這個(gè)日期函數(shù)化函數(shù),估計(jì)大家都很眼熟,以前我也一直在用。先看看優(yōu)化后和優(yōu)化前的效率對(duì)比吧!
1、優(yōu)化之前的toDate函數(shù)(字符串轉(zhuǎn)換成Date對(duì)象),重復(fù)執(zhí)行1萬次,耗時(shí)660毫秒

javascript日期處置函數(shù),對(duì)批處理做了性能優(yōu)化

2、優(yōu)化之前的dateFormat函數(shù)(Date對(duì)象格式化成字符串),重復(fù)執(zhí)行1萬次,耗時(shí)676毫秒

javascript日期處置函數(shù),對(duì)批處理做了性能優(yōu)化

3、優(yōu)化過后的toDate函數(shù),重復(fù)執(zhí)行1萬次,耗時(shí)122毫秒

javascript日期處置函數(shù),對(duì)批處理做了性能優(yōu)化

4、優(yōu)化后的dateFormat函數(shù),重復(fù)執(zhí)行1萬次,耗時(shí)160毫秒

javascript日期處置函數(shù),對(duì)批處理做了性能優(yōu)化

為什么前后差別這么大,其實(shí)我也沒做多少處理,只是為批處理做了一些緩存而已,認(rèn)真觀察所有網(wǎng)上那些日期格式函數(shù),其實(shí)都是用正則進(jìn)行匹配和替換。其實(shí)正則是很耗性能的,于是我在正則匹配的地方做了緩存,把匹配值建立索引。以后就不用每次都去做正則匹配了。

無代碼無真相,接下來看看真相吧!

(function(window) {
  var sinojh = {
    Version : "1.2",
    Copyright : "Copyright© sino-jh 2012",
    Author : "Jeff Lan",
    Email : "jefflan@live.cn"
  };
  /**
   * 方便于添加和重寫類的屬性
   * @param {Object} attributes 添加的屬性
   */
  Function.prototype.prototypes = function(attributes) {
    for ( var a in attributes) {
      this.prototype[a] = attributes[a];
    }
  };
  /**
   * 獲取Url參數(shù)
   * @param {String} parameter 參數(shù)名
   * @return {String} 參數(shù)值
   */
  sinojh.getUrlParameter = function(parameter) {
    if (!sinojh.getUrlParameter.cache) {
      var url = window.location.href;
      var paraString = url.substring(url.indexOf("?") + 1, url.length).split("&");
      var cache = {};
      for ( var i in paraString) {
        var j = paraString[i];
        cache[j.substring(0, j.indexOf("="))] = j.substring(j.indexOf("=") + 1, j.length);
      }
      sinojh.getUrlParameter.cache = cache;
    }
    return sinojh.getUrlParameter.cache[parameter];
  };
  /**
   * 日期格式化
   * @param {Date} date 日期對(duì)象
   * @param {String} formatStyle 格式化樣式
   * @return {String} 日期型字符串
   */
  sinojh.dateFormat = function(date, formatStyle) {
    formatStyle = formatStyle ? formatStyle : sinojh.dateFormat.settings.formatStyle;
    var time = {
      "M+" : date.getMonth() + 1,
      "d+" : date.getDate(),
      "h+" : date.getHours(),
      "m+" : date.getMinutes(),
      "s+" : date.getSeconds(),
      "S" : date.getMilliseconds()
    };
    if (formatStyle == sinojh.dateFormat.formatStyleCache) {
      var replaceCache = sinojh.dateFormat.replaceCache;
      if (replaceCache["y+"]) {
        formatStyle = formatStyle.replace(replaceCache["y+"].replace, (date.getFullYear() + "").substring(replaceCache["y+"].index));
      }
      for ( var k in time) {
        if (replaceCache[k]) {
          formatStyle = formatStyle.replace(replaceCache[k].replace, replaceCache[k].replace.length == 1 ? time[k] : ("00" + time[k]).substring(("" + time[k]).length));
        }
      }
    } else {
      sinojh.dateFormat.formatStyleCache = formatStyle;
      var replaceCache = {};
      if (new RegExp("(y+)").test(formatStyle)) {
        var index = 4 - RegExp.$1.length;
        replaceCache["y+"] = {
          replace : RegExp.$1,
          index : index
        };
        formatStyle = formatStyle.replace(RegExp.$1, (date.getFullYear() + "").substring(index));
      }
      for ( var k in time) {
        if (new RegExp("(" + k + ")").test(formatStyle)) {
          replaceCache[k] = {
            replace : RegExp.$1
          };
          formatStyle = formatStyle.replace(RegExp.$1, RegExp.$1.length == 1 ? time[k] : ("00" + time[k]).substring(("" + time[k]).length));
        }
      }
      sinojh.dateFormat.replaceCache = replaceCache;
    }
    return formatStyle;
  };
  sinojh.dateFormat.settings = {
    formatStyle : "yyyy-MM-dd hh:mm:ss"
  };
  /**
   * 將日期格式的字符串轉(zhuǎn)換成Date對(duì)象
   * @param {String} dateStr 日期格式字符串
   * @param {String} dateStyle 日期格式
   * @return {Date} 日期對(duì)象
   */
  sinojh.toDate = function(dateStr, dateStyle) {
    dateStyle = dateStyle ? dateStyle : sinojh.toDate.settings.dateStyle;
    var compare = sinojh.toDate.compare;
    var result = new sinojh.toDate.result();
    if (dateStyle == sinojh.toDate.settings.dateStyleCache) {
      var indexCache = sinojh.toDate.indexCache;
      for ( var k in compare) {
        if (indexCache[k]) {
          result[compare[k]] = dateStr.substring(indexCache[k].index, indexCache[k].index + indexCache[k].length);
        }
      }
    } else {
      var indexCache = {};
      for ( var k in compare) {
        if (new RegExp("(" + k + ")").test(dateStyle)) {
          var index = dateStyle.indexOf(RegExp.$1);
          var length = RegExp.$1.length;
          indexCache[k] = {
            index : index,
            length : length
          };
          result[compare[k]] = dateStr.substring(index, index + length);
        }
      }
      sinojh.toDate.indexCache = indexCache;
      sinojh.toDate.settings.dateStyleCache = dateStyle;
    }
    return new Date(result["y"], result["M"] - 1, result["d"], result["h"], result["m"], result["s"], result["S"]);
  };
  sinojh.toDate.compare = {
    "y+" : "y",
    "M+" : "M",
    "d+" : "d",
    "h+" : "h",
    "m+" : "m",
    "s+" : "s",
    "S" : "S"
  };
  sinojh.toDate.result = function() {
  };
  sinojh.toDate.result.prototypes( {
    "y" : "",
    "M" : "",
    "d" : "",
    "h" : "00",
    "m" : "00",
    "s" : "00",
    "S" : "000"
  });
  sinojh.toDate.settings = {
    dateStyle : "yyyy-MM-dd hh:mm:ss"
  };
  delete Function.prototype.prototypes;
  window.jh = sinojh;
}(this); 

相關(guān)文章

最新評(píng)論