【问题标题】:how to make voting system like stackoverflow using ajax/jquery/php (efficient)如何使用 ajax/jquery/php 制作像 stackoverflow 这样的投票系统(高效)
【发布时间】:2010-01-18 21:36:55
【问题描述】:

我正在尝试使帖子投票类似于堆栈溢出投票赞成和反对,现在我使它与(但它有效的方法)一起工作,但感觉有些不对劲,希望有人会提出一些建议有用的调整。这是我的 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->post_vote 等于某个数字。现在,当我点击投票按钮时,它会增加 strong 的值,如果我点击投票,它会减少它。

我正在使用 CI(codeigniter) 而不是原生 php。

我如何衡量它的性能,不久前投票赞成或投票反对花了两秒多的时间来执行,我在我的查询中添加了 LIMIT 1,现在它的工作速度更快了,我认为这应该执行得更快。谢谢你们的cmets

是的,很抱歉在这里省略了我的投票赞成和反对票功能:

$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 秒之间运行,但由于某种原因会有所不同。

【问题讨论】:

  • 您使用的是哪个数据库引擎?
  • 投票时不要忘记Who
  • @Juha 我正在使用 Mysql ,@Martijn - 我稍后会担心这些事情我只是想提高性能
  • 摆脱 jQuery:尝试制作一个普通的 HTML 表单,您可以在其中针对您的投票 URL localhost/questions/vote_up/4 进行 POST。如果花的时间一样长,那就不是 jQuery。
  • 您现在也可以删除该查询,看看是否会有所不同。如果不是,那是代码中的其他内容(可能是加载应用程序的启动阶段及其所有配置花费的时间最多?)。

标签: javascript jquery ajax performance


【解决方案1】:
WHERE $what_id = '$value'

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

WHERE $what_id = $value

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

【讨论】:

  • 但是即使我只使用没有 php 的 jquery,只是为了更改强元素的 .text() 有时需要超过一秒钟才能执行,有没有办法可以测量 jquery 执行时间?暂时+1。 tnx
【解决方案2】:

您的数据库表$table 应该在$what_id 上有一个索引。通常它是主键,但由于添加 LIMIT 1 改变了任何东西,这可能不是这种情况吗?

【讨论】:

  • 奇怪,使用单个 WHERE primarykey = &lt;id&gt; 作为条件的更新不应该超过几毫秒。顺便问一下$wheremore 里有什么?
  • 我同意它很奇怪,目前 $wheremore 是空变量,我只是把它放在那里,因为我会添加日期和更多的东西。现在我从 jquery ajax 函数中删除了 php 部分,只是为了将数字增加 1,它仍然工作得很慢。
【解决方案3】:

您的数据库是什么样的?确保 $what_id 字段被正确索引,如果可能,最好它应该是主键。

【讨论】:

  • 是的,它是主要的并且已正确编入索引
猜你喜欢
  • 2017-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-27
  • 1970-01-01
  • 1970-01-01
  • 2011-05-11
相关资源
最近更新 更多