Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
解析日期格式[javascript]的性能_Javascript_Jquery_Performance_Date_D3.js - Fatal编程技术网

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

解析日期格式[javascript]的性能,javascript,jquery,performance,date,d3.js,Javascript,Jquery,Performance,Date,D3.js,我使用这3行代码将日期从文本重新编码为某种d3格式(之后与crossfilter&dc.js一起使用) 我正在使用D3函数来实现这一点,但这三行代码降低了我的javascript速度 (数据长度为10k记录时,每个记录长度约为1000ms) 我在纯JavaScript或jQuery中寻找更快的替代方案。 (我宁愿避免使用其他插件,因为性能受到威胁,但任何答案都是受欢迎的) 谢谢 var formatDate = d3.time.format("%Y-%m-%d"); // ISO 2014-12

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

我正在使用D3函数来实现这一点,但这三行代码降低了我的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);
    // (...)
}

不幸的是,在几乎所有的日期库中,解析速度都非常慢,而不是最佳解析。我的建议是:如果您知道日期将采用的格式,那么使用
String.substr
获取相关属性,然后使用日期构造函数的
新日期(年、月[、日[、小时[、分钟[、秒[、毫秒]]]
格式来构建日期对象。在我的实验中,这应该占d3.js解析器解析时间的20%左右。

例如,对于默认在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;
第一个使用
newdate()
的运行速度大大快于d3的函数

以下是JavaScript本机支持的更多格式:

新日期('2014-12-16')怎么样?我准备了一个小测试:可能就这么简单。我正在测试,我看到的区别是空日期在之前返回null,现在返回无效日期。月份可以是'Nov'还是需要它是11?它需要是11。因此,您希望创建一个字典(在您的解析函数范围之外),并将其用于Nov->11查找。