最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

javascript日期处理函数,性能优化批处理_基础知识

来源:动视网 责编:小采 时间:2020-11-27 21:43:19
文档

javascript日期处理函数,性能优化批处理_基础知识

javascript日期处理函数,性能优化批处理_基础知识:其实网上写javascript日期格式化的博文很多,大体都看了看,都还不错。唯一遗憾的是只顾着实现了功能,没对函数进行性能优化。 俗话说:不要重复造轮子。google上找了一个比较不错的日期格式化函数,来开始我的优化之旅吧! google上找的这个日期函数化函数,
推荐度:
导读javascript日期处理函数,性能优化批处理_基础知识:其实网上写javascript日期格式化的博文很多,大体都看了看,都还不错。唯一遗憾的是只顾着实现了功能,没对函数进行性能优化。 俗话说:不要重复造轮子。google上找了一个比较不错的日期格式化函数,来开始我的优化之旅吧! google上找的这个日期函数化函数,
 其实网上写javascript日期格式化的博文很多,大体都看了看,都还不错。唯一遗憾的是只顾着实现了功能,没对函数进行性能优化。
俗话说:不要重复造轮子。google上找了一个比较不错的日期格式化函数,来开始我的优化之旅吧!
google上找的这个日期函数化函数,估计大家都很眼熟,以前我也一直在用。先看看优化后和优化前的效率对比吧!
1、优化之前的toDate函数(字符串转换成Date对象),重复执行1万次,耗时660毫秒

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

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

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

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

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

(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日期处理函数,性能优化批处理_基础知识

javascript日期处理函数,性能优化批处理_基础知识:其实网上写javascript日期格式化的博文很多,大体都看了看,都还不错。唯一遗憾的是只顾着实现了功能,没对函数进行性能优化。 俗话说:不要重复造轮子。google上找了一个比较不错的日期格式化函数,来开始我的优化之旅吧! google上找的这个日期函数化函数,
推荐度:
标签: 时间 处理 日期
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top