Rails и JavaScript кеш - PullRequest
       14

Rails и JavaScript кеш

0 голосов
/ 28 января 2009

Я начну разрабатывать новое приложение, которое использует множество тяжелых js-библиотек (прототип, scriptaculous, tinymce и т. Д.).

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

Мой вопрос, я действительно должен делать все на AJAX?

Допустим, если я позвоню myapp.com/projects и проекты будут использовать все эти файлы js, то я нажму на ссылку "показать" и перенаправлюсь на myapp.com/projects/1 в этом перенаправлении, все перезагрузиться снова?

Ответы [ 3 ]

0 голосов
/ 28 января 2009

Перезагрузка изображений, скриптов и т. Д. *

Краткий ответ: да


Длинный ответ: зависит

Когда вы просматриваете страницу, ваш браузер запрашивает HTML, после того, как он имеет HTML, он начинает загружать внешние ссылки (изображения, сценарии и т. Д.). Когда он отправляет запрос на изображение или скрипт, ваш браузер может отправить заголовок, который сообщает, когда он получил его в последний раз и сохранил в своем кэше. Веб-сервер может ответить кодом 304 Not Modified, который указывает браузеру использовать кэшированную версию, сохраняя ее от повторной загрузки.

Даже если браузер не использует эти заголовки, он все равно будет кэшироваться, он просто не будет знать, когда должен истечь срок действия кэша. Когда вы используете помощники rails для включения изображений и сценариев, он добавляет число в конец URL-адреса, уникальное для содержимого сценариев. Поэтому, если вы измените содержимое, будет использоваться новый URL, заставляющий браузер получать обновленную версию.

0 голосов
/ 11 февраля 2009

Используйте Google Ajax Libraries API ! Google теперь размещает самые популярные библиотеки js, включая Prototype, Scriptaculous и jQuery. Как только они размещают определенную версию, они обязуются хранить эту версию на неопределенный срок.

На github есть небольшой плагин Rails от Райана Хита:

script/plugin install git://github.com/rpheath/google_ajax_libraries_api.git

Тогда в ваших взглядах вместо использования по умолчанию

<%= javascript_include_tag :defaults =>

используйте это вместо:

<%= google_jquery =>
<%= google_prototype =>
<%= google_scriptaculous =>

Вы можете указать версии, если хотите. Проверьте readme Райана в github для получения дополнительной информации.

Таким образом, вам не нужно настраивать хост ресурсов (по крайней мере, для стандартного javascript) и экономить трафик!

0 голосов
/ 28 января 2009

Нет, ваши файлы Javascript больше не будут загружаться, они будут кэшироваться на клиенте.

Но да, ваше приложение должно будет проверять сервер при каждой загрузке страницы, сервер часто отвечает, что сценарии не изменились. Используя AJAX, вы уменьшаете количество подключений к серверу. Вы можете уменьшить количество подключений, объединив все свои файлы Javascript в одно.

Обратите внимание, что AJAX добавит некоторые новые проблемы, например, заставит вас отслеживать утечки памяти, поскольку ваше приложение никогда не выгружает свои объекты, если вы никогда не перезагрузите новую страницу.

Если вам не по душе Javascript, я настоятельно рекомендую придерживаться "старой" модели перезагрузки страницы каждый раз. Если у вас есть проблемы с производительностью, вы можете решить их позже.

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