Функция автозаполнения пользовательского интерфейса jQuery для MySQL с локальным хранилищем?

Заинтересованы в использовании функции автозаполнения пользовательского интерфейса jQuery для подключения к большой базе данных событий MySQL. Будет ли это значительно замедлять работу каждой страницы? (Панель поиска будет на всех страницах)

Должен ли я хранить результаты запроса в локальном хранилище, помещая скрипт внизу страницы? Или СЕССИЯ или Cookie?

Вот код без каких-либо функций кеша.

<?php

require_once("../../connect.php");
$day_events = "SELECT * FROM tbl_events";
$events_result = mysql_query($day_events);

?>

<script>
    $(function() {
    var availableTags = [
<?php

  while($event_row=mysql_fetch_array($events_result)) {
  echo "\"".$event_row['event']."\",\n";
  }

?>
    ];
    $( "#tags" ).autocomplete({
        source: availableTags
    });
});
</script>

** РЕДАКТИРОВАТЬ: Чтобы уточнить мой вопрос, будет ли использование автозаполнения значительно замедлять работу страниц? Если да, то какие методы можно использовать для улучшения этого?


person Philip Kirkbride    schedule 25.08.2011    source источник


Ответы (2)


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

person fire    schedule 25.08.2011

По моему опыту, как локальное, так и удаленное автозаполнение были достаточно быстрыми. Я использую один или другой в зависимости от того, сколько данных будет загружено в источник и какова вероятность того, что данные будут доступны. Если автозаполнение будет выполнять поиск в большом наборе данных, лучше всего использовать удаленный вариант (http://jqueryui.com/demos/autocomplete/#remote). Это может добавить небольшую задержку в зависимости от того, как долго результаты возвращаются mySQL/веб-сервером и сколько данных отправляется по соединению.

Другой вариант — сохранить исходные данные во внешнем файле javascript, чтобы браузеру нужно было загрузить их только один раз (он должен автоматически кэшировать их). Опять же, это зависит от того, сколько данных имеется. Если данных довольно много, может иметь смысл использовать удаленный/AJAX-маршрут.

Размещение результатов в сеансе или файле cookie не требуется, хотя кэширование результатов является хорошей идеей для экономии обращений к базе данных. Компонент автозаполнения имеет опцию кэширования (http://jqueryui.com/demos/autocomplete/#remote-with-cache), но есть и другие способы кэширования запросов ajax и javascript, чтобы он кэшировался для всех посетителей.

person Shroder    schedule 25.08.2011