в первинному варіанті алгоритму:
return fibonacci (n - 1) + fibonacci (n - 2);
Завдання полягає в тому, щоб обчислити два числа Фібоначчі, скласти їх і повернути результат викликає функції. У новому алгоритмі кожному з трьох кроків відповідає анонімна функція. А щоб їх виклики вироблялися з циклу обробки подій, ми використовували process.nextTick.
Перш ніж рухатися далі, треба осмислити це рішення. Ми ніяк не зменшили обсяг обчислень, а лише розподілили його по циклу обробки подій. Процес Node раніше навантажує процесор, тому обраний нами підхід - не кращий спосіб оптимізувати такий алгоритм, як обчислення чисел Фібоначчі. Але він демонструє розподіл роботи за допомогою циклу обробки подій; іноді ця техніка корисна, іноді - не дуже.
Створюємо новий файл fibo2-node.js і міняємо app-node.js, включивши виклик require ( ./ fibo2-node ), щоб використовувався новий модуль обчислення чисел Фібоначчі. Цей рядок вже є у файлі app-node.js, тільки закоментований. Вам залишається лише перенести коментар з одного рядка на іншу:
var htutil=require ( ./ htutil ); math=require ( ./ math ); sendResult (req, res, a, fiboval) {.writeHead (200, {
Content-Type raquo ;: text/html
}) ;. end (.page ( Fibonacci raquo ;, htutil. navbar (), [
(! isNaN (fiboval)?
(" lt; p gt; result gt; fibonacci {a}={fibo} lt;/p gt;
. replace ( {a} raquo ;, a)
. replace ( {fibo} raquo ;, fiboval))
: ),
lt; p gt; Enter a number to see its fibonacci lt;/p gt; ,
lt; form name= fibonacci action=/fibonacci method= get gt; ,
A: lt; input type= text name= a / gt; ,
lt;/form gt;
]. join ( n ))
):
}. get=function (req, res) {(! isNaN (req.a)) {.fibonacciAsync (Math.floor (req.a), function (val) {(req, res , Math.floor (req.a), val);
});
} else {(req, res, NaN, NaN);
}
}
Ми винесли всю роботу в функцію sendResult, яка викликається по-різному залежно від того, задав користувач номер числа Фібоначчі чи ні.
Для обчислення великих чисел Фібоначчі все одно потрібно багато часу, але сервер не блокується і може обробляти інші запити. У цьому легко переконатися, відкривши сторінку в декількох вкладках браузера. В одній вкладці запитавши обчислення великого числа Фібоначчі, а в другій виконавши інші запити. Тепер сервер не впадає в глибоку задумливість, а повертає результати.
Висновок
Цей проект - прекрасна відправна точка, з якої можна почати подорож в захоплюючий світ розробки веб-додатків для Node.js. При бажанні на практиці можна навчитися користуватися серверним і клієнтським об'єктами HTTP, каркасами Connect і Express, освоїти алгоритми асинхронного виконання і дізнатися, як працювати з базами даних на основі SQL і за MongoDB. А Також познайомитися з вживаною в Node.js системою організації модулів на основі специфікації CommonJS, яка дозволяє реалізувати представницьке підмножина технології об'єктно-орієнтованого проектування.
Список використаної літератури
1. Херрон Д. «Node.js. Розробка серверних веб-додатків в JavaScript »: Пер. з англ. Слінкіна А.А.- М .: ДМК Пресс, 2012. - 144с .: ил.