Вопросы и ответы для изучения Node.js

Node.js
Вопросы и ответы для изучения Node.js

Вопрос: Что такое Node.js?

О: Node.js — это JavaScript, работающий на веб-сервере, основанный на движке Chrome V8 и обладающий такими функциями, как неблокирующий и управляемый событиями ввод-вывод.

В: Подождите, вы только что упомянули движок Chrome V8, что это такое и почему вы используете его вместо других движков?

О: Механизм JavaScript — это программа или интерпретатор, выполняющий код JavaScript. Механизм JavaScript может быть реализован как стандартный интерпретатор или как интерактивный компилятор, который компилирует JavaScript в байт-код в той или иной форме. Его рабочий процесс примерно таков:

Одним из них является движок Chrome V8, разработанный Google и написанный на C++, и его рабочий процесс почти такой же, как на картинке выше:

V8 преобразует код JavaScript в более эффективный машинный код (процессоры IA-32, x86-64, ARM или MIPS), чем другие механизмы JavaScript преобразуют его в байт-код или интерпретируют его. Он реализован компилятором JIT (Just-In-Time) и не генерирует байт-код или какой-либо промежуточный код. И используйте такие методы, как встраивание, формы, встроенные кэши и т. д., чтобы повысить производительность.

Q: Отлично, теперь я немного знаю, для чего хорош движок Chrome V8, но методы, которые вы перечислили, действительно поражают меня.

A: Например, формы и встроенные кэши используются для оптимизации загрузки свойств объекта.

В: А?

A: Спецификация ECMAScript в основном определяет все объекты как словари со строковыми значениями ключей, сопоставленными со свойствами свойств, где[[]]Квадратные скобки — это то, как спецификация определяет свойства, которые не могут быть представлены непосредственно в JavaScript.

В: Он тоже так хранится в памяти?

A: Нет, нет, было бы пустой тратой места хранить это в памяти вот так. называть предметы одинаковой формыobject = { x: 7, y: 8 }, имена их атрибутов совпадают, а в полном словаре значений атрибутов есть только[[value]]разные.

Q: Это должно храниться отдельно, за исключением[[value]]Все имена свойств и остальные свойства хранятся отдельно. И у него должно быть свойство, которое сообщает движку JavaScript, где искать конкретное значение.

A: Да, двигатель будетShapeХранится отдельно, следующие JSObject просто магазины[[value]],Shapeесть одинOffsetСмещение, чтобы сообщить JavaScript, где искать конкретное значение:

Преимущество становится очевидным, когда есть несколько объектов одинаковой формы. Потому что им нужно только один раз сохранить свою форму и информацию об атрибутах ключ-значение!

В: Так оно и было, но какое отношение это имеет к встроенным кэшам?

О: Это очень важно. Фигуры в основном используются для реализации встроенных кэшей (ICs). Встроенные кэши являются одним из ключевых факторов быстрой работы JavaScript.

Вопрос:

A: Например, есть функция, которая получает свойство x от объекта, при выполнении в JSC (JavaScriptCore) будет сгенерирован следующий байт-код:

Встроенные кэши в первой инструкцииget_by_idинструкция, состоящая из двух неинициализированных слотов.

при вызове функцииgetX({ x: 'a' })Когда, как упоминалось ранее, объект{ x: 'a' }Есть свойство, которое содержитxShape, Shape содержит свойства смещения x и другие свойства, при выполнении первой функции атрибут будет иметь значение Shape и offset, хранящееся во встроенных кэшах:

При последующих вызовах этой функции Inline Caches нужно только сравнить Shape, и если он такой же, как и раньше, ему нужно только загрузить значение свойства из смещения. Это намного быстрее, чем каждый поиск.

Вопрос: Очень интересно!

О: V8 сделал гораздо больше: в грядущей версии 7.2 время парсинга значительно сокращено, время загрузки сокращено, а скорость отклика улучшена:

В: Хорошо, давайте не будем говорить о V8, меня очень интересует неблокирующий и управляемый событиями ввод-вывод, о котором вы упоминали ранее.

А:......

Продолжение следует

Ссылаться на