TGViewer
Настоящий JavaScript Настоящий JavaScript @true_js · 5.89K subscribers
Post #3632 353
⁣Temporal.PlainDate.from под нагрузкой: високосные секунды и таймзоны, о которых молчит спецификация

Парсинг ISO-строк через Temporal в high-load системах может стать источником неочевидных багов и деградации производительности. Особенно когда в production приходят данные от устаревших сенсоров, логов или внешних API с високосными секундами или произвольными часовыми поясами. Частая ошибка — использовать Temporal.PlainDate.from напрямую с полной строкой, не учитывая, что парсер тратит ресурсы на разбор сущностей, которые затем игнорирует.

Високосные секунды и скрытые ошибки

Спецификация Temporal требует, чтобы PlainDate игнорировал временную часть, но при наличии 23:59:60 в строке V8 может выбросить RangeError. В production на Node 20+ мы зафиксировали 15% рост ошибок при обработке логов GPS-датчиков, передающих 2024-06-30T23:59:60Z. При этом сама дата 2024-06-30 корректна.
// Ошибка: RangeError из-за високосной секунды
const date = Temporal.PlainDate.from("2024-06-30T23:59:60Z");
// Рабочий вариант: отсекаем время до парсинга
const safe = Temporal.PlainDate.from("2024-06-30");


Производительность парсинга с таймзонами

Когда строка содержит полный offset и идентификатор зоны вроде +05:30[Asia/Kolkata], PlainDate.from вынужден разбирать всю строку до конца, хотя результат — только дата. Профилирование в Node 22 показало: 40% времени тратится на парсинг timezone, который затем отбрасывается. При 50k RPS latency на один вызов растёт в 3.5x по сравнению с обрезкой строки.

Практические меры защиты

В production стоит внедрить два правила. Первое: всегда обрезать строку до даты перед передачей в PlainDate.from — str.split('T')[0] даёт стабильное ускорение. Второе: валидировать високосные секунды на входе, отлавливая поле 60 в секундах. Использовать PlainDate.from только с форматом YYYY-MM-DD, если не требуется временная точность.

Вывод: При высоких нагрузках парсинг дат через Temporal требует предварительной очистки строк и явного выделения только необходимых компонентов, иначе неявные ошибки и деградация производительности неизбежны.
  • ❤ 1
More from @true_js
  1. Oct 3, 2026Post #3963
  2. Oct 2, 2026😅 Айтишник отправил в одну компанию три одинаковых резюме и только одно дошло до финала О…
  3. Oct 2, 2026Post #3961
  4. Oct 2, 2026🤣 Правильно расставленные приоритеты в моей жизни би лайк: 💥 xCode Journal
  5. Oct 1, 2026🤯 Люди взбунтовались против «пыточной для ИИ» На GitHub заметили открытый проект AI Tortu…
  6. Oct 1, 2026День в Заонежье начинается ещё в дороге. Мы встретим вас в аэропорту или на вокзале. Дальш…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →