嗨,即時嘗試做一個阿賈克斯實時搜索。它工作的,但我希望它快。目前我是通過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代碼:
的search.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;
}
反正是有改進呢?我在當地測試。
這聽起來像您的搜索查詢是緩慢的部分。你有沒有基準測試? – MonkeyZeus
超過1秒響應時間的任何事情意味着您在後端做了非常錯誤的事情,或者您有可怕的連接/託管/基礎設施。 – PeeHaa
例如,您可以使用Chrome中的時間軸和網絡分析工具來查看引入這個巨大延遲的位置。如果你在同一臺機器上運行所有的東西,它應該是searchModal.php,由於某種原因它很慢。請提供代碼。 –