как сделать систему голосования, как stackoverflow, используя ajax / jquery / php (эффективно) - PullRequest
8 голосов
/ 19 января 2010

Я пытаюсь сделать пост-голосование чем-то похожим на переполнение стека, голосование вверх и голосование, теперь я заставил его работать (подход «все работает»), и все же что-то не так, надеюсь, кто-то предложит некоторые полезные твики. Вот мой код 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 равно некоторому числу. Теперь, когда я нажимаю кнопку голосования вверх, оно увеличивает значение сильного, а если я нажимаю кнопку голосования вниз, оно уменьшает его.

Я работаю с 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

Я просто удалил часть php из функции jquery ajax, просто чтобы увеличить число на 1, и он все еще работает очень медленно.

ОБНОВЛЕНИЕ III

Когда я запускаю запрос с помощью phpmyadmin, он запускается в диапазоне от 0,3 секунды до 1,77 секунды, по некоторым причинам он меняется.

Ответы [ 3 ]

6 голосов
/ 19 января 2010
WHERE $what_id = '$value'

Вы не должны использовать строки / varchars в качестве идентификаторов. Это неестественно. Используйте числа / целые числа.

WHERE $what_id = $value

Да, это влияет на производительность БД, особенно когда количество строк становится высоким.

1 голос
/ 19 января 2010

Ваша таблица базы данных $table должна иметь индекс $what_id. Обычно это был бы первичный ключ, но поскольку добавление LIMIT 1 изменило что-либо, скорее всего, это не так?

0 голосов
/ 19 января 2010

Как выглядит ваша база данных? Убедитесь, что поле $what_id правильно проиндексировано, желательно, чтобы это был первичный ключ, если возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...