我有一个 Wordpress 驱动的站点,在该站点上使用 wp-super-cache,因此我被迫通过 ajax 而不是内联 PHP 跟踪视图。以下是通过 ajax 调用的我的 PHP 文件的内容。顺便说一句,代码并不是真正的 Wordpress 特定的,但为了稍微解释一下,它会像更新wp_postmeta
表格一样更新表格update_post_meta()
。它使用 mysqli,并进行2 个sql 查询
- 确保要更新的 postid 有效。
- 增加观看次数。
我的问题是,这段代码是否存在一些性能问题,它会以某种方式更好吗?
代码摘录:
#...ajax stuff
$json_array = array();
$json_array["category_id"] = (int)$cat_id;
$json_array["post_id"] = (int)$post_id;
// get secure database credentials
require("/server/abspath/dbinfo.inc");
$db_details = new dbCreds;
$mysqli = new mysqli(
$db_details->get("dbhost"),
$db_details->get("dbuser"),
$db_details->get("dbpw"),
$db_details->get("db")
);
# test if valid post
# sql call no1
$valid_post_sql = "SELECT ABS(meta_value) FROM wp_postmeta "
. "WHERE (post_id = '" . $post_id . "' AND meta_key = 'views')";
$current_view_count = @$mysqli->query($valid_post_sql)->fetch_array();
$valid_post_sql_result = $current_view_count ? true : false;
if ( $valid_post_sql_result == false ) {
die("4");
}
# set new view-count
$views = isset($current_view_count[0]) && (int)$current_view_count[0] >= 0
? ((int)$current_view_count[0]+1) : 0;
# if not an admin or no views recorded yet
if ( !$is_admin || $views == 0 ) {
# sql call no2
$increment_imgviews_sql = "UPDATE wp_postmeta SET meta_value = "
. "meta_value + 1 WHERE (post_id = '" . $post_id
. "' AND meta_key = 'views')";
$mysqli->query($increment_imgviews_sql);
}
$json_array["views"] = $views;
return $json_array;
新代码:
这就是我最终使用的,只用一个替换了两个调用:
UPDATE wp_postmeta SET meta_value = meta_value + 1 WHERE post_id = '" . $post_id . "' AND meta_key = 'views';
笔记!这使得返回响应过时了,因为我没有返回当前的视图计数。但另一方面,我保存了一个查询。