Node.js Различия во времени выполнения при использовании одного и того же ввода

#node.js #algorithm

Вопрос:

У меня есть Node.js приложение (также использующее Express), которое выполняет итерацию большого объема JSON-данных. Грубо говоря, клиент нажимает кнопку, которая вызывает маршрут в моем заднем конце. Затем мое приложение получает некоторые идентификаторы и извлекает данные из другого внешнего API. После получения данных я создал объект Даты. Затем я повторяю данные и после завершения итерации создаю другой объект даты и регистрирую разницу во времени между ними, чтобы измерить время, затраченное на итерацию.

  1. 1-е нажатие кнопки: 100 мс.
  2. 2-е нажатие кнопки: 46 мс.
  3. 3-е нажатие кнопки: 42 мс.
  4. 4-е нажатие кнопки: 44 мс.

Время итерации всегда остается между 40-55 мс после первой. Если я перезапущу сервер и повторю процесс, время первой итерации вернется к — 100 мс, а остальное-к 40-55 мс.

Я действительно не уверен, почему я получаю такие большие изменения во времени выполнения только на первой итерации, но я предполагаю, что за кулисами может происходить какое-то кэширование, о котором я не знаю.

БОНУС Я хочу провести несколько тестов с данными разного размера, чтобы измерить сложность написанного мной алгоритма, но я не уверен, что это лучший подход. Обратите внимание, что меня не волнует, сколько времени требуется для извлечения данных, только время, необходимое для их повторения.

Ответ №1:

После более тщательного исследования того, как код соблюдается в Node.js (Движок V8), я обнаружил, что движок V8 использует компиляцию JIT (точно в срок).

Что касается вопроса, то при первом нажатии кнопки код, ответственный за обработку набора данных, компилируется во время выполнения. При следующем нажатии кнопки код уже скомпилирован, так как это происходит в той же среде выполнения => следовательно, изменения во времени итерации, например.