Yyyy-aa-gg [ss: dd: ss] bir Date nesnesine ayrıştırmak için gerçekten hızlı bir yol bulmaya çalışıyorum. İşte bunu yapmaya çalıştığım 3 yol ve her yöntemin 50.000 tarih aralığı dizesini ayrıştırma zamanları.Actionscript 3 - yyyy-aa-gg'yi ayrıştırmanın en hızlı yolu ss: dd: bir Date nesnesine ss?
Bunu yapmanın daha hızlı yollarını veya yöntemleri hızlandırmak için ipuçları bilen var mı?
castMethod1 takes 3673 ms
castMethod2 takes 3812 ms
castMethod3 takes 3931 ms
Kodu:
private function castMethod1(dateString:String):Date {
if (dateString == null) {
return null;
}
var year:int = int(dateString.substr(0,4));
var month:int = int(dateString.substr(5,2))-1;
var day:int = int(dateString.substr(8,2));
if (year == 0 && month == 0 && day == 0) {
return null;
}
if (dateString.length == 10) {
return new Date(year, month, day);
}
var hour:int = int(dateString.substr(11,2));
var minute:int = int(dateString.substr(14,2));
var second:int = int(dateString.substr(17,2));
return new Date(year, month, day, hour, minute, second);
}
-
private function castMethod2(dateString:String):Date {
if (dateString == null) {
return null;
}
if (dateString.indexOf("0000-00-00") != -1) {
return null;
}
dateString = dateString.split("-").join("/");
return new Date(Date.parse(dateString));
}
-
private function castMethod3(dateString:String):Date {
if (dateString == null) {
return null;
}
var mainParts:Array = dateString.split(" ");
var dateParts:Array = mainParts[0].split("-");
if (Number(dateParts[0])+Number(dateParts[1])+Number(dateParts[2]) == 0) {
return null;
}
return new Date(Date.parse(dateParts.join("/")+(mainParts[1]?" "+mainParts[1]:" ")));
}
Hayır, Date.parse Kaldıramayacaksan tire varsayılan olarak. Ve "0000-00-00"
gibi tarih saat dizeleri için null döndürmem gerekiyor.
Lütfen 3 örnek işlev için 50 K yinelemenin ne kadar sürdüğünü bize söyleyin, böylece perspektiften "saniyeden daha az" koyabilirsiniz. – bzlm
Var eşleşmeleri ve const anahtar sözcüğünü değiştirirseniz herhangi bir ekstra performans olacağını merak ediyorum. – UnknownJoe