Skip to content

Commit 8b39cdc

Browse files
committed
perf: Avoid redundant offset/abbr checks in tz.guess (non-Intl fallback)
1 parent 287820a commit 8b39cdc

File tree

1 file changed

+16
-6
lines changed

1 file changed

+16
-6
lines changed

moment-timezone.js

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -309,17 +309,21 @@
309309
function userOffsets() {
310310
var startYear = new Date().getFullYear() - 2,
311311
last = new OffsetAt(new Date(startYear, 0, 1)),
312+
lastOffset = last.offset,
312313
offsets = [last],
313-
change, next, i;
314+
change, next, nextOffset, i;
314315

315316
for (i = 1; i < 48; i++) {
316-
next = new OffsetAt(new Date(startYear, i, 1));
317-
if (next.offset !== last.offset) {
317+
nextOffset = new Date(startYear, i, 1).getTimezoneOffset();
318+
if (nextOffset !== lastOffset) {
319+
// Create OffsetAt here to avoid unnecessary abbr parsing before checking offsets
320+
next = new OffsetAt(new Date(startYear, i, 1));
318321
change = findChange(last, next);
319322
offsets.push(change);
320323
offsets.push(new OffsetAt(new Date(change.at + 6e4)));
324+
last = next;
325+
lastOffset = nextOffset;
321326
}
322-
last = next;
323327
}
324328

325329
for (i = 0; i < 4; i++) {
@@ -357,15 +361,21 @@
357361
var offsetsLength = offsets.length,
358362
filteredGuesses = {},
359363
out = [],
360-
i, j, guessesOffset;
364+
checkedOffsets = {},
365+
i, j, offset, guessesOffset;
361366

362367
for (i = 0; i < offsetsLength; i++) {
363-
guessesOffset = guesses[offsets[i].offset] || {};
368+
offset = offsets[i].offset;
369+
if (checkedOffsets.hasOwnProperty(offset)) {
370+
continue;
371+
}
372+
guessesOffset = guesses[offset] || {};
364373
for (j in guessesOffset) {
365374
if (guessesOffset.hasOwnProperty(j)) {
366375
filteredGuesses[j] = true;
367376
}
368377
}
378+
checkedOffsets[offset] = true;
369379
}
370380

371381
for (i in filteredGuesses) {

0 commit comments

Comments
 (0)