Ajax和网站性能

时间:2013-05-04 15:33:18

标签: php ajax performance http-request

我正在学习php和Ajax,同时为wordpress创建插件,设法完成它。它会计算网站上所有横幅所获得的点击次数和展示次数。你通过插件等放置横幅......无论如何,我刚刚完成了每个横幅获得的印象数量。它没有任何问题。但是,正如我自己做的那样而不是一些教程,我想知道这是正确的方法:

$(window).load(function() {

    $("a[count]").each(function(){
        var id = $(this).attr("count");
        var data = {
            action: 'impressions_count',
            postid: id
        };
        $.post(MyAjax.ajaxurl, 
            data,
            function(response) {
                console.log( response);
        });
    })
});

这是更新数据库的代码的一部分

function impressions_count_callback() {
        global $wpdb;
        $post_id = $_POST['postid'];
        //print_r($post_id);
        $post_id = mysql_real_escape_string($post_id);
        $wpdb->query("UPDATE ". $wpdb->prefix ."cb_ads_manager SET impressions = impressions+1 WHERE ID = '$post_id'");
    }

你可以看到我在网站上发送每个baner的ajax请求,所以如果我有5个baners那5个请求。如果我在一个请求中发送所有内容,它会有什么不同吗,因为即使这样我也必须在db查询中执行foreach循环,所以我会再次执行5个db查询,除非它可以一次性完成。

P.S。即使我在WP工作,我相信这更像是php / ajax问题,这就是我在这里问的原因。

1 个答案:

答案 0 :(得分:1)

您实际上只能向DB发出一个ajax请求和一个查询,如下所示:

$(window).load(function() {
    var ids = new Array();
    $("a[count]").each(function(){
        ids.push($(this).attr("count"));
    };
    if(ids.length > 0) {
       var data = {
          action: 'impressions_count',
          postids: JSON.stringify(ids);
       };
       $.post(MyAjax.ajaxurl, data,
           function(response) {
             console.log( response);
       });
    }

 }); 

和PHP

function impressions_count_callback() {
        global $wpdb;
        $post_id = json_decode($_POST['postid']);
        //print_r($post_id);
        $post_id = implode(',', $post_id);
        $post_id = mysql_real_escape_string($post_id);
        $wpdb->query("UPDATE ". $wpdb->prefix ."cb_ads_manager SET impressions = impressions+1 WHERE ID IN ($post_id)");
}