jQuery UI - ускорение автозаполнения - PullRequest
4 голосов
/ 28 апреля 2011

У меня автозаполнение работает нормально, но я пытаюсь найти способ сделать это быстрее.Вот мой HTML:

Country: <select name='country' id='country' onchange="renewAutocomplete();">
             <option value='US'>USA</option>
             <option value='UK'>United Kingdom</option>
         </select><br/>
City: <input type='text' name='city' id='city' />
<script>
   function renewAutocomplete() {
      $( "#city" ).autocomplete({
            source: "searchCities/" + $('#country').val(),
            minLength: 2
        });
   }
</script>

Запрос PHP / mySQL довольно прост:

$term = $_GET['term'];
$sql = "SELECT city FROM cities WHERE country_code = '{$country}' AND city LIKE '{$term}%'";

Конечно, это означает новый запрос для каждого нажатия клавиши.Это помогает немного добавить кеширование, но все же не так быстро, как мне кажется.

Вопрос 1 Моей первой мыслью было собрать ВСЕ города в одном БДзвонить, когда выбрана страна.Есть ли способ присвоить возвращаемый JSON всех городов страны переменной, которую может использовать автозаполнение?Мои первоначальные тесты просто выскакивали во все города, которые вы ввели:

      $.get("searchCities/" + $('#country').val(), function(data) {
                    $( "#city" ).autocomplete({
                        source: data,
                        minLength: 2
                    });
        });
PHP: 
    $sql = "SELECT city FROM cities WHERE country_code = '{$country}'";

Вопрос 2 Поскольку города и страны не сильно меняются (обычно), будет быстрееесть плоский файл со всеми значениями?

Или есть ли другой способ сделать более быстрое автозаполнение?

Спасибо.

1 Ответ

3 голосов
/ 28 апреля 2011
  1. Автозаполнение предполагает, что если вы его вернете, это верный ответ. Итак: нет .

  2. Да, вытащить из плоского файла будет намного быстрее, чем нажимать на дб за каждое нажатие клавиши. Однако, если вы добавите кеширование (memcache) перед базой данных, это, вероятно, будет так же быстро, как простой файл.

Но на самом деле, поскольку вы (вероятно) ищете (относительно) небольшой набор для вашего термина, он все равно будет очень быстрым.

С точки зрения масштабирования, поместите их в плоский файл или используйте кеширование.

В качестве примечания: посмотрите в mysql_escape_string () для использования $ country и $ term. В противном случае вы открыты для атак SQL-инъекций .

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