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

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

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

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

<?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>

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

Ответы [ 3 ]

1 голос
/ 25 августа 2011

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

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

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

1 голос
/ 25 августа 2011
<script> 
$().ready(function() {
$('#tag').autocomplete('tag.php?find=tag', {
          width: 260,
          matchContains: true,
          selectFirst: false
        });
});
</script>
<?php
//in tag.php
$find = $_GET["find"];
if($find=='tag'){
    $q = strtolower($_GET["q"]);
    if (!$q) return;
    $sql = "select DISTINCT tag from tag where name_tag LIKE '%$q%'";
    $rsd = mysql_query($sql);
    while($rs = mysql_fetch_array($rsd)) {
        $cname = $rs['name_tag'];
        echo "$cname\n";
    }
}
?>
<input id='tag' type='text'>
1 голос
/ 25 августа 2011

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

...