Веб-разработка: построение графика и запуск алгоритма - PullRequest
0 голосов
/ 06 января 2012

Я очень новичок в веб-разработке, и я написал код, чтобы взять пользовательский ввод из формы, построить из нее график и запустить алгоритм построения графиков.

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

Чтобы исправить это, я думаю, что я должен использовать javascript вместо отправки запроса - это то, что обычно делается с функциями, которые требуют много времени?

Мой главный вопрос: Придется ли мне переписывать код в javascript или есть способ вызвать мою оригинальную функцию из javascript?

Я использую clojure ...

Ответы [ 3 ]

2 голосов
/ 06 января 2012

Звучит так, будто вам нужно каким-то образом отправить запрос, обработать его в фоновом режиме, а затем получить результаты, когда они будут готовы - все как отдельные веб-запросы.

У любого HTTP-запроса будет тайм-аут, и чем дольше он зависает, тем больше вероятность того, что что-то в сети вызовет его сбой.

Большинство внутренних языков предоставляют какой-то способ достичь этого; Clojure отлично подходит для потоков, агентов и подобных инструментов для этого. Перестройте взаимодействие клиент-сервер, и вам больше не придется об этом беспокоиться.

2 голосов
/ 06 января 2012

Вы можете запрограммировать свой Javascript в Clojure.

clojurescript

1 голос
/ 06 января 2012

Первое, что меня интересует, это насколько велик график, на котором вы запускаете этот алгоритм.Вы делаете что-то с тысячами (или миллионами) вершин и ребер?Или это просто очень дорогой алгоритм?

Давайте предположим, что обработка этих запросов, естественно, займет много времени, независимо от того, насколько хорошо закодирован ваш алгоритм.Переход на javascript не является, строго говоря, единственным решением, но он может быть лучшим подходом для вас.

Параметры:

  1. Запустите алгоритм в javascript наклиентская машина.Здесь происходит следующее: когда пользователь вводит данные в форму, алгоритм запускается на javascript на клиентском компьютере.Ваш сервер больше не участвует, и это хорошо, потому что ваши ресурсы не связаны.

  2. Увеличьте время ожидания на сервере.Не рекомендуется после 20 секунд или около того, потому что люди просто будут облагать налогом ваш сервер больше.

  3. Запустите алгоритм на сервере.Обойти проблему тайм-аута, используя метод, предложенный Дэниелом Питтманом: когда пользователь отправляет запрос, передается обратно идентификатор запроса и закрывается соединение.Установите тайм-аут javascript для отправки запроса к серверу в будущем, когда вы ожидаете, что алгоритм завершит работу.Если закончено, сервер возвращает результаты, и это тогда обработано.Если нет, перезапустите таймер.

Так что на самом деле все сводится к тому, хотите ли вы, чтобы ваш сервер или компьютер клиента выполняли свою работу.Если последнее, то это будет в javascript, если вы не пойдете по пути создания вашего javascript с использованием clojurescript.Я бы пока не делал этого для производственного кода, но вы можете поиграть с ним.

Наконец, что бы вы ни делали, убедитесь, что у вас есть какой-то виджет на странице, который указывает пользователю, что работа выполняетсясделанный.В противном случае они просто разочаруются и снова попадут на сервер (или уйдут).

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