Я начал свое путешествие, чтобы ускорить автозаполнение jQuery ранее сегодня днем, и решил, что, вероятно, неплохо начать memcaching все. Как предложено в этой статье: Speeding up autocomplete.Ускорение автозаполнения jQuery (неизбежно длинные списки)
Однако, я все еще имею дело с медленным временем отклика даже после установки и использования Memcached.
Проблема в моем случае заключается в том, что я имею дело с необычайно длинными списками, в моем случае, над отдельных членов. (Все роды или родов всех растений)
Узкие, кажется, построение таблицы и заполнение списка на сторону клиента, и он не вызывается путем извлечения информации из Memcached.
Если кто-то другой столкнулся с этой конкретной проблемой, мне бы очень хотелось услышать о умном способе ее решения. Я отправлю свой код ниже.
Примечание: Эта страница недоступна для широкой публики, и я знаю, что есть несколько зияющих отверстий для безопасности.
require_once 'oo/Database.php';
$mysqldb = new Database;
$memcache = new Memcache;
$memcache->connect('localhost', 11211) or die ("Could not connect to memcache");
$sql = "SELECT DISTINCT `Genus` FROM importlist.plants";
$key = md5('query'.$sql);
$result = $memcache->get($key);
//check if we got something back
if($result == null) {
//fetch from database
$result = $mysqldb->rawSelect($sql)->getResult();
//set to memcache, expires after 1 hour
$memcache->set($key,$result,0,3600);
}
//Result array
$Genera = ($memcache->get($key));
//Add required "quotation marks" for autocomplete
foreach ($Genera as &$Genus){
$Genus = '"'.$Genus[Genus].'"';
}
$Genera = implode($Genera,',');
//PHP to generate jQuery
echo <<< EOT
<script>
$(function() {
var availableTags = [$Genera];
$("#tags").autocomplete({
source: availableTags
});
});
</script>
EOT;
?>
<input id="tags" />
Не знаю, что это ускорит его вообще, но вы сможете установить '$ Genera = $ result' вместо второго вызова memcache. Или еще лучше, просто используйте '$ result' в' foreach() ', а не' $ Genera' – jprofitt
Можете ли вы использовать запрос ajax для заполнения данных после загрузки страницы или до того, как пользователь попытается использовать автозаполнение? – jmort253
Похоже, вы эмулируете создание json-нотации массива. Вероятно, 'json_encode' даст вам лучшую скорость, чем foreach. Однако сначала вы должны узнать, какая часть этого фрагмента кода потребляет столько времени. Сначала найдите узкое место, выполнив некоторые показатели. – hakre