【发布时间】:2014-02-26 20:35:36
【问题描述】:
您好,我正在尝试进行 ajax 实时搜索。它可以工作,但我希望它快点。目前我正在通过 php 处理 html,但即使我将处理更改为 js 并且只从 php 获取数据,它也只会将我的搜索时间从 2.1 秒提高到 1.8 秒(这是请求时间,但需要 4/5 秒让数据出现)
这是我的代码:
$("#searchfield").change(function() {
term = $(this).val();
if (searchReq != false) {
searchReq.abort();
}
searchReq = $.get("/searchModal.php", {
term : term
}).done(function(data) {
$("#liveSearch").html(data);
});
});
编辑:
php代码:
搜索.php:
$files = filecontroller::search($term);
文件控制器:
public static function search($term, $by = false, $order = false) {
connection::connect();
$files = ($by && $order && validation::filesOrder($by, $order)) ? file::Search($term, $by, $order) : file::Search($term);
return $files;
}
文件模型:
public static function Search($term, $by = 'date', $order = 'DESC') {
$session_id = $_SESSION["user_id"];
$term = mysql_real_escape_string($term);
$query = mysql_query("SELECT * FROM files WHERE idUser = '$session_id' AND (name LIKE '%$term%' OR description LIKE '%$term%') ORDER BY $by $order");
$files = self::CreateFromDb($query);
return $files;
}
private static function CreateFromDb($query) {
GLOBAL $imgDir; // just get the img dir from a config file
GLOBAL $userDir; // same
$files = array();
while ($row = mysql_fetch_assoc($query)) {
$file = new File();
$file -> type = $row['type'];
$file -> idFile = $row['idFile'];
$file -> user = $row['idUser'];
$file -> gallery = $row['idGallery'];
$file -> name = htmlspecialchars($row['name']);
$file -> description = htmlspecialchars($row['description']);
$file -> date = $file -> timecheck($row['date']);
$file -> size['kb'] = $row['size'];
$file -> galleryName = Gallery::getName($file -> gallery);
$files[] = $file;
}
return $files;
}
还有什么可以改进的吗?我在本地测试。
【问题讨论】:
-
听起来您的搜索查询速度较慢。您是否对这些进行了基准测试?
-
任何超过 1 秒的响应时间都意味着您在后端做错了什么,或者您的连接/托管/基础设施很糟糕。
-
你可以使用 Chrome 中的时间线和网络分析工具,例如,看看这个巨大的延迟是从哪里引入的。如果你在同一台机器上运行所有东西,它应该是 searchModal.php 由于某种原因很慢。请提供代码。
-
使用任何现代网络浏览器(IE8 及更高版本),您都需要打开开发者工具,找到网络选项卡并激活 AJAX 调用,以查看您遇到的网络延迟类型。既然你说这是本地主机,那么问题在于你的 PHP 脚本。
-
谢谢,我添加了 php 代码。在 chrome 上等待 2.20 秒,我使用 opera 进行调试,同样。