Node.js должен быть одной из самых горячих технологий сегодня. Эта статья в основном представляет характеристики и сценарии применения Node.js.
Node.js-это платформа, основанная на времени выполнения Chrome JavaScript, которая используется для легкого построения быстрых и простых в масштабах сетевых приложений. Node.js стал легким и эффективным с управляемым событиями и идеально подходит для приложений в реальном времени, работающих на распределенных устройствах.
1. Особенности
1.1 Асинхронный ввод/вывод
Так называемый асинхронный ввод-вывод относительно синхронного ввода/вывода. Многие операции ввода/вывода должны выполняться во время выполнения программы, такие как чтение и написание файлов, ввод и вывод, ответ запросов и т. Д. Вообще говоря, операции ввода-вывода требуют много времени. Например, в традиционном режиме программирования вам необходимо прочитать файл нескольких G, весь поток будет приостановлен и ждать, пока файл будет прочитать и продолжать выполнять. Другими словами, операции ввода -вывода блокируют выполнение кода, значительно снижая эффективность программы.
Что касается асинхронного ввода-вывода, то на самом деле это не незнакомо для фронт-инженеров, потому что инициирование запроса Ajax является наиболее распространенным «асинхронным» вызовом. В узле, принятие чтения файла (чтение файла является трудоемкой операцией ввода-вывода), он очень похож на способ инициирования запроса AJAX:
Кода -копия выглядит следующим образом:
var fs = require ('fs');
fs.readfile ('/path', function (err, file) {
console.log ('read file заполнен');
});
console.log ('Начните читать файл');
После того, как приведенный выше код называется Fs.ReadFile, последующий код выполняется немедленно, а время, когда «файл чтения завершен», непредсказуемо. Когда поток сталкивается с операцией ввода/вывода, он не будет ждать, пока операция ввода/вывода закончится блокирующей манерой, но просто отправит запрос ввода/вывода в операционную систему и продолжит выполнять последующие операторы. Когда операционная система завершает работу ввода/вывода, поток, выполняющий операцию ввода -вывода, уведомляется в виде события, и поток будет обрабатывать событие в определенное время.
1.2 Центр событий и функция обратного вызова
Так называемый цикл событий означает, что узел будет использовать механизм событий для решения всех асинхронных операций, а поток постоянно зацикливается, чтобы обнаружить очередь событий. Цикл событий проверяет нецельские события в очереди событий до окончания программы. Метод программирования событий имеет преимущества легкой, свободной связи и фокусировки только на точках транзакции. Тем не менее, в сценарии множественных асинхронных задач события не зависят друг от друга, и как сотрудничать является проблемой. В JavaScript функции обратного вызова повсюду, а функции обратного вызова - лучший способ принять асинхронные вызовы для возврата данных.
1.3
Узел сохраняет характеристики JS как единого потока в браузере. Самым большим преимуществом единого потока является то, что он не требует проблемы с синхронизацией состояния, такой как многопоточное программирование, нет тупика, ни переключение контекста потока. Одиночная нить также имеет свои слабости, в основном проявляется в трех аспектах: неспособность использовать многоядерный процессор; Ошибки приведут к выходу всего приложения, а надежность приложения заслуживает вступительного экзамена в аспирантуре; Большое количество вычислений займет процессор и сделает невозможным продолжать называть асинхронный ввод -вывод.
Чтобы решить вышеуказанную проблему, Node принимает ту же идею, что и веб -работники HTML5, и использует child_process для решения проблемы большого количества вычислений в одном потоке. Распределяя расчеты по каждому дочернему процессу, можно разбить большое количество расчетов, и результаты могут быть переданы через сообщения событий между процессами.
1.4 Кроссплатформенные
Узел является кроссплатформенным, то есть тот же набор кода JS может быть развернут и запускается на Windows, Linux, OSX и других платформах. В основном это связано с тем, что Node создал архитектуру на уровне платформы между операционной системой и системой модуля верхнего уровня узла.
2. Сценарии приложения
1) Приложения в реальном времени: такие как онлайн-чат, толчок уведомлений в режиме реального времени и т. Д. (например, Socket.io)
2) Распределенное приложение: Используйте существующие данные через эффективную параллельную ввод/вывода
3) Приложение для инструментов: Массовые инструменты, от развертывания сжатия фронтального сжатия (например, Grunt) до настольных приложений графического интерфейса
4) Игровые приложения: игровое поле имеет высокие требования для в режиме реального времени и параллелизма (например, Pomelo Framework от Netease)
5) Используйте стабильный интерфейс для улучшения возможностей веб -рендеринга
6) Унифицированная фронтальная языковая среда языка программирования: Разработчики фронтальных концов могут быстро ввести разработку на стороне сервера (например, знаменитая средняя архитектура Pure JavaScript с полным стеком)