Я запускаю приложение Rails, которое в настоящее время получает много трафика, поэтому я начал использовать кэширование страниц для повышения производительности. Пока все работает как шарм. Но когда я попытался также кэшировать результаты поиска, я столкнулся со странной проблемой.
Мой подход:
- Используйте значимые URL для поиска и нумерации страниц (/ search? Query = term & page = 3 становится / search / term / 3)
- Используйте Javascript для отправки формы - если JS отключен, он возвращается к старой форме (которая также работает с моими маршрутами, но без кэширования)
Мой код:
// Javascript
function set_search_action() {
window.location = '/search/' + escape(document.getElementById('query').value);
return false;
}
// HTML
<form action="/search" id="search_form" method="get" onSubmit="return set_search_action();">
<input id="query" name="query" title="Search" type="text" />
<input class="submit" name="commit" type="submit" value="Search" />
</form>
Проблема
Все работает для отдельных слов, таких как «термин». Но когда я ищу "term1 term2", форма отправляется в / search / term1 term2 / или / search / term1 term2 / 1 . Это должно быть отправлено в / search / term1 + term2 Это то, что должна делать функция escape JS.
Пока это работает и с пробелами в режиме разработки. Но я предполагаю, что это станет проблемой в производственном режиме с включенным кэшированием (URL не должны содержать пробелов).
Есть идеи, что я сделал не так? Спасибо!