2012-04-27 5 views
0

В этом railscast наш добрый друг г-н Бэйтс рассматривает решение для создания приложения, которое может выполнять поиск, сортировку и разбиение на страницы набора данных , При просмотре AJAX он предлагает решение, которое отображает результаты поиска в тот момент, когда пользователь вводит ввод в поле поиска. Вот его решение:Railscast не рекомендует решение для производства, я искал причину, почему

$('#products_search input').keyup(function() { 
    $.get($('#products_search').attr('action'), ↵ 
    $('#products_search').serialize(), null, 'script'); 
    return false; 
}); 

Однако он утверждает, «Обратите внимание, что это только демо-ролик и не самый лучший способ сделать это Есть несколько плагинов JQuery, которые вы можете использовать, если вы делаете что-то вроде этого. в производственном приложении ". Я ищу объяснение, почему он считает, что это не подходит для производства. Заранее спасибо!

ответ

1

Есть два основных вопроса, которые я вижу с этим решением. Во-первых, вы делаете запрос HTTP (AJAX) каждый раз при нажатии клавиши, что не будет самым эффективным способом сделать это. Во-вторых, вы в основном вызываете eval в ответ, а eval - это плохо, так как это может привести к тому, что злоумышленники будут выполнять код, который вы не хотите выполнять.

Некоторые предложения по улучшению:

  • Используйте правильный JSON парсер и передавать данные обратно в формат JSON. (вы можете использовать $.getJSON)
  • Дросселируйте запрос - не делайте этого на каждом ключевом устройстве, возможно, запустите таймер и отправьте запрос только в том случае, если в последнюю секунду не было нажата ни одна клавиша, что означает, что она не сделает много призывает людей, которые быстро набираются.
  • Получите ответ. Если вы уже что-то искали, то нет смысла извлекать данные дважды. Сохраните примечание (в объекте JS) предыдущих вызовов в этом сеансе и их результаты.
Смежные вопросы