-
Андрей Мелихов, ведущий разработчик в Яндекс Облаке, рассказывает о Node.js, его истории, применении и особенностях.
-
Node.js - это среда выполнения JavaScript на сервере, которая позволяет запускать JavaScript на стороне сервера.
-
Изначально Node.js был создан для решения проблемы асинхронного ввода-вывода, когда сервер не мог обрабатывать все запросы пользователей одновременно.
00:01:59 Примеры использования Node.js
-
Node.js используется для создания API, серверного рендеринга, и для работы с различными утилитами, такими как сокеты, файловая система и сетевые запросы.
-
Андрей демонстрирует, как создать простой сервер на Node.js, используя модуль http и функцию createServer.
00:07:51 Асинхронное исполнение в Node.js
-
Node.js использует асинхронное исполнение, что позволяет обрабатывать множество запросов пользователей одновременно.
-
Это достигается за счет использования callback-функций, которые вызываются после завершения асинхронных операций.
-
Андрей объясняет, что все асинхронные операции в Node.js приходят из окружения, а не из JavaScript.
00:10:45 Примеры использования асинхронного исполнения
-
Андрей демонстрирует, как использовать асинхронное исполнение для чтения файла, используя функцию readFile и callback-функцию.
-
Он также объясняет, что все операции в Node.js асинхронны, но JavaScript является синхронным и однопоточным языком.
00:13:41 Работа с асинхронным кодом в Node.js
-
Видео объясняет, как асинхронный код работает в Node.js, используя движок V8 и библиотеку libuv.
-
V8 отвечает за выполнение JavaScript, а libuv - за асинхронные методы, такие как чтение файлов и обращение к базе данных.
-
В Node.js используется паттерн реактора, который позволяет обрабатывать асинхронные операции без блокировок.
00:24:30 Работа с синхронным кодом в Node.js
-
В Node.js изначально использовались только колбеки, но затем появились промисы и генераторы.
-
Промисы имитируют синхронный стиль программирования, но требуют обертывания в трек-кабачки.
-
В Node.js есть один поток, который может быть перегружен, но это не делает Node.js плохим.
-
В JavaScript есть несколько тредов, которые используются для выполнения асинхронных операций.
00:27:28 Многопоточность в Node.js
-
Видео обсуждает, как многопоточность работает в Node.js, где JavaScript является однопоточным, а другие задачи выполняются на C++.
-
В Node.js, если задача занимает много времени, она может блокировать выполнение других задач, что может привести к проблемам с производительностью.
-
Чтобы избежать блокировки, можно использовать несколько процессов или рабочих потоков, которые могут выполнять задачи параллельно.
00:33:19 Использование Node.js в Яндекс
-
В Яндексе, Node.js используется для серверного рендеринга и проксирования данных между различными сервисами.
-
Это позволяет фронтендерам сосредоточиться на разработке пользовательского интерфейса, а бэкендерам - на обработке данных и бизнес-логике.
-
Node.js также используется для создания микросервисов, где каждый сервис выполняет свою функцию, а все сервисы работают вместе.
-
Это позволяет оптимизировать использование ресурсов и масштабировать приложения по мере необходимости.
00:41:10 Работа с файлами и стримами
• В видео рассказывается о том, как работать с файлами и стримами в Node.js.
• Стримы позволяют читать файлы кусками, что позволяет избежать загрузки всего файла в память.
• Стримы также могут быть использованы для работы с потоками данных, например, для передачи данных между серверами.
00:48:04 Модульная система Node.js
-
В Node.js используется модульная система, которая позволяет изолировать код и избегать уязвимостей.
-
Модули могут быть написаны на разных языках, включая JavaScript, C++ и другие.
-
В Node.js есть три типа модулей: Common GS, JavaScript и Note.
-
Common GS модули - это обычные JavaScript файлы, которые подключаются в Node.js как специальные типы модулей.
-
JavaScript и Note модули - это модули, написанные на чистом JavaScript и C++, соответственно.
-
Нативные биндинги - это модули, которые зависят от версии операционной системы, ядра процессора и других факторов.
-
В Node.js используются модули для организации кода и управления зависимостями.
-
Модули могут быть Common JS (CJS) или ES Modules (ESM).
-
CJS модули кэшируются и исполняются при необходимости, что может вызвать проблемы с производительностью.
-
ESM модули исполняются статически, что упрощает процесс разработки и снижает вероятность ошибок.
01:01:44 Управление зависимостями
-
В Node.js используется менеджер пакетов npm для управления зависимостями.
-
В npm есть понятие семантической версии, которое помогает определить, какие версии зависимостей совместимы друг с другом.
-
В зависимости от потребностей проекта, можно использовать разные способы описания версий зависимостей.
01:03:41 Работа с зависимостями
-
В Node.js есть команда npm install для установки зависимостей.
-
В процессе установки зависимостей, npm создает файл package-lock.json, который содержит информацию о всех установленных зависимостях.
-
Этот файл используется для обеспечения воспроизводимости процесса установки зависимостей.
-
Если в процессе разработки возникает проблема с зависимостями, можно использовать команду npm update для обновления зависимостей до последней версии.
-
В видео обсуждаются способы работы с URL в Node.js.
-
Автор объясняет, что в Node.js есть встроенный модуль для разбора URL, который можно использовать для создания сервера.
-
Он также упоминает, что в Node.js есть много других модулей, которые можно использовать для работы с URL.
01:09:35 Создание сервера на Node.js
-
Автор показывает, как создать сервер на Node.js, используя модуль net.
-
Он объясняет, что сервер может быть низкоуровневым или использовать более сложные функции, такие как HTTP.
01:11:33 Работа с запросами и ответами
-
Автор объясняет, как обрабатывать запросы и ответы в Node.js, включая работу с заголовками, телами запросов и ответами.
-
Он подчеркивает, что в Node.js все запросы и ответы обрабатываются в одном контексте, что может вызвать проблемы с безопасностью.
01:16:27 Использование фреймворков для Node.js
-
Автор обсуждает различные фреймворки для Node.js, включая Express, Fastify, Nest и другие.
-
Он отмечает, что Express является наиболее распространенным фреймворком, и объясняет, почему он так популярен.
-
Он также обсуждает проблемы, связанные с использованием фреймворков, такие как сложность и избыточность.
01:22:20 Проблемы с Middle Warries в Express
-
Middle Warries в Express могут быть проблемными из-за того, что они не знают, что делали другие Middle Warries до них.
-
Это может привести к неожиданным проблемам, таким как ошибки в обработке ошибок.
01:26:14 Инструменты разработчика для Express
-
В Express появились инструменты разработчика, такие как точки останова, отладчики и авто-перезапуск.
-
Это позволяет разработчикам более эффективно отлаживать и тестировать код.
01:31:07 Работа с памятью в Node.js
-
В Node.js используется автоматическая сборка мусора, которая работает через достижимость объектов.
-
Важно следить за тем, чтобы память всегда возвращалась к исходному значению, чтобы избежать проблем с утечками памяти.
01:35:57 Обзор книги "Паттерны проектирования"
-
Автор рекомендует книгу "Паттерны проектирования" для изучения JavaScript.
-
Книга содержит много полезной информации о многопоточном программировании на JavaScript.
01:37:54 Курсы и ресурсы для изучения JavaScript
-
Автор рекомендует курсы на YouTube и книгу "Многопоточное программирование на JavaScript".
-
Также упоминаются облачные функции и бэкенд-приложения.
01:38:50 Ответы на вопросы викторины
-
Автор отвечает на вопросы викторины, связанные с использованием JavaScript и его возможностями.
-
Большинство ответов оказались правильными, что подтверждает знания участников.