Эта статья будет оспаривать самые пределы знаний вашего Node.js.
Я начал изучать Node.js вскоре после первого ryan dahl Представлено Это, и я не смог ответить на многие вопросы, которые я прошу в этой статье даже год назад. Если вы действительно можете ответить на все эти вопросы, то ваши знания о Node.js не отлично. Мы должны быть друзьями.
Причина, по которой я думаю, что эта проблема приведет вас к удивлению, состоит в том, что многие из нас были в основном в основном узел. Большинство учебных пособий, книг и курсов о узле сосредоточиться на экосистеме узла – не сам время выполнения узла. Они сосредоточены на преподавании того, что можно сделать со всеми пакетами, доступными для вас, когда вы работаете с узлом, как Express and Socket. IO, а не преподавание возможностей самого времени выполнения узла.
Есть веские причины для этого. Узел сырье и гибкий. Он не предоставляет полные решения, а скорее предоставляет богатое время выполнения, которое позволяет вам реализовывать свои собственные решения. Библиотеки, такие как Express.js и розетка. IO – это больше полных решений, поэтому он имеет больше смысла преподавать эти библиотеки, поэтому вы можете позволить ученикам использовать эти полные решения.
Обычная мудрость, кажется, что только те, чья работа состоит в том, чтобы написать библиотеки, такие как Express.js и сокет. Ио надо понимать все о odd.js Runtime. Но я думаю, что это не так. Твердое понимание самого времени выполнения Node.js – лучшее, что вы можете сделать, прежде чем использовать эти полные решения. По крайней мере, вы должны иметь знания и уверенность в том, чтобы судить по пакету по его коду, поэтому вы можете сделать образованное решение об использовании его.
Вот почему я решил создать Плюсульский курс полностью посвящен чистому узлу. При выполнении исследований для курса я собрал список определенных вопросов для вас, чтобы определить, будет ли ваши знания выполнения узла уже достаточно сильны, или если это может быть улучшено.
Если вы можете ответить на большую часть этих вопросов, и вы ищете работу, дайте мне знать! Если с другой стороны, большинство из этих вопросов принимают вас к удивлению, вам просто нужно сделать изучение самого времени выполнения узла приоритетом. Ваше знание этого сделает вас гораздо более желательным разработчиком.
Вызов знаний Node.js:
Некоторые из этих вопросов короткие и легкие, в то время как другие требуют более длительных ответов и более глубоких знаний. Все они представлены здесь без определенного порядка.
Я знаю, что вы будете нужны ответы после прочтения этого списка. Секция совета ниже имеет некоторые ответы, но я также отвечу на все эти вопросы в серии FreeCodecamp после этого. Но позвольте мне первым дразнить ваши знания!
- Каковы отношения между Node.js и v8? Может узел работать без V8?
- Как прийти, когда вы объявляете глобальную переменную в любом файле Node.js, это не совсем глобальный для всех модулей?
- При экспорте API модуля узла, почему мы можем иногда использовать
Экспорти в других случаях мы должны использоватьmodule.exports.? - Можем ли нам потребовать локальных файлов без использования относительных путей?
- Могут ли разные версии одного и того же пакета в одном приложении?
- Что такое петля событий? Это часть v8?
- Какой стек вызова? Это часть v8?
- В чем разница между
setimmediateиПроцесс.nextTick? - Как вы делаете асинхронную функцию, верните значение?
- Могут ли обратные вызовы быть использованы с обещаниями или так или иначе?
- Какой модуль узла реализован большинством других узловных модулей?
- Каковы основные различия между
Спон,Execивилка? - Как работает модуль кластера? Как это отличается от использования балансировщика нагрузки?
- Что такое
--harmony- *Флаги? - Как вы можете прочитать и осмотреть использование памяти в процессе Node.js?
- Что будет узел, когда стек вызовов, и очередь петли события пусты?
- Что такое объект V8 и шаблоны функций?
- Что такое libuv и как node.js использует это?
- Как вы можете сделать Unde’s Rep всегда использовать строгий режим JavaScript?
- Что такое
Процесс.argv.? Какой тип данных он держит? - Как мы можем сделать одну окончательную работу до выхода на процесс узла? Может ли эта операция сделать асинхронно?
- Каковы некоторые из встроенных команд DOT, которые вы можете использовать в UDE REPL?
- Кроме того, V8 и Libuv, какие другие внешние зависимости у узла?
- В чем проблема с процессом
uncuptexceptionмероприятие? Как это отличается отВыходмероприятие? - Что делает
_Значит внутри узела reft? - Буферы узла используют память V8? Могут ли они быть изменены?
- В чем разница между
Buffer.AllocиBuffer.allocunsafe? - Как
ломтикМетод на буферах отличается от этого на массивах? - Что такое
string_decoderМодуль полезный для? Как это отличается от литья буферов на строки? - Каковы 5 основных шагов, которые требуют функции требуют?
- Как вы можете проверить наличие местного модуля?
- Что такое
ГлавнаяНедвижимость вpackage.jsonполезный для? - Каковы круглые модульные зависимости в узле и как их можно избежать?
- Каковы 3 расширения файлов, которые будут автоматически пробовать функцией требуют?
- При создании HTTP-сервера и написание ответа на запрос, почему
конец ()Требуется функция? - Когда это нормально использовать файловую систему
* Синхронизацияметоды? - Как вы можете распечатать только один уровень глубоко вложенного объекта?
- Что такое
Узел-GYPПакет используется для? - Объекты
Экспорт,требуетсяимодульВсе во всем мире доступны в каждом модуле, но они отличаются в каждом модуле. Как? - Если вы выполняете файл сценария узла, который имеет одну строку:
console.log (аргументы);Что именно будет узел печатать? - Как модуль может быть оба требовать от других модулей и исполняемых непосредственно с помощью
Узелкоманда? - Какой пример встроенного потока в узле, который является как читаемый, так и для записи?
- Что происходит, когда линия Cluster.fork () выполняется в узле сценария?
- В чем разница между использованием излучателей событий и используя простые функции обратного вызова, чтобы обеспечить асинхронное обращение с кодом?
- Что такое
Консоль. ВремяФункция полезной для? - В чем разница между приостановленными и течетными модами читаемых потоков?
- Что делает
IinspectАргумент сделать для команды узла? - Как вы можете прочитать данные из подключенного сокета?
-
требуетсяФункция всегда кэширует модуль, который требуется. Что вы можете сделать, если вам нужно выполнить код в нужный модуль много раз? - При работе с потоками, когда вы используете функцию трубы и когда вы используете события? Могут ли эти два метода быть объединены?
Мой взять лучший способ выучить Node.js Runtime
Изучение Node.js может быть сложной. Вот некоторые рекомендации, которые я надеюсь, поможет вдоль этого путешествия:
Узнайте хорошие части JavaScript и изучите его современный синтаксис (ES2015 и за его пределами)
Узел – это набор библиотек в верхней части двигателя VM, который может составить JavaScript, чтобы он не сказал, что важные навыки для самого JavaScript – это подмножество важных навыков для узла. Вы должны начать с самого JavaScript.
Вы понимаете функции, САМОСЫ , Привязка, это ключевое слово, новое ключевое слово, закрытие , классы, модульные паттерны, прототипы, обратные вызовы и обещания? Знаете ли вы о различных методах, которые можно использовать по номерам, строкам, массивам, наборам, объектам и картам? Приобрести себя комфортно с элементами в этом списке, сделает изучение узла API намного проще. Например, пытаясь узнать методы модуля FS, прежде чем у вас хорошее понимание обратных вызовов, может привести к ненужной путанице.
Понять, как неблокирующая природа узла
Обратные вызовы и обещания (и генераторы/асинхронизаторы) особенно важны для узла. Вы должны понимать, как асинхронные операции являются первым классом в узле.
Вы можете сравнить неблокирующую природу строк кода в программе узла к тому, как вы заказываете кофе Starbucks (в магазине, а не диск-через):
- Поместите свой заказ | Дайте узел некоторые инструкции для выполнения (функция)
- Настройте свой заказ, не взбитые сливки, например | Дайте функцию некоторые аргументы:
({WhivectedCream: false}) - Дайте работнику Starbucks ваше имя с заказом | Дайте узел обратный вызов с вашей функцией:
({WhivectedCream: false}, обратный вызов) - Выйди в сторону, и работник Starbucks примет заказы от людей, которые были после вас в очереди | Узел займет инструкции из строк после вашего.
- Когда ваш заказ готов, работник Starbucks позвонит вашему имени и дает вам ваш заказ | Когда ваша функция вычисляется и Node.js имеет готовый результат для вас, это позвонит ваш обратный вызов с этим результатом:
Обратный вызов (результат)
Я написал сообщение в блоге об этом: Асинхронное программирование, как видно в Starbucks
Узнайте модель параллелизма JavaScript и как она основана на контуре события
Есть стек, куча и очередь. Вы можете читать книги на эту тему и до сих пор не понять это полностью, но я гарантирую, что вы сделаете, если вы смотрите Этот парень Отказ
Филипп объясняет петлю события, в котором находится в браузере, но почти то же самое относится к Node.js (есть некоторые различия).
Понять, как процесс узла никогда не спит, и выйдет, когда нечего делать
Процесс узла может быть холостым, но никогда не спит. Он отслеживает все обратные вызовы, которые ожидаются, и если не осталось выполнить, что он просто выйдет. Чтобы сохранить процесс узла, который вы можете, например, использовать setinterval. Функция, потому что это создаст постоянный ожидающий обратный вызов в контуре события.
Узнайте глобальные переменные, которые вы можете использовать как процесс, модуль и буфер
Они все определены в глобальной переменной (которая обычно сравнивается с окно переменная в браузерах). В REPL-узле введите Глобальный. И нажмите вкладку, чтобы увидеть все доступные товары (или простые двойные вкладки на пустой строке). Некоторые из этих предметов являются структурами JavaScript (например Array и объект ). Некоторые из них являются функциями библиотеки узлов (например Setimeate или Консоль печатать на stdout. / Стдерр ), а некоторые из них являются узлами глобальных объектов, которые вы можете использовать для определенных задач (например, Process.env Может использоваться для прочтения переменных хост-среды).
Вы должны понимать большую часть того, что вы видите в этом списке.
Узнайте, что вы можете сделать со встроенными библиотеками, которые отправляются с узлом и как у них есть фокус на «сеть»
Некоторые из них будут чувствовать себя знакомыми, как Таймеры Например, поскольку они также существуют в браузере, и узел имитирует эту среду. Тем не менее, намного больше, чтобы учиться, как ФС , путь , readline. , http. , нетто , транслировать , кластер , … (Авто-полный список выше у них все).
Например, вы можете прочитать/запись файлов с фшс , вы можете запустить готовый веб-сервер, используя « http », и вы можете запустить сервер TCP и сокеты программирования с помощью « Net ». Узел сегодня гораздо сильнее, чем было всего год назад, и по всему миру становится все лучше. Прежде чем поискать пакет, чтобы выполнить некоторую задачу, убедитесь, что вы не можете выполнить эту задачу со встроенными узлами пакетами сначала.
События Библиотека особенно важна, потому что большая часть архитектуры узла является управляемой событиями.
Там всегда Более того, что вы можете узнать о узле API Так что продолжайте расширять свои горизонты.
Понять, почему узел называется узлом
Вы создаете простые однопроцессные строительные блоки (узлы), которые могут быть организованы с помощью хороших сетевых протоколов, чтобы они обменивались друг с другом и масштабируются, чтобы построить большие распределенные программы. Масштабирование приложения узла не является запоздалом – он встроен прямо во имя.
Читать и попытаться понять какой-код, написанный для узла
Выберите каркас, как экспресс и попытайтесь понять некоторые из его кода. Задайте конкретные вопросы о вещах, которые вы не понимаете. Я пытаюсь ответить на вопросы на Jscomplete Slack Channel когда я смогу.
Наконец, напишите веб-приложение в узле без использования каких-либо каркасов. Постарайтесь обрабатывать столько случаев, как вы можете, ответить на HTML-файл, строки запроса Parse, принять ввод формы и создать конечную точку, которая отвечает JSON.
Также попробуйте написать сервер чата, публикующую пакет NPM и вклад в проект на основе узла с открытым исходным кодом.
Удачи! Спасибо за прочтение.
Изучение реагировать или узел? Оформить заказ моих книг:
Оригинал: “https://www.freecodecamp.org/news/before-you-bury-yourself-in-packages-learn-the-node-js-runtime-itself-f9031fbd8b69/”