雅星娱乐:javascript日期处理函数,性能优化批处理

时间: 作者:办体

  

[javascript日期函数,性能优化,批处理]javascript日期处理函数,性能优化批处理

  

其实网上写javascript日期格式化的博文很多,大体都看了看,都还不错。唯一遗憾的是只顾着实现了功能,没对函数进行性能优化。

  
  俗话说:不要重复造轮子。google上找了一个比较不错的日期格式化函数,来开始我的优化之旅吧!

  
  google上找的这个日期函数化函数,估计大家都很眼熟,以前我也一直在用。先看看优化后和优化前的效率对比吧!

  
  1、优化之前的toDate函数(字符串转换成Date对象),重复执行1万次,耗时660毫秒  
  

  

javascript日期处置函数,对批处理做了性能优化  

  

2、优化之前的dateFormat函数(Date对象格式化成字符串),重复执行1万次,耗时676毫秒  
  

  

javascript日期处置函数,对批处理做了性能优化  

  

3、优化过后的toDate函数,重复执行1万次,耗时122毫秒  
  

  

javascript日期处置函数,对批处理做了性能优化  

  

4、优化后的dateFormat函数,重复执行1万次,耗时160毫秒  
  

  

javascript日期处置函数,对批处理做了性能优化  

  

为什么前后差别这么大,其实我也没做多少处理,只是为批处理做了一些缓存而已,认真观察所有网上那些日期格式函数,其实都是用正则进行匹配和替换。其实正则是很耗性能的,于是我在正则匹配的地方做了缓存,把匹配值建立索引。以后就不用每次都去做正则匹配了。

  
  
  无代码无真相,接下来看看真相吧!

  
  

  
  
  (function(window) {  var sinojh = {  Version : "1.2",  Copyright : "Copyright© sino-jh 2012",  Author : "Jeff Lan",  Email : ""  };  /**  * 方便于添加和重写类的属性  * @param {Object} attributes 添加的属性  */  Function.prototype.prototypes = function(attributes) {  for ( var a in attributes) {  this.prototype[a] = attributes[a];  }  };  /**  * 获取Url参数  * @param {String} parameter 参数名  * @return {String} 参数值  */  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 日期对象  * @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"  };  /**  * 将日期格式的字符串转换成Date对象  * @param {String} dateStr 日期格式字符串  * @param {String} dateStyle 日期格式  * @return {Date} 日期对象  */  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); 
                    
(责任编辑:admin)
				

推荐图片Related

相关文章Related

查看更多热门新闻


首页 | 特效插件 | 常用代码 | 样式素材 | 脚本代码 | css特效

Copyright © 2017-2018 雅星娱乐 版权所有

系统要求:本站自适应各终端浏览器分辨率

请使用Google、Firefox、IE9、百度浏览器登录网站

网站地图 | RSS订阅 | 雅星娱乐