Первое, что меня интересует, это насколько велик график, на котором вы запускаете этот алгоритм.Вы делаете что-то с тысячами (или миллионами) вершин и ребер?Или это просто очень дорогой алгоритм?
Давайте предположим, что обработка этих запросов, естественно, займет много времени, независимо от того, насколько хорошо закодирован ваш алгоритм.Переход на javascript не является, строго говоря, единственным решением, но он может быть лучшим подходом для вас.
Параметры:
Запустите алгоритм в javascript наклиентская машина.Здесь происходит следующее: когда пользователь вводит данные в форму, алгоритм запускается на javascript на клиентском компьютере.Ваш сервер больше не участвует, и это хорошо, потому что ваши ресурсы не связаны.
Увеличьте время ожидания на сервере.Не рекомендуется после 20 секунд или около того, потому что люди просто будут облагать налогом ваш сервер больше.
Запустите алгоритм на сервере.Обойти проблему тайм-аута, используя метод, предложенный Дэниелом Питтманом: когда пользователь отправляет запрос, передается обратно идентификатор запроса и закрывается соединение.Установите тайм-аут javascript для отправки запроса к серверу в будущем, когда вы ожидаете, что алгоритм завершит работу.Если закончено, сервер возвращает результаты, и это тогда обработано.Если нет, перезапустите таймер.
Так что на самом деле все сводится к тому, хотите ли вы, чтобы ваш сервер или компьютер клиента выполняли свою работу.Если последнее, то это будет в javascript, если вы не пойдете по пути создания вашего javascript с использованием clojurescript.Я бы пока не делал этого для производственного кода, но вы можете поиграть с ним.
Наконец, что бы вы ни делали, убедитесь, что у вас есть какой-то виджет на странице, который указывает пользователю, что работа выполняетсясделанный.В противном случае они просто разочаруются и снова попадут на сервер (или уйдут).