как сделать систему голосования как stackoverflow, использующий ajax/jquery/php (эффективной)

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

8
задан Gandalf StormCrow 18 January 2010 в 22:08
поделиться

3 ответа

Где $what_id = '$value' ($значение)

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

WHERE $what_id = $value

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

6
ответ дан 5 December 2019 в 21:19
поделиться

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

.
1
ответ дан 5 December 2019 в 21:19
поделиться

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

0
ответ дан 5 December 2019 в 21:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: