快活林资源网 Design By www.csstdc.com
其实网上写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 "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 "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 "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 "(" + 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);
快活林资源网 Design By www.csstdc.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
快活林资源网 Design By www.csstdc.com
暂无评论...
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
2025年01月18日
2025年01月18日
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]