2010-01-18 9 views
8

Estoy tratando de hacer que la votación vote algo similar para apilar el voto desbordado vote y vote hacia abajo, ahora lo hice funcionar con (but-it-works enfoque) y, sin embargo, algo no se siente bien, con suerte alguien sugerirá algunos ajustes útiles. Aquí está mi código jQuery:cómo hacer un sistema de votación como stackoverflow usando ajax/jquery/php (eficiente)

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(); 
     } 
     }); 
    }); 


    }); 

aquí es mi 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 es igual a un número. Ahora, cuando hago clic en el botón de voto arriba, aumenta el valor de fuerte y si hago clic en votar hacia abajo, lo disminuye.

Estoy trabajando con CI (codeigniter) no nativo php.

Cómo mido el rendimiento de esto, no hace tanto tiempo que votar o votar tomaba más de dos segundos, agregué el LÍMITE 1 a mi consulta y ahora funciona un poco más rápido, creo que debería funcionar mucho más rápido . Gracias por sus comentarios

Y sí lo siento por ommiting esto aquí son mi voto y votar en contra de funciones:

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

y voto ABAJO:

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

ACTUALIZACIÓN Creo que la por lo que las cosas son generalmente lentas es debido a mi inexperiencia con jquery, creo que mi tabla es okey

ACTUALIZACIÓN II

Acabo de eliminar la parte php de la función jquery ajax, solo para incrementar el número en 1 y todavía funciona realmente lento.

ACTUALIZACIÓN III

Cuando funciono consulta con phpmyadmin se ejecuta desde la línea de 0,3 segundos hasta 1,77 segundos varía por alguna razón.

+0

¿Qué motor de base de datos está utilizando? –

+1

No olvide el 'Quién' en la votación. –

+0

@Juha Estoy usando Mysql, @ Martijn - Me preocuparé por esas cosas más tarde Estoy tratando de mejorar el rendimiento –

Respuesta

1

Su tabla de base de datos $table debe tener un índice en $what_id. Normalmente, sería la clave principal, pero dado que la adición de LIMIT 1 cambió algo, ¿no es así?

+0

es la clave principal –

+0

Extraño, una actualización con una sola clave primaria 'WHERE = ', ya que la condición no debería tomar más de unos pocos milisegundos. ¿Qué hay en '$ wheremore' por cierto? – Wim

+0

Acepto que es muy extraño, actualmente $ wheremore is empty variable, simplemente lo puse allí porque le agregaré fecha y muchas cosas más. Ahora elimino la parte php de la función jquery ajax, solo para incrementar el número en 1 y todavía funciona realmente lento. –

0

¿Cómo es su base de datos? Asegúrese de que el campo $what_id esté correctamente indexado, preferiblemente debería ser la clave principal si es posible.

+0

Sí, es el principal y está correctamente indexado –

6
WHERE $what_id = '$value' 

No use cadenas/varchars como identificadores. No es natural Usa números/enteros.

WHERE $what_id = $value 

Sí, esto tiene influencia en el rendimiento de la base de datos, especialmente cuando el recuento de filas aumenta.

+0

, pero incluso si uso simplemente jquery sin php, solo para cambiar .text() del elemento fuerte que lleva más de un segundo realizar, ¿hay alguna manera de hacerlo? medir el tiempo de ejecución de jquery? +1 por ahora. tnx –

Cuestiones relacionadas