#node.js #algorithm
Вопрос:
У меня есть Node.js приложение (также использующее Express), которое выполняет итерацию большого объема JSON-данных. Грубо говоря, клиент нажимает кнопку, которая вызывает маршрут в моем заднем конце. Затем мое приложение получает некоторые идентификаторы и извлекает данные из другого внешнего API. После получения данных я создал объект Даты. Затем я повторяю данные и после завершения итерации создаю другой объект даты и регистрирую разницу во времени между ними, чтобы измерить время, затраченное на итерацию.
- 1-е нажатие кнопки: 100 мс.
- 2-е нажатие кнопки: 46 мс.
- 3-е нажатие кнопки: 42 мс.
- 4-е нажатие кнопки: 44 мс.
Время итерации всегда остается между 40-55 мс после первой. Если я перезапущу сервер и повторю процесс, время первой итерации вернется к — 100 мс, а остальное-к 40-55 мс.
Я действительно не уверен, почему я получаю такие большие изменения во времени выполнения только на первой итерации, но я предполагаю, что за кулисами может происходить какое-то кэширование, о котором я не знаю.
БОНУС Я хочу провести несколько тестов с данными разного размера, чтобы измерить сложность написанного мной алгоритма, но я не уверен, что это лучший подход. Обратите внимание, что меня не волнует, сколько времени требуется для извлечения данных, только время, необходимое для их повторения.
Ответ №1:
После более тщательного исследования того, как код соблюдается в Node.js (Движок V8), я обнаружил, что движок V8 использует компиляцию JIT (точно в срок).
Что касается вопроса, то при первом нажатии кнопки код, ответственный за обработку набора данных, компилируется во время выполнения. При следующем нажатии кнопки код уже скомпилирован, так как это происходит в той же среде выполнения => следовательно, изменения во времени итерации, например.