Skip to content

Commit 38cbefb

Browse files
author
Wanasit Tanakitrungruang
committedMar 21, 2021
Fix: Performance improvement by reduce the usage of dayjs in results
1 parent fab8f51 commit 38cbefb

File tree

2 files changed

+37
-37
lines changed

2 files changed

+37
-37
lines changed
 

‎src/results.ts

+37-36
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,6 @@ export class ParsingComponents implements ParsedComponents {
4040
return null;
4141
}
4242

43-
date(): Date {
44-
return this.dayjs().toDate();
45-
}
46-
4743
isCertain(component: Component): boolean {
4844
return component in this.knownValues;
4945
}
@@ -104,49 +100,54 @@ export class ParsingComponents implements ParsedComponents {
104100
}
105101

106102
isValidDate(): boolean {
107-
let dateMoment = this.dayjs();
108-
if (this.isCertain("timezoneOffset")) {
109-
const adjustTimezoneOffset = this.get("timezoneOffset") - dateMoment.utcOffset();
110-
dateMoment = dateMoment.add(adjustTimezoneOffset, "minute");
111-
}
103+
const date = this.isCertain("timezoneOffset") ? this.dateWithoutTimezoneAdjustment() : this.date();
112104

113-
if (dateMoment.get("year") != this.get("year")) return false;
114-
if (dateMoment.get("month") != this.get("month") - 1) return false;
115-
if (dateMoment.get("date") != this.get("day")) return false;
116-
if (this.get("hour") != null && dateMoment.get("hour") != this.get("hour")) return false;
117-
if (this.get("minute") != null && dateMoment.get("minute") != this.get("minute")) return false;
105+
if (date.getFullYear() !== this.get("year")) return false;
106+
if (date.getMonth() !== this.get("month") - 1) return false;
107+
if (date.getDate() !== this.get("day")) return false;
108+
if (this.get("hour") != null && date.getHours() != this.get("hour")) return false;
109+
if (this.get("minute") != null && date.getMinutes() != this.get("minute")) return false;
118110

119111
return true;
120112
}
121113

122-
dayjs() {
123-
let result = dayjs();
124-
125-
result = result.year(this.get("year"));
126-
result = result.month(this.get("month") - 1);
127-
result = result.date(this.get("day"));
128-
result = result.hour(this.get("hour"));
129-
result = result.minute(this.get("minute"));
130-
result = result.second(this.get("second"));
131-
result = result.millisecond(this.get("millisecond"));
132-
133-
// Javascript Date Object return minus timezone offset
134-
const currentTimezoneOffset = result.utcOffset();
135-
const targetTimezoneOffset =
136-
this.get("timezoneOffset") !== null ? this.get("timezoneOffset") : currentTimezoneOffset;
137-
138-
const adjustTimezoneOffset = targetTimezoneOffset - currentTimezoneOffset;
139-
result = result.add(-adjustTimezoneOffset, "minute");
140-
141-
return result;
142-
}
143-
144114
toString() {
145115
return `[ParsingComponents {knownValues: ${JSON.stringify(this.knownValues)}, impliedValues: ${JSON.stringify(
146116
this.impliedValues
147117
)}}]`;
148118
}
149119

120+
dayjs() {
121+
return dayjs(this.date());
122+
}
123+
124+
date(): Date {
125+
const date = this.dateWithoutTimezoneAdjustment();
126+
return new Date(date.getTime() + this.getTimezoneAdjustmentMinute(date) * 60000);
127+
}
128+
129+
private dateWithoutTimezoneAdjustment() {
130+
const date = new Date(
131+
this.get("year"),
132+
this.get("month") - 1,
133+
this.get("day"),
134+
this.get("hour"),
135+
this.get("minute"),
136+
this.get("second"),
137+
this.get("millisecond")
138+
);
139+
140+
date.setFullYear(this.get("year"));
141+
return date;
142+
}
143+
144+
private getTimezoneAdjustmentMinute(date?: Date) {
145+
date = date ?? new Date();
146+
const currentTimezoneOffset = -date.getTimezoneOffset();
147+
const targetTimezoneOffset = this.get("timezoneOffset") ?? currentTimezoneOffset;
148+
return currentTimezoneOffset - targetTimezoneOffset;
149+
}
150+
150151
static createRelativeFromRefDate(
151152
refDate: Date,
152153
fragments: { [c in OpUnitType | QUnitType]?: number }

‎test/en/en_performance.test.ts

-1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,5 @@ test("Test - Benchmarking against whitespace backtracking", () => {
2222
expect(results.length).toBe(0);
2323
});
2424

25-
console.log(time);
2625
expect(time).toBeLessThan(1000);
2726
});

0 commit comments

Comments
 (0)
Please sign in to comment.