Теми рефератів
> Реферати > Курсові роботи > Звіти з практики > Курсові проекти > Питання та відповіді > Ессе > Доклади > Учбові матеріали > Контрольні роботи > Методички > Лекції > Твори > Підручники > Статті Контакти
Реферати, твори, дипломи, практика » Курсовые проекты » Розробка Web-додатки з використанням JavaScript каркаса Node.js

Реферат Розробка Web-додатки з використанням JavaScript каркаса Node.js





ести «велике» число, наприклад 50. На його обчислення піде ДУЖЕ багато часу (години або навіть дні), при цьому процес Node споживатиме майже всі процесорний час, і ні в якому іншому вікні браузера отримати відповідь від програми Math Wizard буде неможливо. А все тому, що наш алгоритм знаходження послідовності чисел Фібоначчі виконує дуже великий обсяг обчислень. А чому не відповідає браузер? Бо поки програма займається обчисленнями, вона не дає працювати циклу обробки подій, і, значить, Node не може відповісти на запити.

Оскільки в Node є всього один потік виконання, для обробки запитів необхідно, щоб обробники швидко повертали управління в цикл обробки подій. Звичайна практика написання асинхронних програм передбачає, що повернення в цей цикл проводиться швидко. Це справедливо навіть у випадку, коли для обробки запиту потрібно завантажувати дані з сервера на іншому кінці земної кулі, оскільки внаслідок неблокуючим вводу/виводу управління швидко повертається в цикл. Але наша наївна функція обчислення чисел Фібоначчі не задовольняє цій умові, так як виконує тривалу блокирующую операцію. У такому випадку система не може обробляти нові запити, і Node перестає бути тим, чим задумана, - супершвидкісним веб-сервером.

У даному прикладі проблема очевидна. Час обробки зростає так швидко, що вже для обчислення числа Фібоначчі, віддаленого порівняно недалеко від початку послідовності, його йде стільки, що цілком можна встигнути з'їздити у відпустку на Тибет. Але в додатку уповільнення реакції може бути не так помітно, і як же тоді дізнатися, які запити обробляються занадто довго? Один зі способів - скористатися яким-небудь вбудовуваним в браузер засобом вимірювання затримки, наприклад YSlow. Евристичне правило просте: якщо браузером користується людина, то на завантаження сторінки повинне йти не більше двох секунд, інакше ви ризикуєте втратити відвідувача.

У Node існують два загальних способи вирішення цієї проблеми.

Переробка алгоритму. Наприклад, обраний нами алгоритм обчислення чисел Фібоначчі не оптимальний, його можна замінити більш швидким. А якщо це не виходить, то потрібно розбити алгоритм на шматочки і доручити управління ними циклу обробки подій. Один приклад такого підходу ми розглянемо нижче.

Створення фонової служби. Можна собі уявити спеціальний допоміжний сервер, який займається тільки обчисленням чисел Фібоначчі? Мабуть, немає, але, взагалі кажучи, виділення серверів заднього плану для розвантаження серверів переднього плану - звичайна справа. Оброблювач запитів повинен буде асинхронно звертатися до служб або баз даних, збирати інформацію, необхідну для відповіді, і, коли все буде готово, відправити відповідь браузеру.

Ми могли б оптимізувати алгоритм обчислення чисел Фібоначчі, але замість цього перетворимо нашу неасінхронную функцію в асинхронну, із зворотним викликом. Асинхронне обчислення чисел Фібоначчі - не найкраща думка, але зате на цьому прикладі ми зможемо продемонструвати переробку алгоритму. Ми розіб'ємо обчислення на послідовність зворотних викликів, які будуть викликатися з циклу обробки подій.

Насамперед додамо нову функцію обчислення чисел Фібоначчі замість початкового наївного  варіанта. З вами таке теж може трапитися - перша спроба виявляється невдалою і повільної, але згодом знаходиться більш підходяща реалізація. Додайте в файл math.js такий код:


var fibonacciAsync=exports.fibonacciAsync=function (n, done) {(n === 1 || n === 2) (1); {. nextTick (function () {(n- 1, function (val1) {.nextTick (function () {(n - 2, function (val2) {(val1 + val2);

});

});

});

});

}

}


Це новий асинхронний алгоритм. Ми перетворили просту функцію в асинхронно кероване обчислення, результат якого передається за допомогою функції зворотного виклику наступним чином:


fibonacciAsync (n, function (value) {

//призвести якісь дії з value

});


Ми викликаємо функцію process.nextTick, щоб перетворити рекурсивну функцію в послідовність кроків, що викликаються диспетчером циклу обробки подій. Черговий крок реалізований у вигляді зворотного дзвінка зі циклу, а повернення в цикл після кожного кроку проводиться швидко, так що сервер може продовжувати обробку HTTP-запитів. Це не єдиний спосіб розбити алгоритм на кроки, що викликаються за допомогою циклу обробки подій. Для вирішення даної задачі призначений модуль async, в якому є багато функцій, покликаних приборкати асинхронний JavaScript.

У коді fibonacciAsync функція process.nextTick замінює наступну пропозицію ...


Назад | сторінка 11 з 12 | Наступна сторінка





Схожі реферати:

  • Реферат на тему: ! Застосування чисел Фібоначчі
  • Реферат на тему: Алгоритм Виконання Операції множення чисел в прямому коді
  • Реферат на тему: Алгоритм виконання операцій множення двійкових чисел
  • Реферат на тему: Написання програм обчислення функцій
  • Реферат на тему: Проектування алгоритму обчислення елементарної функції з використанням табл ...