Отладка браузера - Как я могу заставить браузер перезагрузить ответ с сервера без повторного запроса? - PullRequest
2 голосов
/ 30 марта 2011

В разработке наше приложение rails работает медленно. При работе с javascript предварительный просмотр в браузере является проблемой из-за медленного времени отклика. Есть ли способ сделать так, чтобы браузер просто обрабатывал запрос и по-прежнему загружал новые ресурсы без повторного запроса самой страницы?

Идеальное решение в Chrome или Firefox.

Спасибо.

Ответы [ 7 ]

3 голосов
/ 12 апреля 2011

Как правило, вы можете воспользоваться кешем. Пока сервер предоставляет правильные заголовки Last-Modified, ETag, Expires и Cache-Control, браузер не должен повторно запрашивать этот URL , если вы не нажмете F5 в браузере .

Например, вы можете загрузить свое приложение в IFRAME или старой школе FRAME и добавить некоторый код JavaScript, который быстро уходит со страницы и затем возвращается по тому же URL-адресу. Это заставляет браузер перезагрузить URL из кэша и переосмыслить его.

Конечно, вы должны убедиться, что URL-адрес перезагружен с сервера после внесения изменений (например, добавление номера версии в строку запроса URL-адреса или что-то в этом роде).

К сожалению, кеширование в браузере не всегда позволяет точно предсказать.

Надеюсь, это поможет.

1 голос
/ 11 мая 2011

Хорошо, как насчет захвата элементов DOM (возможно, с помощью функции jquery contents ()) и сохранения их в локальном хранилище браузера. Затем перезагрузите js и css, используя что-то вроде этого (из Не могу добавить элемент , и я видел похожий синтаксис в динамической загрузке Facebook js)

var script = document.createElement( 'script' );
script.type = 'text/javascript';
script.src = url;
$("#someElement").append( script );

После перезагрузки js и css замените элементы DOM значением из локального хранилища браузера.

Не пробовал, но похоже, что стратегия может сработать.

1 голос
/ 18 апреля 2011

Я думаю о нескольких возможных решениях здесь:

Возможно, самый простой способ - сохранить всю страницу в html-файл (Файл / Сохранить как в браузере) и поместить полученную HTML-страницу на сервер в том же контексте. С этим решением у вас нет проблем с той же политикой домена. Вам может потребоваться предварительно выбрать данные хотя бы один раз или иметь активный сеанс для вашего пользователя, но это все. Очевидно, что это не будет работать, если тяжелая работа с запросами ajax.

Второе решение - использовать веб-сервер (например, Apache), чтобы служить прокси-сервером для вашего сервера приложений. Вы используете другой домен или контекст, чтобы гарантировать, что вы не кэшируете обычное приложение, а только в домене, зарезервированном для тестирования пользовательского интерфейса или дизайна. Тогда можно точно настроить, что будет кэшироваться или нет (запросы ajax, html, css ...). Когда вы хотите принудительно обновить, вы просто очищаете кеш. Использование прокси позволяет вам не изменять поведение приложения по умолчанию

0 голосов
/ 18 апреля 2011

Вы можете использовать Fiddler . Это HTTP-прокси, который работает локально на вашем компьютере и предоставляет вам легкий журнал всего трафика, который проходит через него (вроде как вкладка net в Firebug). У него есть возможность автоматически отвечать на URL-адреса, соответствующие заданному шаблону. Итак, вы могли бы:

  1. Сделайте свой первый запрос к приложению rails, дождитесь его завершения.
  2. Сохранить ответ в HTML-файл локально
  3. Настройте автоответчик для этого URL, чтобы он отвечал локальным файлом.

Итак, теперь браузер думает, что совершает обратную передачу на сервер, но fiddler перехватывает запрос и возвращает тот же статический контент.

0 голосов
/ 18 апреля 2011

Панель инструментов веб-разработчика для FF или Chrome и Pendule для Chrome имеют возможность перезагрузить CSS и JS из исходного кода без перезагрузки HTML.

0 голосов
/ 18 апреля 2011

Я просто немного покопался в интернете и наткнулся на плагин Firefox под названием CSS Refresh Похоже, он может обновить ваш CSS без загрузки страницы, но я так не пробовалне уверен, что это работает.

Для вашего javascript вы можете запускать события / функции, которые обычно запускаются при загрузке и т. д., - вручную, используя консоль javascript (например, командная строка firebug ).

Я уверен, что есть лучшие способы, но, по крайней мере, похоже, что это возможно.

0 голосов
/ 13 апреля 2011

Похоже, вам нужен AJAX.Когда вы запрашиваете страницу в браузере, обычно загружается полная страница - она ​​прерывает процесс вашего пользователя и требует времени.Если вы используете ajax, только некоторые из страниц перезагружаются:

browser       ajax      server
  |            |         |
  |--js event->|         |
  |            |--HTTP-->|
  |            |<--data--|
  |<--handler--|         |

Ваш код ruby ​​должен возвращать только ту часть данных, которая является новой - иногда даже просто «OK» или «error», как дляпример для входа в систему.Meawhile, поскольку ajax - это действительно javascript, ваш пользователь не видит прерывания: новые данные вводятся, пока они еще читают или продолжают заполнять форму.

...