加速 jQuery AutoComplete(不可避免的长列表)

2024-03-18

今天下午早些时候,我开始了加速 jQuery 自动完成的旅程,并认为开始可能是个好主意内存缓存一切。正如本文所建议的:加快自动完成速度 https://stackoverflow.com/questions/5820741/jquery-ui-speeding-up-autocomplete.

但是,即使在安装和使用之后,我仍然遇到响应时间慢的问题内存缓存。

我的问题是,我正在处理非常长的列表,就我而言,超过6700个人会员。 (所有植物的所有属或属)

瓶颈似乎是构建表和填充客户端列表,并且不是由检索信息引起的内存缓存.

如果其他人遇到了这个特定的问题,我很想听到解决它的聪明方法。我将在下面发布我的代码。

注意:此特定页面不对公众开放,并且我知道存在一些安全漏洞。


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" />

$(document).ready(function() {

    // once page loads, make AJAX request to get your autocomplete list and apply to HTML
    $.ajax({ url: '/path-to-get-tags-as-json.php',
        type: "GET",
        contentType: "application/json",
        success: function(tags) {
            $( "#tags" ).autocomplete({
                source: tags
            });
        }
    });
});

将 PHP 文件的 URL 放在上面的 AJAX 占位符 url 参数中生成自动完成列表。在 PHP 代码中,修改列表生成,使其返回 JSON 值数组,如下所示:

[ "first" , "second" , "anotherEntry" , "in" , "the" , "array" ]    

这会绝对不会加速服务器端的进程, 但它will保护您的用户在应用自动完成列表时不会出现一些延迟。这很大程度上假设用户不会立即执行需要自动完成的操作,您仍然可以加载页面并允许用户执行其他操作。自动完成列表的加载在大多数情况下应该显得安静且无缝。

这对于少于几秒到几秒的加载时间来说非常有用,但如果您花费的时间比这更长,那么您的用户仍然可能会遇到可用性问题。

如果仍然存在服务器端延迟,请考虑使用一些计时语句来尝试确定瓶颈所在。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

加速 jQuery AutoComplete(不可避免的长列表) 的相关文章

随机推荐