Основные понятия
Node.js , или Node, - это платформа, которая позволяет JavaScript работать на стороне сервера. Можно сказать, что Node.js впервые разработал модульную разработку javascript . Ранние требования javascript были очень простыми, и они были в основном написаны как функции, за которыми последовало процесс, ориентированное на процесс. Позже, объектно-ориентированные идеи развития были постепенно введены, а затем они были медленно записаны в классы. Наконец js появление узла.
Самой большой особенностью Node является его принятие асинхронного I/O и архитектурного дизайна, управляемого событиями. Node.js - это платформа, которая позволяет JS работать за пределами браузера. Его первоначальная цель-реализовать, не блокирующие веб I/O
Node.js - это просто среда, работающая JavaScript (или набор библиотек), которая дополняет стандартный js с функциями асинхронного iO, то есть чтения и написания сетей и файлов.
Как библиотека, это не более чем мелодия API. В дополнение к слегка противодействующим обратным вызовам события, оно не сильно отличается от других внутренних языков (PHP, Python).
Node.js использует один режим потока. Каждый поток завершает функцию. Процесс может иметь несколько потоков. Все i/OS используются в асинхронном методе запроса. После того, как каждый асинхронный запрос ввода/вывода будет завершен, он будет выдвигаться в очередь событий и ждать процесса программы.
Короче говоря, основная идея node : не блокировка, однопоточная и управляемая событиями. (Синхронно соответствует блокированию, асинхронно соответствует не блокировке)
Node.JS
Одиночная резьба
Среда исполнения языка javascript - «единый поток».
Так называемый «единственный поток» означает, что одна задача может быть выполнена только за раз. Если есть несколько задач, вы должны встать в очередь, выполнить предыдущую задачу, выполнить следующую задачу и так далее.
Преимущество этой модели заключается в том, что ее относительно просто внедрить, а среда выполнения относительно проста; Недостаток заключается в том, что до тех пор, пока есть задача, которая занимает много времени, последующие задачи должны быть в очереди, что задержит выполнение всей программы. Общие браузеры не отвечают (фальшивая смерть) часто потому, что определенная часть кода Javascript работает в течение длительного времени (например, мертвая петля), что приводит к застенчивому в этом месте всю страницу, и другие задачи не могут быть выполнены.
Удвоенные места большинства веб -приложений находятся в I/O , то есть чтения и написании дисков, чтения и записи сетей, а также чтение и написание баз данных. Какая стратегия использовать, чтобы ждать этот период времени, стала ключевым моментом для повышения производительности
Синхронно и асинхронно
Чтобы решить эту проблему, язык Javascript делит режим выполнения задач на два типа: синхронные (синхронные) и асинхронные (асинхронные).
«Синхронный режим» - это режим предыдущего раздела. Последняя задача ожидает завершения предыдущей задачи, а затем выполняется. Порядок выполнения программы является последовательным и синхронным с порядком расположения задач; «Асинхронный режим» совершенно другой. Каждая задача имеет одну или несколько функций обратного вызова ( callback ). После того, как предыдущая задача закончилась, это не следующая задача, но функция обратного вызова выполняется. Последняя задача выполняется без ожидания, пока предыдущая задача завершится, поэтому порядок выполнения программы непоследовательна и асинхронно с порядком соглашения задач.
«Асинхронный режим» очень важен. Со стороны браузера долгосрочные операции должны быть выполнены асинхронно, чтобы избежать браузера не терять ответа. Лучшим примером являются операции Ajax. На стороне сервера «асинхронный режим» является даже единственным режимом, поскольку среда выполнения однопоточена, если все http запросы будут выполнены синхронно, производительность сервера резко упадет и скоро потеряет свой ответ.
Процессы и потоки
Процессы и потоки в системе Mac
Из рисунка мы видим, что процесс может включать несколько потоков. Процессы похожи на семинары в проектах. Темы - это работники в этом семинаре. В операционной системе, которая вводит потоки, они обычно используют процессы в качестве основного устройства для распределения ресурсов, а также в качестве основного устройства для независимой работы и независимого планирования. Поскольку потоки меньше процессов и в основном не имеют собственных системных ресурсов, накладные расходы на планирование будут намного меньше, что может более эффективно улучшить степень одновременного выполнения между несколькими программами в системе.
разница
Разница между потоком и процессом состоит в том, что дочерний процесс и родительский процесс имеют разные кодовые и данные, в то время как несколько потоков делятся пространствами данных, каждый поток имеет свой собственный стек выполнения и счетчик программы для контекста выполнения. Многопользовательский состав в основном используется для экономии времени процессора и использования его в соответствии с конкретной ситуацией. Ресурсы памяти компьютера и процессор должны использоваться во время запуска потока.
Модули и пакетные модули
Модуль: файл, который реализует определенные конкретные функции для реализации модульного программирования. Введите модули через require (имя модуля).
― Функции в модулях (таких как переменные, функции) предоставляются вызывающему абоненту, присваивая свойство объекту exports .
Как использовать модули?
Очень удобно использовать модули в узле. В коде JavaScript вы можете напрямую использовать глобальную функцию require() для загрузки модуля. Например, мы можем использовать require("http") для загрузки модуля HTTP -сервера, который поставляется с node .
Сумка
Пакет: пакет - это папка, которая инкапсулирует модули для выпуска, обновления, управления зависимостями и управления версиями. Опишите информацию о пакете через Package.json: входные файлы, внешние пакеты зависимости и т. Д. Установите пакет через команду npm install и используйте пакет через require .
Асинхронный ввод-вывод и управляемый событиями
Node.js 'Асинхронный механизм основан на событиях. Каждый I/O - это запрос. Все диск I/O , сетевая связь и запросы базы данных запрашиваются не блокирующим манером. Возвращенные результаты обрабатываются петлей события. Как показано на рисунке ниже:
Процесс Node.js будет обрабатывать только одно событие одновременно и немедленно введет цикл события, чтобы проверить и обработать последующие события после завершения. Преимущество этого заключается в том, что процессор и память существуют одновременно, чтобы централизовать одну вещь, позволяя максимально параллельно выполнять операции ввода-вывода.
Начните программирование узла
Здесь я рекомендую использовать webstorm для разработки node.js , которая является удобной и быстрой, и гораздо проще в использовании, чем CMD или терминалы под Mac.
Что касается установки узла, пожалуйста, Baidu самостоятельно. Я не буду вдаваться в подробности здесь. Давайте посмотрим на интерфейс программирования узлов в webstorm :
Нам просто нужно щелкнуть правой кнопкой мыши написанный интерфейс кода узла и нажмите «Запуск», что удобно и быстро
Ниже приведено выходной интерфейс узла:
В системе Mac я рекомендую три инструмента, которые я использую: CODA2, Webstorm и Sublime Text3. Это лучшие инструменты разработки, которые у меня есть до сих пор. Вы можете также попробовать, какой из них больше соответствует вашему вкусу.
Для разработки узлов в webstorm вам нужно сначала настроить определенные файлы. Каждый должен использовать Baidu, чтобы сделать это. Поскольку мой webstorm был настроен, я не могу сделать снимок экрана, чтобы показать вам шаги. Общие шаги: под системой Mac, сначала нажмите webstorm в верхней панели, затем нажмите perference , затем нажмите Node.js and NPM , затем нажмите «Настройка справа», и, наконец, это будет выглядеть как следующее:
Шаги процесса в системе windows примерно похожи на этот процесс. Версия, которую я использую, 8.0.4.
Глобальные переменные
В программировании JS лучше всего добавить ключевое слово var в каждую переменную, чтобы избежать загрязнения глобального пространства имен и увеличения риска соединения кода.
консоль
console используется для вывода символов в стандартный выходной поток выходного потока ( standout ) и стандартный поток ошибок (STDERR).
console.log() печатает символы в стандартный выходной поток и заканчивается новой линией, которая принимает несколько параметров и будет выводиться в формате c-like printf()
console.log(__dirname)输出文件目录Рассчитайте время выполнения кода
console.time(label) console.timeEnd(label)Нам просто нужно дать ту же этикетку в начале и конец и поместить любой код, который вы хотите рассчитать время выполнения в середине.
__filename и __dirname
console.log(__filename);// /Users/hwax/Desktop/My Project/avalon/hello.js console.log(__dirname);// /Users/hwax/Desktop/My Project/avalon