ent, але все одно деякі вважають, що спроба запроторити складність подалі не чинить проблему проще.прізивает підходити до паралелізму по-іншому. Зворотні дзвінки з циклу обробки подій - набагато простіша модель паралелізму, як для розуміння, так і для реалізації.
Щоб пояснити необхідність асинхронного введення/виводу, Райан Дав нагадує про відносне часу доступу до об'єктів. Доступ до об'єктів в пам'яті (порядку наносекунд) проводиться швидше, ніж до об'єктів на диску або відвідай (мілісекунди або секунди). Час доступу до зовнішніх об'єктів вимірюється незліченною кількістю тактових циклів і може виявитися вічністю, якщо клієнт, не дочекавшись завантаження сторінки протягом двох секунд, втомиться витріщатися на вікно браузера і відправиться в інше місце.
У Node вищезгаданий запит слід було б записати так:
query (SELECT * from db ', function (result) {
//призвести якісь операції з результатом
}):
Різниця в тому, що тепер результат запиту не повертається в якості значення функції, а передається функції зворотного виклику, яка буде викликана пізніше. Таким чином, повернення в цикл обробки подій відбувається майже відразу, і сервер може перейти до обслуговування інших запитів. Одним з таких запитів буде відповідь на запит, відправлений базі даних, і тоді буде викликана функція зворотного виклику. Така модель швидкого повернення в цикл обробки подій підвищує ступінь використання ресурсів серверів. Це прекрасно для власника сервера, але ще більший виграш отримує користувач, перед яким швидше відкривається вміст сторінки.
У наші дні веб-сторінки все частіше збирають дані з десятків джерел. Кожному потрібно надіслати запит і дочекатися відповіді на нього. Асинхронні запити дозволяють виконувати ці операції паралельно - відправити відразу всі запити, задавши для кожного власний зворотний виклик, і, не чекаючи відповіді, повернутися в цикл обробки подій. А коли прийде відповідь, буде викликана відповідна йому функція. Завдяки распараллеливанию дані можна зібрати набагато швидше, ніж, якби запити виконувалися синхронно, один за д?? угім. І користувач по той бік браузера щасливий, так як сторінка завантажується швидше.
. 3 Продуктивність і використання процесора
Своєю привабливістю платформа Node почасти зобов'язана пропускної здатності (кількість обслуговуваних запитів в секунду). Порівняльні тести схожих програм, наприклад Apache і Node, показують фантастичний виграш в продуктивності.
Один з популярних еталонних тестів - наступний простий НТТР-сервер, який всього лише повертає повідомлення «HelloWorld», читаемое з пам'яті:
var http=require (http ) ;. createServer (function (req, res) {.writeHead (200, { Content-Type laquo ;: text/plain }) ;. end ( Hello World n );
}). listen (+8124, 127.0.0.1 ) ;. log (Server running at # justify gt; Це один з найпростіших веб-серверів, які тільки можна побудувати на платформі Node. Об'єкт http інкапсулює протокол HTTP, а його метод http.createServer створює повнофункціональний веб-сервер, що прослуховує порт, заданий в методі .listen. Кожен запит (до будь-якого URL будь-якого виду - хоч GET, хоч PUT) приводить до виклику зазначеної функції. Сервер дуже простий і зовсім мало «важить». В даному випадку незалежно від URL повертається рядок «HelloWorld» типу text/plain.
Завдяки такому мінімалізму це додаток повинен демонструвати максимальну пропускну здатність. Тому в багатьох опублікованих дослідженнях перелік еталонних тестів починається з цього найпростішого НТТР-сервера.
Райан Дав навів приклад простого тесту (# justify gt; Дастін Маккуей (Dustin McQuay) (# justify gt; PHP/Apache +3187 запитів/с; .js 5569 запитів/с.
Ханнес Вальнёфер (Hannes Wallnflfer), автор RingoJS, написав у своєму блозі замітку, в якій застерігає від прийняття важливих рішень на основі порівняльних тестів (# justify gt; Микито Такада (Mikito Takada) розповів в блозі про порівняльному тестуванні продуктивності Node і Django на прикладі написаного ним додатка «48 hour hackathon» (# justify gt; Щоб повною мірою розкрити потенційні можливості Node, вкрай важливо швидко повертати управління в цикл обробки подій. Зауважимо, що якщо обробник зворотного виклику виконується «занадто довго», то Node перестає бути тим надшвидким сервером, яким був задуманий. В одній з ранніх статей про проект Node (# justify gt; У випадку невеликих веб-додатків («масштабування в малому») реалізація на Node, а не на мовах Р (Perl, РНР, Python і т.д.), повинна давати виграш в продуктивності. JavaScript - потужний мову, а середу Node зі своєю сучасної швидкої віртуальною маш...