Node.js - кроссплатформенная среда выполнения JavaScript с открытым исходным кодом. Это популярный инструмент практически для любого проекта!
Node.js использует JavaScript-движок V8, ядро Google Chrome, вне браузера. Это обеспечивает Node.js высокую производительность.
Приложение Node.js работает в одном процессе, без создания нового потока для каждого запроса. Node.js предоставляет в своей стандартной библиотеке набор асинхронных примитивов ввода/вывода (asynchronous I/O), предотвращающие блокировку кода JavaScript. Кроме того, библиотеки Node.js в основном написаны в парадигме отсутствия блокировок. Соответственно, поведение блокировки в Node.js это исключение вместо нормы.
Когда Node.js выполняет операцию I/O, наподобие чтения из сети, доступа к базе данных или файловой системе, вместо того чтобы блокировать поток и тратить циклы ЦП впустую, Node.js возобновляет операции после получения ответа. Эта особенность позволяет Node.js обрабатывать тысячи одновременных соединений с одним сервером без лишней головной боли по обслуживанию конкуренции многопоточности, что является значительным источником багов.
Node.js обладает уникальным преимуществом, поскольку миллионы разработчиков интерфейсов, пишущих JavaScript для браузера, теперь могут писать код на стороне сервера в дополнение к коду на стороне клиента, без необходимости изучать совершенно другой язык.
В Node.js новые стандарты ECMAScript могут использоваться без проблем, поскольку вам не нужно ждать, пока все ваши пользователи обновят свои браузеры — вы сами решаете, какую версию ECMAScript использовать, изменяя версию Node.js, а также можете включить определенные экспериментальные функции, запустив Node.js с флагами.
// Или альтернативный синтаксис
exports.myFunction=function(){...};
Характеристики CJS:
- Синхронная загрузка — модули загружаются сразу - В основном для Node.js — изначально не работал в браузерах - Динамический импорт — можно использовать `require()` в любом месте кода
[ESM (ECMAScript Modules) — современные модули]
ESM — native-стандарт модулей для JavaScript, работающий и в браузерах, и в Node.js.
- Асинхронная загрузка — модули загружаются по мере необходимости - Статический анализ — импорты должны быть на верхнем уровне - Работает везде — браузеры, Node.js, современные инструменты сборки
// CJS → ESM (проблематично) constvue=require('vue');// Может не работать с ESM-пакетами
Решение — динамический импорт:
// В CJS файле импортируем ESM constloadESM=async()=>{ const{someFunction}=awaitimport('./esm-module.js'); someFunction();
};
[Почему ESM становится стандартом]
1. Универсальность — один стандарт для браузера и сервера 2. Лучшая оптимизация для дерева (tree-shaking) удаляет неиспользуемый код 3. Статический анализ — инструменты лучше понимают зависимости 4. Нативная поддержка — не нужны транспиляторы в браузерах
В контексте инструментов сборки:
- Vite — использует нативные ESM в разработке - Webpack — может работать с обоими типами - Node.js — поддерживает оба, но ESM рекомендуется для новых проектов
[Пример приложения Node.js]
Традиционный общий Node.js пример Hello World это web-сервер:
Чтобы запустить этот код, сохраните его как файл server.js, и запустите команду node server.js в терминале. Если вы используете mjs-версию кода, то нужно сохранить этот файл как server.mjs и выполнить команду node server.mjs.
// Или динамический импорт для CommonJS const{someCJSPackage}=awaitimport('cjs-package');
В контексте Vue 3 + Vite, поэтому в проекте:
// Все .vue и .js файлы используют ESM синтаксис import{ref}from'vue'; importMyComponentfrom'./components/MyComponent.vue';
exportdefault{ components:{MyComponent}
}
Если бы вы писали серверную часть:
// Рекомендуется для новых проектов - server.mjs importexpressfrom'express'; import{getUser}from'./database.mjs';
constapp=express(); exportdefaultapp;
// Или для совместимости - server.js с type: module constexpress=awaitimport('express');// Динамический импорт
[Рекомендации]
1. Новые проекты → используйте `"type": "module"` в package.json + `.js` файлы 2. Смешанные проекты → используйте `.mjs` для ESM и `.cjs` для CommonJS 3. Библиотеки → поддерживайте оба формата (dual package) 4. Vue/React проекты → ESM предпочтительнее из-за лучшей оптимизации
Вывод: расширение `.mjs` явно указывает Node.js использовать ESM систему модулей, что делает код более предсказуемым и современным. Для Vue-проекта это особенно актуально, так как вся современная фронтенд-экосистема движется в сторону ESM.
Этот код сначала подключает Node.js-модуль http. В стандартной библиотеке Node.js есть множество продвинутых функций, включая отличную поддержку сетевого обмена.
Метод createServer() модуля http создает, запускает новый HTTP-сервер и возвращает его экземпляр. Этот сервер настраивается на прослушивание определенного порта port на определенном имени hostname. Когда сервер готов к работе, будет вызвана callback-функция, информируя об этом пользователя.
Всякий раз при поступлении нового запроса будет вызвано событие запроса (request event), с предоставлением двух объектов: запрос request (объект http.IncomingMessage) и ответ response (объект http.ServerResponse). Эти два объекта наиболее важные сущности для обработки вызовов HTTP.
Первый предоставляет информацию о запросе. В этом простом примере он не используется, однако мог бы применяться для получения доступа к заголовкам запроса (request headers) и данным запроса (request data).
Второй используется для возврата данных тому, кто выдал запрос. Для нашего простого примера это код состояния 200, означающий успешное выполнение запроса:
res.statusCode=200;
Мы установили тип содержимого заголовка (Content-Type header):
res.setHeader('Content-Type','text/plain');
И в завершение мы закрываем ответ, добавив содержимое ответа в качестве аргумента метода end():
res.end('Hello World\n');
[Что необходимо знать в JavaScript для использования Node.js?]
При изучении JavaScript и Node.js новичку легко запутаться, где кончается одно и начинается другое, и наоборот.
Для более глубокого погружения в Node.js рекомендуется ознакомиться со следующими темами:
Изучив эти концепции, вам откроется дорога профессиональной разработки на JavaScript, как в браузере, так и в Node.js.
Асинхронное программирование. Следующие концепции являются ключевыми для понимания асинхронного программирования, они являются фундаментальными частями Node.js:
Понятие асинхронного программирования связано с многопоточностью и синхронизацией между потоками, когда внешние и внутренние события в программе обрабатываются специальными обработчиками событий. Асинхронное программирование - это подход, при котором операции могут выполняться независимо от основного потока выполнения программы, не блокируя его.
Синхронное программирование подразумевает использование одного потока, когда в котором используются циклы ожидания и/или опроса для определения необходимости проведения различных операций.
Синхронный код (блокирующий):
console.log('Начало');
// Представьте, что это запрос к серверу на 2 секунды constdata=fetchDataFromServer();// Программа "замирает" на 2 секунды
console.log(data);
console.log('Конец');// Выполнится только через 2 секунды
Асинхронный код (неблокирующий):
console.log('Начало');
// Программа не ждет ответа, продолжает работу
fetchDataFromServer() .then(data=>console.log(data));// Выполнится когда данные придут
console.log('Конец');// Выполнится сразу
Где используется асинхронность:
1. Работа с сетью
// Запросы к API, серверам
fetch('/api/users') .then(response=>response.json()) .then(users=>console.log(users));
// Асинхронная функция для загрузки данных constloadUsers=async()=>{ loading.value=true; try{ // await - не блокирует интерфейс! constresponse=awaitfetch('/api/users'); users.value=awaitresponse.json(); }catch(error){ console.error('Ошибка загрузки:',error); }finally{ loading.value=false; } };
return{users,loading,loadUsers}; }
}
[Преимущества асинхронного программирования]
1. Не блокирует интерфейс - приложение остается отзывчивым. 2. Высокая производительность - эффективное использование ресурсов. 3. Лучший пользовательский опыт - нет "зависаний". 4. Масштабируемость - может обрабатывать много операций одновременно.
Ключевые концепции:
- Неблокирующий код - программа продолжает работать во время ожидания. - Обратные вызовы (callbacks) - функции, которые выполняются после завершения операции. - Обещания (Promises) - объекты, представляющие будущий результат. - Async/Await - синтаксический сахар для работы с Promise. - Event Loop - механизм, который управляет выполнением асинхронного кода.
Вывод: асинхронное программирование — это фундаментальная концепция JavaScript, которая позволяет эффективно работать с операциями ввода-вывода, сохраняя приложение отзывчивым и производительным.
[Различия между Node.js и браузером]
И браузер, и Node.js, оба используют JavaScript в качестве своего языка программирования. Однако построение приложений, которые работают в браузере (фронтэнд), полностью отличается от построения приложения Node.js (приложение сервера, бэкэнд). Несмотря на то, что это всегда JavaScript, есть несколько ключевых отличий, которые делают опыт кардинально иным.
С точки зрения frontend-разработчика, интенсивно использующего JavaScript, приложения Node.js дают ему большое преимущество: комфортное программирование в любом месте. И frontend, и backend реализуются на одном и том же языке программирования. Мы знаем, насколько сложно бывает изучить новый язык программирования, так что применение одного и того же языка как на клиенте, так и на сервере значительно облегчает решение прикладных задач.
Меняется только экосистема, в которой работает код. В браузере больше всего времени вы проводите на обработке элементов DOM (Document Object Model), или других API-функций Web Platform наподобие Cookies. Конечно, ничего этого нет в Node.js. У вас нет ни document, ни window и всех других объектов, которые предоставляет браузер.
И в бразуере у вас нет доступа к прекрасному API, которое Node.js предоставляет на базе своих модулей, набодобие функционала доступа к файловой системе.
Ещё одно важное отличие заключается в том, что в Node.js вы контролируете рабочее окружение (environment). Если только вы не разрабатываете приложение с открытым исходным кодом, которое может быть развернуто где угодно, вы знаете, на какой версии Node.js оно будет запущено. Это очень удобно по сравнению с браузерной средой, где вы не можете выбрать, какой браузер будут использовать ваши посетители.
Это означает, что вы можете писать все современные версии JavaScript ES2015+, поддерживаемые вашей версией Node.js. Поскольку JavaScript развивается очень быстро, а браузеры обновляются довольно медленно, иногда в вебе приходится использовать старые версии JavaScript/ECMAScript. Вы можете использовать Babel для преобразования кода в совместимый с ES5 перед отправкой в браузер, но в Node.js это не требуется.
Другое отличие состоит в том, что Node.js поддерживает обе системы модулей - CommonJS и ES (начиная с Node.js v12), в то время как в браузере мы начинаем видеть реализацию стандарта ES-модулей.
На практике это означает, что можно использовать в Node.js как require(), так и import, но в браузере вы ограничены import.
[V8 JavaScript Engine]
V8 это имя подсистемы языка (JavaScript engine) которую обеспечивает Google Chrome. Это то, что берет наш JavaScript и выполняет его во время просмотра страниц с Chrome.
V8 — это движок JavaScript, который анализирует и выполняет код JavaScript. DOM и другие API веб-платформы (все они составляют среду выполнения) предоставляются браузером.
Самое интересное, что движок JavaScript не зависит от браузера, в котором он размещён. Эта ключевая особенность способствовала развитию Node.js. V8 был выбран в качестве движка Node.js ещё в 2009 году, и с взрывным ростом популярности Node.js V8 стал движком, который теперь поддерживает невероятное количество серверного кода, написанного на JavaScript.
Экосистема Node.js огромна, и благодаря V8 она также поддерживает десктопные приложения, в том числе проекты типа Electron.
Другие движки JS. Другие браузеры содержат свои собственные подсистемы JavaScript. Вот возможно неполный список самых популярных движков:
● Firefox содержит SpiderMonkey. ● Safari содержит JavaScriptCore (который также называют Nitro). ● Edge изначально был основан на Chakra, но в последнее время был пересобран с использованием Chromium и V8 engine.
Все эти движки реализуют стандарт ECMA ES-262, также называемый ECMAScript - стандарт, используемый JavaScript.
Производительность. V8 написан на C++, и непрерывно улучшается. Это портируемый код, и он работает на Mac, Windows, Linux и нескольких других системах. В этом кратком обзоре мы не будем концентироваться на деталях V8: для этого можно обратиться к первоисточникам (например к официальному сайту V8 https://v8.dev/), и эти детали со временем меняются, часто радикально. V8 постоянно развивается, как и другие движки JavaScript, чтобы ускорить работу Интернета и экосистемы Node.js. В Интернете уже много лет идет гонка за производительностью, и мы (как пользователи и разработчики) извлекаем из этой конкуренции большую выгоду, поскольку год за годом получаем более быстрые и оптимизированные машины.
Компиляция. JavaScript главным образом считается интерпретируемым языком, но современные движки JavaScript могут не просто интерпретировать, они могут его компилировать. Это началось в 2009 году, когда в Firefox 3.5 был добавлен компилятор SpiderMonkey JavaScript, после чего все взяли на вооружение эту идею.
JavaScript внутренне компилируется V8 в код just-in-time (JIT) для ускорения выполнения.
Это может показаться нелогичным, но с момента появления Google Maps в 2004 году JavaScript превратился из языка, который обычно выполнял только несколько десятков строк кода, в законченные приложения с тысячами или сотнями тысяч строк, работающих в браузере. Наши приложения теперь могут работать часами в браузере, и не просто представлять собой несколько правил проверки форм или простых скриптов.
В этом новом мире компиляция JavaScript имеет смысл, поскольку, хотя на подготовку JavaScript может потребоваться немного больше времени, после ее завершения он будет намного производительнее, чем чисто интерпретируемый код.
[ECMAScript 2015 (ES6) и более поздние версии]
Node.js создан на основе современных версий V8. Поддерживая актуальность последних версий этого движка, разработчики обеспечивают своевременное внедрение новых функций спецификации JavaScript ECMA-262 для Node.js, а также постоянное повышение производительности и стабильности.
Все фичи ECMAScript 2015 (ES6) делятся на три группы: поставляемые (shipping), готовящиеся (staged) и находящиеся в разработке (in progress):
● Все shipping-фичи, которые V8 заявляет стабильными, включены по умолчанию в Node.js, и НЕ ТРЕБУЮТ никаких runtime-флагов. ● Staged-фичи, которые почти завершены, и которые команда V8 не считает стабильными, требуют runtime-флага --harmony. ● Фичи, которые пока в разработке, могут быть активированы индивидуально их соответствующим harmony-флагом, хотя это настоятельно не рекомендуется, за исключением случаев тестирования. Замечание: эти флаги предоставляются V8 и потенциально могут быть изменены без уведомления об устаревании.
Поставляемое по умолчанию. Сайт node.green дает отличный обзор поддерживаемых фич ECMAScript в различных версиях Node.js, основанных на kangax compat-table.
Kangax's compat-table — это масштабный проект по созданию таблиц совместимости, которые показывают поддержку различных функций ECMAScript (стандарта JavaScript) в браузерах, серверных средах выполнения (таких как Node.js) и транспайлерах.
Проект, также известный как "ECMAScript compatibility tables", служит авторитетным источником информации для разработчиков, позволяя им точно определять, какие функции JavaScript можно безопасно использовать в их целевых средах.
[Как пользоваться таблицами совместимости]
Основной проект размещен на GitHub по адресу github.com/kangax/compat-table, а актуальные таблицы можно просматривать онлайн:
На этих страницах вы найдете подробные таблицы, где по вертикали перечислены функции JavaScript, а по горизонтали — версии браузеров, Node.js и других платформ. Поддержка каждой функции отмечается цветом или галочкой.
[Как это связано с Node.js и node.green]
Проект node.green является прямой адаптацией оригинальной таблицы Kangax, но специализируется исключительно на Node.js. Как объясняется в репозитории node-compat-table, он предоставляет более глубокое представление о различиях между быстро обновляющимися версиями Node.js, что особенно ценно для серверных разработчиков.
Почему это важный инструмент для разработчика:
- Принятие обоснованных решений: позволяет точно знать, какие функции JavaScript поддерживаются в нужных версиях Node.js или браузеров, прежде чем использовать их в коде. - Определение необходимости транспиляции: если какая-то функция не поддерживается в целевой среде, вы можете использовать транспайлеры (Babel) или полифиллы для ее эмуляции. В таблицах также отображается поддержка функций в самих транспайлерах. - Следование современным подходам: как отмечают разработчики, браузеры и среды выполнения реализуют не версии стандарта, а отдельные функции. Этот проект учит думать так же — проверять поддержку конкретных возможностей, а не абстрактных версий "ES7" или "ES8".
Фичи в разработке. В движок V8 постоянно добавляются новые функции. В целом можно ожидать, что они появятся в будущем релизе Node.js, хотя точные сроки пока неизвестны.
Вы можете получить список всех находящихся в разработке фич, доступных в каждом релизе Node.js пропустив его через grep-обработку аргумента --v8-options. Имейте в виду, что это может быть неполный, и даже содержащий неисправные фичи V8 список, так что используйте его на свой страх и риск:
$ node --v8-options | grep "in progress"
Моя инфраструктура настроена на использование флага --harmony. Стоит ли его удалить? Текущее поведение флага --harmony в Node.js заключается в включении только подготовленных функций. В конце концов, теперь он является синонимом --es_staging. Как упоминалось выше, это завершённые функции, которые ещё не считаются стабильными. Если вы хотите действовать наверняка, особенно в производственных средах, рассмотрите возможность удаления этого флага времени выполнения, пока он не станет по умолчанию в V8 и, следовательно, в Node.js. Если вы оставите его включённым, будьте готовы к тому, что дальнейшие обновления Node.js могут нарушить ваш код, если V8 изменит свою семантику, чтобы более точно соответствовать стандарту.
Как узнать, какая версия V8 поставляется с конкретной версией Node.js? Node.js предоставляет простой способ получить список всех зависимостей и соответствующих версий, поставляемых с конкретным исполняемым файлом, через глобальный объект процесса. В случае движка V8 введите в терминале следующую команду, чтобы узнать его версию:
13.6 — основная версия V8 - Это версия движка V8 от Google - Соответствует версии V8, которая используется в Chrome/Chromium
233 — номер сборки Chromium - Указывает на конкретную версию Chromium - Помогает отслеживать соответствие с браузерными версиями
10 — патч-версия V8 - Мелкие исправления и улучшения
node.28 — кастомная модификация для Node.js - Ключевая часть! Показывает, что это не "чистый" V8 из Chrome - 28 — количество патчей/изменений, примененных командой Node.js - Эти изменения делают V8 более подходящим для серверной среды
Почему Node.js модифицирует V8? Изменения в Node.js версии V8 включают:
1. Улучшенная работа с памятью — серверные приложения работают дольше браузерных вкладок. 2. Оптимизация для больших данных — серверы обрабатывают больше данных, чем браузеры. 3. Стабильность API — обеспечение обратной совместимости. 4. Улучшения производительности для типичных серверных workload'ов.
[Практическое значение для разработчика]
1. Поддержка возможностей JavaScript
// V8 13.6 поддерживает: constarray=[1,2,3];
console.log(array.at(-1));// 3 - метод .at()
// Полифиллы не нужны для современных возможностей
2. Производительность
Каждая версия V8 приносит улучшения производительности:
- Быстрее выполнение JavaScript - Лучшая оптимизация памяти - Ускоренные встроенные функции
3. Совместимость с браузером: rод, работающий в современном Chrome, скорее всего будет работать и в вашей версии Node.js.
4. Как проверить доступные возможности? Используйте node.green. Зная версию V8 (13.6), можно проверить:
- Поддержку ES2023, ES2022 функций - Доступные методы массивов, объектов - Современный синтаксис
[Native WebSocket Client в Node.js]
Начиная с Node.js версии v21, WebSocket API было улучшено библиотекой Undici, где есть встроенный клиент WebSocket. Это упрощает коммуникации реального времени для приложений Node.js. В релизе Node.js v22.4.0 функционал WebSocket API был отмечен как stable, что показывает его готовность для использования в production.
Что такое WebSocket. Это стандартизованный коммуникационный протокол, который позволяет реализовать одновременный двусторонний обмен через одиночное соединение TCP. Он обладает возможностями полнодуплексного или двунаправленного режима, что отличает его от HTTP. WebSocket обеспечивает совместимость с HTTP благодаря использованию заголовка HTTP Upgrade для перехода между протоколами. Он позволяет серверам отправлять контент клиентам без первоначальных запросов и поддерживает открытые соединения для непрерывного обмена сообщениями, что делает его идеальным для передачи данных в режиме реального времени с меньшими накладными расходами, чем альтернативные варианты, такие как опрос (HTTP polling).
Коммуникации WebSocket обычно происходят через порт TCP 443 (secured) или 80 (unsecured), что помогает проходить через ограничения брандмауэров, которые фильтруют соединения, не относящиеся к web. Протокол определяет свои собственные URI-схемы ws:// и wss:// для нешифрованных и шифрованных соединений соответственно, и это поддерживается всеми современными браузерами.
Native WebSocket Client. Node.js теперь может работать как клиент WebSocket, не полагаясь на внешние библиотеки наподобие ws или socket.io, чтобы реализовать клиентские соединения. Это позволяет приложениям Node.js напрямую инициировать и управлять исходящими соединениями WebSocket, оптимизируя такие задачи, как подключение к потокам данных в режиме реального времени или взаимодействие с другими серверами WebSocket. Пользователи могут создать соединение websocket стандартным конструктором new WebSocket().
Развивая вышесказанное, давайте добавим больше практических примеров для демонстрации новой функциональности клиента WebSocket, демонстрирующих основные варианты использования.
Базовое соединение и обработка сообщения:
// Создание нового соединения WebSocket к указанному URL. constsocket=newWebSocket('ws://localhost:8080');
// Выполнится, когда соединение успешно установится.
socket.addEventListener('open',event=>{ console.log('WebSocket-соединение установлено!'); // Отправит сообщение WebSocket-серверу. socket.send('Hello Server!');
});
// Прослушивает поступление сообщений и выполнит код, когда // от сервера придет сообщение.
socket.addEventListener('message',event=>{ console.log('Сообщение от сервера: ',event.data);
});
// Выполнится, когда соединение закрыто, предоставляя код события // и причину закрытия.
socket.addEventListener('close',event=>{ console.log('WebSocket-соединение закрыто:',event.code,event.reason);
});
// Выполнится, если произошла ошибка во время обмена WebSocket.
socket.addEventListener('error',error=>{ console.error('WebSocket error:',error);
});
Этот код javascript демонстрирует отправку и прием данных JSON, которые обычно используются приложениями WebSocket. Используется JSON.stringify() для преобразования объектов JavaScript в строки JSON перед отправкой. И обратно принятая строка преобразуется в JavaScript-объект с помощью JSON.parse(). И наконец, добавлена обработка ошибок для парсинга JSON.
Это обеспечивает упрощенное управление зависимостями и улучшенную совместимость. Разработчикам не нужно устанавливать и поддерживать дополнительные клиентские библиотеки WebSocket. Встроенная реализация соответствует современным веб-стандартам, обеспечивая лучшую совместимость. Улучшение сосредоточено на клиентской стороне взаимодействия WebSocket, позволяя Node.js выступать в роли клиента WebSocket.
Важно для понимания: Node.js v22 не предоставляет встроенную реализацию сервера WebSocket. Чтобы создать сервер WebSocket, который принимает входящие соединения из браузеров или других клиентов, по-прежнему нужно использовать библиотеки наподобие ws или socket.io. Это означает, что хотя Node.js может теперь просто подключаться к серверам WebSocket, ему все еще нужны внешние инструменты, чтобы стать WebSocket-сервером.
В итоге: Node.js v22 позволяет приложениям без препятствий взаимодействовать с серверами WebSocket в качестве клиентов, но создание серверов WebSocket внутри Node.js остается зависимым от установленных библиотек. Это различие крайне важно понимать разработчикам при реализации взаимодействия в режиме реального времени в своих проектах Node.js.
Ниже показан пример кода, который создал DeepSeek в ответ на запрос:
"Напиши код на основе Node.js, чтобы HTTP-сервер на главной странице показывал падающие зеленые буквы, как в фильме 'Матрица'". В итоге получилось следующее.
Файл server.js:
consthttp=require('http');
constfs=require('fs');
constpath=require('path');
constserver=http.createServer((req,res)=>{
if(req.url==='/'){
// Читаем HTML файлconstfilePath=path.join(__dirname,'matrix.html');
fs.readFile(filePath,(err,data)=>{
if(err){
res.writeHead(500);
res.end('Ошибка загрузки страницы');
return;
}
res.writeHead(200,{'Content-Type':'text/html; charset=utf-8'});
res.end(data);
});
}else{
res.writeHead(404);
res.end('Страница не найдена');
}
});
constPORT=3000;
server.listen(PORT,()=>{
console.log(`Сервер запущен на http://localhost:${PORT}`);
console.log('Откройте браузер и перейдите по указанному адресу');
});
1. Сохраните код сервера в текстовый файл server.js, в кодировке UTF-8. 2. Создайте текстовый файл matrix.html с HTML кодом выше в той же папке, в кодировке UTF-8. 3. Установите node, если он еще не установлен. На Linux node устанавливается командой sudo apt install nodejs npm, а на Windows инсталлятор можно скачать на по ссылке https://nodejs.org/en/download. 4. Запустите сервер командой: node server.js. 5. Откройте браузер и перейдите по адресу http://localhost:3000.
Особенности реализации:
- JavaScript-код, интегрированный в тег script файла matrix.html, выполняется на стороне клиента (в браузере). - Анимация падения: символы плавно падают сверху вниз. - Случайные символы: используются символы катаканы, цифры и латинские буквы. - Динамические эффекты: символы случайно меняют яркость и прозрачность. - Адаптивность: количество колонок автоматически подстраивается под размер окна. - Интерактивность: скорость падения меняется в зависимости от положения мыши.
[Ссылки]
1. Introduction to Node.js site:nodejs.org. 2. Введение в npm.