“Версию Node можно проверить следующей командой:
node -v
”
“Объект process предоставляет доступ к информации как о среде Node, так и о среде выполнения программы. Для получения информации мы воспользуемся параметром командной строки -p, который выполняет сценарий и возвращает полученный результат”
“Node поддерживает чтение и запись 8-, 16- и 32-разрядных целых чисел со знаком и без, а также вещественных чисел одинарной и двойной точности. Для всех типов, кроме 8-разрядных целых чисел, также можно выбрать формат с прямым (little-endian) или обратным (big-endian) порядком байтов. Несколько примеров поддерживаемых функций: 1)
buffer.readUIntLE()
: чтение значения с заданным смещением и прямым порядком байтов. 2)buffer.writeUInt16BE()
: запись 16-разрядного целого без знака с заданным смещением и обратным порядком байтов. 3)buffer.readFloatLE()
: чтение вещественного числа одинарной точности с заданным смещением и прямым порядком байтов. 4)buffer.writeDoubleBE()
: запись 64-разрядного вещественного числа двойной точности с заданным смещением и обратным порядком байтов.”
“Но если вы интересуетесь разработкой дополнений для Node, вам придется очень близко познакомиться с libuv. Начать можно с введения в libuv (https://nikhilm.github.io/uvbook/basics.html).”
“Стоит немного поскрести многие базовые объекты Node, и под оболочкой обнаружится EventEmitter. Каждый раз, когда вы видите объект, генерирующий событие, которое обрабатывается функцией on, знайте: перед вами EventEmitter. Понимание того, как работает класс EventEmitter, и умение его использовать — две важнейшие составляющие программирования для Node… Класс EventEmitter обеспечивает асинхронную обработку событий в Node.”
“В браузере для работы с таймерами существуют setTimeout() и setInterval(); эти функции также доступны и в Node. Они не совсем равноценны, потому что браузер использует цикл событий, реализуемый на уровне ядра браузера, а цикл событий Node реализуется библиотекой C++, libuv, но в основном различия между ними несущественны.”
“Функция setImmediate() создает событие, но это событие имеет более высокий приоритет, чем события, созданные setTimeout() и setInterval(). Однако при этом оно не превосходит по приоритету события ввода/вывода и с ним не связывается собственный таймер. Событие setImmediate() генерируется после всех событий ввода/вывода, до событий таймера, и в текущей очереди событий. Если вызвать его из функции обратного вызова, то оно помещается в следующий цикл событий после завершения того цикла, в котором оно было вызвано. Фактически эти функции позволяют добавить событие в текущий или в следующий цикл событий без лишних таймеров. Этот способ эффективнее
setTimeout(callback, 0)
, потому что он превосходит по приоритету другие события таймеров. Он похож на другую функцию —process.nextTick()
, не считая того, что функция обратного вызова process.nextTick() активизируется после завершения текущего цикла событий, но до добавления каких-либо новых событий ввода/ вывода”
“REPL — удобный интерактивный инструмент, который облегчает разработчику жизнь. REPL позволяет не только опробовать код JavaScript перед включением его в файлы, но и создавать приложения в интерактивном режиме, с сохранением результатов после завершения работы. Другая полезная особенность REPL — возможность создания специализированной версии REPL, способной исключать нежелательные ответы undefined, осуществлять предварительную загрузку модулей, изменять приглашение или используемую функцию eval и делать многое другое.”
“Так как многие объекты в Node реализуют потоковый интерфейс, все потоки в Node обладают базовой функциональностью: 1) Изменение кодировки потоковых данных вызовом setEncoding. 2) Проверка возможности чтения и (или) записи данных в поток. 3) Перехват событий потоков (например, получения данных или закрытия подключения) с назначением функций обратного вызова для каждого события. 4) Приостановка и возобновление потока. 5) Перенаправление данных из потока для чтения в поток для записи.”
“Модуль Node File System (fs) предоставляет всю функциональность, необходимую для работы с файловой системой независимо от операционной системы.”
“Кроме многочисленных функций, модуль File System поддерживает четыре класса: 1) fs.FSWatcher — поддержка событий для отслеживания изменений в файле. 2) fs.ReadStream — поток для чтения. 3) fs.WriteStream — поток для записи. 4) fs.Stats — информация, возвращаемая функциями *stat.”
“Объект fs.Stats возвращается при использовании функций fs.stat(), fs.lstat() и fs.fstat(). Он может использоваться для проверки существования файла (или каталога), но также возвращает информацию о том, является ли объект файловой системы файлом/каталогом/сокетом домена UNIX, какие разрешения связаны с файлом, время последнего обращения или модификации объекта и т. д”
“
fs.readFile()
илиfs.writeFile()
(или их синхронные аналоги). Эти функции открывают файл, выполняют чтение или запись, после чего закрывают файл”
“Поток для чтения создается вызовом
fs.createReadStream()
с передачей пути и объекта options или же с включением описания файла в options без указания пути. То же можно сказать о потоках для записи, создаваемых вызовомfs.createWriteStream()
. В обоих случаях поддерживается объектoptions
.”
“Сокет (socket) представляет собой конечную точку обмена данными, а сетевой сокет — конечную точку обмена данными между приложениями, работающими на двух разных компьютерах в сети. Данные, передаваемые между сокетами, образуют поток (stream). Данные в потоке могут передаваться либо в виде двоичных данных в буфере, либо в виде строки в кодировке Юникод. Оба типа данных передаются в форме пакетов: частей данных, разделенных на блоки сходного размера. Также существует специальная разновидность пакетов — завершающий пакет (FIN), отправляемый сокетом как сигнал о завершении передачи.”
“TCP требует выделенного соединения между двумя конечными точками. UDP — протокол, не требующий соединения; это означает, что соединение между двумя конечными точками не гарантировано. По этой причине протокол UDP по надежности и степени защиты от ошибок уступает TCP. С другой стороны, UDP обычно работает быстрее TCP, что делает его более популярным для задач реального времени и таких технологий, как VoIP (Voice over Internet Protocol), в которых требования к соединению TCP могут отрицательно повлиять на качество сигнала.”
“Безопасный, защищенный от несанкционированного вмешательства обмен данными между клиентом и сервером осуществляется через протокол SSL (Secure Sockets Layer) и его обновленный вариант TLS (Transport Layer Security). Уровень TLS/SSL реализует шифрование данных для протокола HTTPS, который будет рассмотрен в следующем разделе. Но прежде чем браться за программирование для HTTPS, необходимо подготовить среду разработки”
“Node предоставляет криптографический модуль Crypto, открывающий интерфейс к функциональности OpenSSL. В него включены обертки для функций хеширования OpenSSL, HMAC, шифрования, дешифрования, подписи и верификации. Этот компонент Node достаточно прост в использовании, но он основан на предположении, что разработчик Node хорошо знает OpenSSL и все используемые функции”
“В самом распространенном используется метод
spawn
. Он запускает команду в новом процессе, передавая ей любые аргументы. Между родительским приложением и дочерним процессом создаются каналы (pipes) для stdin, stdout и stderr”
“Кроме порождения дочернего процесса функцией child_process.spawn(), для выполнения команды также можно воспользоваться функциями child_ process.exec() и child_process.execFile(). Метод child_process.exec() похож на child_process.spawn(), не считая того, что spawn() начинает возвращать поток сразу же после запуска программы, как видно из листинга 8.1. Функция child_process.exec(), как и child_process. execFile(), буферизирует результаты. Однако exec() порождает командный интерпретатор для управления приложением, тогда как child_process. execFile() запускает процесс напрямую. Это делает функцию child_process. execFile() более эффективной по сравнению как с child_process.spawn() с включенным режимом shell, так и с child_process.exec(). В первом параметре child_process.exec() или child_process.execFile() передается либо команда (для exec()), либо файл и его местоположение (execFile()); второй параметр содержит объект options для команды; в третьем параметре передается функция обратного вызова. Функция обратного вызова получает три аргумента: error, stdout и stderr. При отсутствии ошибок данные буферизируются в stdout.”
“Последний метод дочерних процессов — child_process.fork(). Эта разновидность spawn() предназначена для порождения процессов Node. Вызов child_process.fork() отличается от других тем, что он создает реальный канал передачи данных дочернему процессу. Однако обратите внимание на то, что каждому процессу требуется новый экземпляр V8, а это приводит к дополнительным затратам времени и памяти.”
“Строгий режим сильно влияет на работу кода. В частности, он выдает ошибки, если переменная не определяется перед использованием; параметр функции может объявляться только единожды; переменная не может использоваться в eval-выражении на одном уровне с вызовом eval, и т. д”
“MongoDB — самая популярная база данных, используемая в приложениях Node. Эта система относится к категории документных баз данных. Документы кодируются в формате BSON — двоичной разновидности JSON (что, вероятно, объясняет его популярность среди разработчиков JavaScript). В MongoDB место записи таблицы занимает документ BSON, а место таблицы — коллекция.”
“Объект MongoClient — тот объект, который вы будете использовать чаще всего для подключения к базе данных. Обратите внимание на заданный номер порта (27017): это порт по умолчанию для системы MongoDB”
“Memcached в основном используется для кэширования запросов к данным, чтобы ускорить последующие обращения к ним. Система также хорошо справляется с распределенным кэшированием, но поддержка более сложных данных в ней ограничена. Она хорошо работает в приложениях, выдающих большое количество запросов на выборку, но не столь эффективно проявляет себя в приложениях с многочисленными операциями чтения и записи. Redis — отличный вариант для приложения второго типа. Кроме того, данные Redis могут сохраняться, и система обладает большей гибкостью, чем Memcached, — особенно в поддержке различных типов данных. Однако, в отличие от Memcached, Redis работает только на одной машине.”
“Те же факторы следует учитывать при сравнении Redis с Cassandra. В Cassandra, как и в Memcached, реализована поддержка кластеров. С другой стороны, как и в Memcached, поддержка структур данных в Cassandra ограничена. Система хорошо подходит для выдачи ситуативных запросов — сценарий использования, плохо подходящий для Redis. С другой стороны, система Redis проста в использовании, незатейлива и обычно работает быстрее Cassandra. По этим и другим причинам система Redis пользуется большей популярностью среди разработчиков Node.”
“Чтобы установить точку прерывания в коде, вставьте команду
debugger
прямо в код”
“Чтобы приступить к отладке приложения, укажите параметр debug при запуске приложения:
node debug application
”
“Модульное тестирование — метод изоляции компонентов приложения для тестирования. Многие тесты, содержащиеся в подкаталоге tests модулей Node, являются модульными. Все тесты в подкаталоге test установки Node тоже являются модульными. Многие из этих тестов были построены с использованием модуля Assert”
“Тестовые утверждения проверяют значение некоторых выражений; конечным результатом такой проверки является логическое значение true или false.”
“Nodeunit предоставляет способ сценарного программирования тестов. Все запрограммированные тесты выполняются последовательно, а вывод результатов координируется. Чтобы использовать модуль Nodeunit, установите его глобально с использованием npm:
[sudo] npm install nodeunit -g
”
best free sudoku app without ads iphone (promo)
No comments:
Post a Comment