如何使用ajax / jquery / php制作像stackoverflow这样的投票系统(高效)

时间:2010-01-18 21:36:55

标签: javascript jquery ajax performance

我正在尝试进行投票后类似于堆栈溢出投票并投票的投票,现在我使用了(但它正在工作的方法)然而有些事情感觉不对,希望有人会建议一些有用的调整。这是我的jquery代码:

 var x = $("strong.votes_balance").text();
   $("input.vote_down").click(function(){
     $.ajax({   
       type: "POST",  
       url: "http://localhost/questions/vote_down/4",   
       success: function()   
       {   
       $("strong.votes_balance").html((parseInt(x) - parseInt(1)));
       $("input[type=button]").hide();
       $(".thumbsup_hide").show();
       }   
      });  
    });


   $("input.vote_up").click(function(){
     $.ajax({   
       type: "POST",  
       url: "http://localhost/questions/vote_up/4",   
       success: function()   
       {   
       $("input[type=button]").hide();
       $("strong.votes_balance").html((parseInt(x) + parseInt(1)));
       $(".thumbsup_hide").show();
       }   
       });
    });


    });

这是我的HTML:

<div class="thumbsup thumbsup_template_up-down" id="thumbsup_49">


 <form method="post" id="voting_form">

<input type="hidden" value="49" name="thumbsup_id"/>
  <span class="thumbsup_hide">Result:</span>
  <strong class="votes_balance"><?=$row_q->post_vote?></strong>

  <input type="button" title="Good Comment!" value="+1" name="thumbsup_rating" class="vote_up"/>
  <input type="button" title="Bad Comment!" value="-1" name="thumbsup_rating" class="vote_down"/>
 </form>

</div>

$ row_q-&gt; post_vote等于某个数字。现在,当我单击“投票”按钮时,它会增加强值,如果我单击“投票”,它会减少它。

我正在使用CI(codeigniter)而非本机php。

我如何衡量这一性能,不久前投票或投票失败花了两秒多的时间来执行,我在我的查询中添加了LIMIT 1,现在它运行得更快,我认为这应该会更快。感谢您的评论

对不起,我在这里省略了这个是我的投票和投票功能:

$this->db->query("UPDATE $table SET $what_field = ($what_field + 1) $wheremore WHERE $what_id = '$value' LIMIT 1");

以下投票:

$this->db->query("UPDATE $table SET $what_field = ($what_field - 1) $wheremore WHERE $what_id = '$value' LIMIT 1");

更新我认为事情一般都很慢的原因是因为我对jquery不够,我觉得我的桌子很好看

更新II

我刚刚从jquery ajax函数中删除了php部分,只是为了将数字增加1,它仍然很慢。

更新III

当我使用phpmyadmin运行查询时,它运行范围从0.3秒到1.77秒,因某种原因而变化。

3 个答案:

答案 0 :(得分:6)

WHERE $what_id = '$value'

您不应该使用字符串/ varchars作为标识符。这很不自然。使用数字/整数。

WHERE $what_id = $value

是的,这会影响数据库性能,尤其是当行数增加时。

答案 1 :(得分:1)

您的数据库表$table应该有$what_id的索引。通常它会是主键,但由于添加LIMIT 1改变了任何东西,情况可能并非如此?

答案 2 :(得分:0)

您的数据库是什么样的?确保$what_id字段已正确编入索引,如果可能,最好应将其作为主键。