то хто вважає, що потенційно вона може замінити традиційні стеки веб-додатків.
В основі реалізації лежить цикл обробки подій неблокуючим введення/виводу і бібліотеки файлового і мережевого вводу/виводу, причому все це побудовано поверх движка V8 JavaScript (запозиченого з веб-браузера Chrome). Бібліотека введення/виводу володіє достатньою спільністю для реалізації будь-якого протоколу на базі TCP або UDP: DNS, HTTP, IRC, FTP та ін. Але хоча вона підтримує розробку серверів і клієнтів довільного протоколу, найчастіше застосовується для створення звичайних веб-сайтів, де замінює Apache/PHP або Rails.
. 1 Що дозволяє робити Node?
- платформа для написання JavaScript-додатків поза веб-браузера. Це не той JavaScript, з яким усі ми знайомі з досвіду роботи з браузерами. У Node не вбудована ні об'єктна модель документа (DOM), ні будь-які ще можливості браузера. Саме мова JavaScript у поєднанні з асинхронним уведенням/висновком робить Node потужною платформою для розробки додатків. Але от для чого Node непридатна, так це для розробки персональних додатків з графічним інтерфейсом користувача (ГІП). На сьогоднішній день в Node немає вбудованого еквівалента Swing (або SWT). Немає і підключається бібліотеки ГІП для Node, і впровадити Node в браузер теж не можна. Якби для Node існувала бібліотека ГІП, то на цій платформі можна було будувати і персональні програми. Нещодавно з'явилося кілька проектів по створенню інтерфейсу між Node і GTK, підсумком яких повинна стати крос-платформна бібліотека ГІП. До складу движка V8, використовуваного в Node, входять API-розширення, що дозволяють писати на C/C ++ код для розширення JavaScript або інтеграції движка з платформеними бібліотеками.
Крім вбудованого вміння виконувати код на JavaScript, включені до складу дистрибутива модулі надають і інші можливості:
утиліти командного рядка (для включення в скрипти оболонки);
засоби написання інтерактивних консольних програм (цикл «читання - виконання - друк»);
чудові функції управління процесами для спостереження за дочірніми процесами;
об'єкт Buffer для роботи з двійковими даними;
механізм для роботи з сокетами TCP і UDP з повним комплектом зворотніх викликів у відповідь на події;
пошук в системі DNS;
засоби для створення серверів і клієнтів протоколів HTTP і HTTPS, побудовані на основі бібліотеки ТСР-сокетів;
засоби доступу до файлової системи;
вбудована рудиментарная підтримка автономного тестування за допомогою тверджень.
Мережевий шар Node знаходиться на низькому рівні, але працювати з ним все одно просто. Наприклад, модулі HTTP дозволяють реалізувати HTTP-сервер (або клієнт), написавши всього кілька рядків коду, але, тим не менш, на цьому рівні програміст працює дуже близько до реальних запитам по протоколу і може точно вказати, які HTTP-заголовки слід включати в відповідь на запит. Якщо програміст на РНР зазвичай не цікавиться заголовками, то для програміста на Node вони істотні.
Іншими словами, написати на Node HTTP-сервер дуже просто, але типовому розробнику веб-додатків немає потреби працювати на такому низькому рівні. Наприклад, кодуючи на РНР, програміст припускає, що Apache вже присутня, так що реалізовувати серверну частину стека йому не потрібно. Спільнота, що склалося навколо Node, створило широкий спектр каркасів для розробки веб-додатків, у тому числі Connect, які дозволяють швидко конфігурувати HTTP так, щоб надавалося все, до чого ми звикли, - сеанси, куки, обслуговування статичних файлів, протоколювання і т. д.- І нехай розробник займається бізнес-логікою програми.
. 2 Чому має сенс використовувати Node?
Мова JavaScript дуже популярний завдяки присутності в будь-якому веб-браузері. Він ні в чому не поступається іншим мовам, але при цьому підтримує багато сучасні уявлення про те, яким повинен бути мова програмування. Завдяки широкому поширенню є чимало досвідчених програмістів на JavaScript.
Це динамічний мову зі слабо типізований, динамічно розширюваними об'єктами, які неформально оголошуються в міру необхідності. Функції в ньому є повноцінними об'єктами і зазвичай використовуються у вигляді анонімних замикань. Це робить JavaScript більш потужним мовою, порівняно з деякими іншими, часто вживаними для розробки веб-додатків. Теоретично наявність подібних можливостей має підвищувати продуктивність програмістів. Але суперечки між прихильниками динамічних і статичних мов, а також суворої і слабкою типізації досі не вщухли і навряд чи коли-небудь вщухнуть.
Один з основних недоліків JavaScript - Глобальн...