A5下载 - 努力做内容最丰富最安全的下载站!

A5站长下载站

当前位置:A5下载 > 编程开发 > 网站开发 > javascript日期处理函数,性能优化批处理

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

时间:2015-09-06 16:02作者:yezheng人气:89

 其实网上写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 : "jefflan@live.cn"

};

/**

* 方便于添加和重写类的属性

* @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);

标签javascript,日期,处理,函数,性能,优化,批处理

相关下载

查看所有评论+

网友评论

网友
您的评论需要经过审核才能显示

公众号