Разработка Web-приложения с использованием JavaScript каркаса Node.js

Запуск Node-серверов на этапе инициализации системы. Использование процессорных ядер в многоядерной системе. Хранение и выборка данных. Практический пример на основе продолжительных вычислений (числа Фибоначчи). Движки сохранения данных для Node.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 07.04.2014
Размер файла 901,2 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

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

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

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

var fibonacciAsync = exports.fibonacciAsync = function(n, done) {

if (n === 1 || n === 2)

done(1);

else {

process.nextTick(function() {

fibonacciAsync(n-1, function(val1) {

process.nextTick(function() {

fibonacciAsync(n-2, function(val2) {

done(val1+val2);

});

});

});

});

}

}

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

fibonacciAsync(n, function(value) {

// произвести какие-то действия с value

});

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

В коде fibonacciAsync функция process.nextTick заменяет следующее предложение в первоначальном варианте алгоритма:

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');

var math = require('./math');

function sendResult(req, res, a, fiboval) {

res.writeHead(200, {

'Content-Type': 'text/html'

});

res.end(

htutil.page("Fibonacci", htutil. navbar(), [

(!isNaN(fiboval) ?

("<p class='result'>fibonacci {a} = {fibo}</p>”

.replace("{a}", a)

.replace("{fibo}", fiboval))

: ""),

"<p>Enter a number to see its fibonacci</p>",

"<form name='fibonacci' action='/fibonacci' method='get'>",

"A: <input type='text' name='a' />",

"</form>"

].join( "\n"))

):

}

exports.get = function(req, res) {

if (!isNaN(req.a)) {

math.fibonacciAsync(Math.floor(req.a), function(val) {

sendResult(req, res, Math.floor(req.a), val);

});

} else {

sendResult(req, res, NaN, NaN);

}

}

Мы вынесли всю работу в функцию sendResult, которая вызывается по-разному в зависимости от того, задал пользователь номер числа Фибоначчи или нет.

Для вычисления больших чисел Фибоначчи все равно требуется много времени, но сервер не блокируется и может обрабатывать другие запросы. В этом легко убедиться, открыв страницу в нескольких вкладках браузера. В одной вкладке запросив вычисление большого числа Фибоначчи, а во второй выполнив другие запросы. Теперь сервер не впадает в глубокую задумчивость, а возвращает результаты.

Заключение

Этот проект - прекрасная отправная точка, с которой можно начать путешествие в увлекательный мир разработки веб-приложений для Node.js. При желании на практике можно научиться пользоваться серверным и клиентским объектами HTTP, каркасами Connect и Express, освоить алгоритмы асинхронного выполнения и узнать, как работать с базами данных на основе SQL и с MongoDB. А Также познакомиться с применяемой в Node.js системой организации модулей на основе спецификации CommonJS, которая позволяет реализовать представительное подмножество технологии объектно-ориентированного проектирования.

Список использованной литературы

1. Хэррон Д. «Node.js. Разработка серверных веб-приложений в JavaScript»: Пер. с англ. Слинкина А.А. - М.: ДМК Пресс, 2012. - 144с.: ил.

Размещено на Allbest.ru


Подобные документы

  • Проведение тестирования производительности Node.js сервера в зависимости от количества и интенсивности подключений, анализ данных. Аппаратные и программные компоненты тестового стенда. Принцип работы протокола websocket. Серверная часть приложения.

    курсовая работа [3,8 M], добавлен 07.07.2013

  • Технологии создания web-страниц. Появление Active Server Pages. Разработка динамического web-сайта на asp.net. Создание дизайна и каркаса сайта с использованием стандартных HTML таблиц. Проектирование базы данных на основе ado.net и подключение к ней.

    контрольная работа [2,4 M], добавлен 24.05.2019

  • Вибір технології для створення системи управління контентом. Можливості платформи Node.JS. Опис framework Express, який використовується для створення каркасу додатку. База даних MongoDB. Опис компонентів і проектних рішень. Взаємодія клієнта та сервера.

    курсовая работа [5,2 M], добавлен 29.11.2013

  • Разработка приложения на базе скриптового языка программирования JavaScript, с использованием каскадных таблиц стилей CSS в среде программирования Bluefish Editor. Обоснование выбора инструментов. Применение клавиш управления памятью калькулятора.

    курсовая работа [3,8 M], добавлен 22.06.2015

  • Общее определение и история создания JavaScript библиотек, их назначение и использование. Виды и особенности JS фреймворков. Создание клиентского приложения (каталога комплектующих компьютера), написание кода страницы с использованием фреймворка Jquery.

    курсовая работа [544,5 K], добавлен 17.12.2013

  • Создание электронного филологического словаря. Использование не реляционной базы данных. Средства JavaScript для создания интерактивности на странице. Серверный язык программирования PHP. Специфика словарной статьи. Взаимодействие с базой данных.

    курсовая работа [689,9 K], добавлен 26.02.2015

  • Разработка программного продукта - приложения, позволяющего заносить данные анкетирования в базу данных MS SQL. Описание логики работы приложения, особенности пользовательского интерфейса. Формы просмотра анкет, описание процедур и функций программы.

    курсовая работа [1,2 M], добавлен 16.08.2012

  • Сравнительная характеристика, возможности и функции языков программирования JavaScript и PHP. Основные области их использования. Разработка интерактивного Web-приложения с применением JavaScript на примере теста по теме "Программирование на языке Delphi".

    курсовая работа [19,3 K], добавлен 01.07.2014

  • Разработка приложения для работы с базой данных с использованием объектно-ориентированного и визуального программирования. Обзор языка элементов языка программирования Delphi. Проектирование базы данных автозаправки. Клиентская система приложения.

    курсовая работа [2,3 M], добавлен 31.01.2016

  • Разработка логической и физической моделей базы данных предприятия и описание атрибутов. Порядок создания справочников и реквизитов базы данных на основе программы "1С:Предприятие 8.2", назначение связей таблиц. Пример сгенерированных SQL-кодов.

    курсовая работа [2,7 M], добавлен 02.12.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.