Я разрабатываю веб-приложение с Mojolicious. Сервер разработки morbo — замечательная вещь, которая отлично работает, но как только я начну возвращать сложные хэши в стек, а затем рендерить веб-страницу, сервер morbo начинает вести себя странно. В моем браузере, если я перейду на одну из тех веб-страниц, которые используют сложный хэш, браузер сообщит мне, что соединение было сброшено. Мне нужно обновить около 10-12 раз, прежде чем страница загрузится.
Например:
В приведенном ниже коде показан один из моих контроллеров приложений. Он просто получает объект json из запроса AJAX, а затем возвращает другой объект json. Он работает нормально, за исключением того, что браузер требует тысячу обновлений, прежде чем он загрузится.
package MyApp::Controller::Library;
use Mojo::Base 'Mojolicious::Controller';
use Mojo::Asset::File;
use MyApp::Model::Generate;
use MyApp::Model::Database;
use MyApp::Model::IpDatabase;
use Mojo::JSON qw(decode_json);
# Receives a json object from an AJAX request and
# sends the necessary information back to be
# displayed in a table.
sub list_ajax_catch {
my $self = shift;
my $json = $self->param('data');
my $input = decode_json $json;
$self->render(
json => {
"Object A" => {
"name" => "Object A's Name",
"description" => "A Description for Object A",
"height" => "10",
"width" => "5",
}
}
);
}
1;
Проблема не ограничивается этим экземпляром. Кажется, что каждый раз, когда на сервере много обработки, у браузера возникают проблемы со сбросом. Неважно, какой браузер, я пробовал Chrome, IE, Firefox и другие (на нескольких компьютерах). Неважно, даже если я не отправляю и не получаю данные из html в приложение и обратно. Все, что, кажется, вызывает это, - это если в моем веб-приложении есть какая-то обработка, которая больше, чем просто рендеринг шаблонов, НО, если я запускаю Hypnotoad, все в порядке.
Этот пример не требует большой обработки, но он приводит к перезагрузке браузера, и, как вы можете видеть, запуск или зависание чего-либо не займет много времени. Я думал, что проблема связана с тайм-аутом, но по умолчанию тайм-аут не происходит до тех пор, пока не пройдет 15 секунд, так что это не может быть так.