解析日期格式的性能[javascript]

时间:2015-05-15 18:44:20

标签: javascript jquery performance date d3.js

我使用这3行来将日期从文本重新编码为某种d3格式(之后使用crossfilter& dc.js)。

我使用D3功能来执行此操作,但这3行正在减慢我的javascript
(当数据长度为10k记录时,每个约1000ms)。

我在纯JavaScript或jQuery中寻找更快的替代品 (我希望避免使用其他插件,因为性能受到威胁,但欢迎任何答案)

谢谢!

var formatDate = d3.time.format("%Y-%m-%d"); // ISO 2014-12-16
var inputFormatDate = d3.time.format("%d %b %Y"); // 16 Dec 2014

data.forEach(function (d, i) { 
    // (...)
    d.Released = inputFormatDate.parse(d.Released);
    d.DVD = inputFormatDate.parse(d.DVD); // e.g. Tue Dec 16 2014 00:00:00 GMT+0100 (CET)
    d.release_date = formatDate.parse(d.release_date);
    // (...)
}

2 个答案:

答案 0 :(得分:1)

很遗憾,解析相当于每个日期库中的最佳解析。我的建议:如果你知道日期的格式,那么使用String.substr获取相关属性,然后使用Date构造函数的new Date(year, month[, day[, hour[, minutes[, seconds[, milliseconds]]]]])格式来构建Date对象。在我的实验中,这应该解析d3.js解析器的大约20%的时间。

答案 1 :(得分:0)

例如,对于默认情况下在golang中使用的RFC3339 (%Y-%m-%dT%H:%M:%SZ),您可以使用

function parseDate(d) {
    // 2015-05-13T04:01:01Z
    return new Date(d.substr(0, 19));
}

替换

var parseDate = d3.time.format("%Y-%m-%dT%H:%M:%SZ").parse;

使用new Date()的第一个使用显着比d3的功能更快。

以下是JavaScript中原生支持的更多格式: http://www.w3schools.com/js/js_date_formats.asp