2017-10-17 80 views
5

Zrobiłem przycisk Ajax Like. Po kliknięciu przycisku podobnego, to trwa około 800ms - 1100 ms zrobić następujące rzeczy:Jak zwiększyć szybkość mojego przycisku Ajaxa (Jquery + PHP)

  • Otwórz insertlike.php stronie w tle przy użyciu jQuery
  • Dodaj podobnego do bazy w insertlike.php stronie
  • potwierdzić jak przy użyciu JSON
  • Zmień kolor przycisku na zielony.

Ale przycisk Facebook's i inny przycisk witryny działają bardzo szybko.

Facebook bezpośrednio zmienia kolor przycisku podobnego na kliknięcie lub zmienia się tylko po dodaniu go do bazy danych?

To jest mój kod:

index.php kod aby ajax żądania

$(".insertlike").submit(function(e) { 

    var data = $(this).serialize(); 
    var url = $(this).attr("action"); 
    var form = $(this); 
    $.post(url, data, function(data) { 
    try { 
     data = JSON.parse(data); 
     $(form).children("button").html(data.addremove + " Watchlist"); 
     $(form).children("input#addedornotsend").attr("value",data.addedornotsend); 

    } catch (e) { 
     console.log("json encoding failed"); 
     return false; 
    } 
}); 
    return false; 
}); 

kod wewnątrz insertlike.php

<?php 

// Add to Database code 

$response = new \stdClass(); 
$response->addremove = "".$addremove.""; 
$response->addedornotsend = "".$addedornotsend.""; 
die(json_encode($response)); 

jakikolwiek sposób wstawić jak prędkość przycisk? Może jakiś sztuczka z php lub coś w tym stylu? Nadal jestem nowicjuszem.

Edit: To jest moja próba prędkość czas odpowiedzi serwera:

enter image description here

+0

Więc pytasz, jak facebooki, takie jak funkcje przycisków ... To zależy od ciebie, aby zbadać, ponieważ wiemy, że inne strony, z którymi porównujesz, mogą wykorzystywać dane w czasie rzeczywistym, takie jak websockets. Bez korzystania z nich nie masz wyboru, musisz czekać na połączenie ajax i serwer po stronie, jeśli chcesz potwierdzić aktualizację. – NewToJS

+0

Możesz pomalować przycisk, wyobrażając sobie, że wszystko poszło dobrze, a po jego zakończeniu, jeśli coś jest nie tak, wyświetla się komunikat o błędzie. – vortin

+0

Kod sugeruje, że masz dane wejściowe z id 'addedornotsend' na * każdym * jak przycisk. Czy to jest poprawne? –

Odpowiedz

2

Możesz śledzić architekturę opartą na zdarzeniach . Gdy tylko użytkownik kliknie przycisk podobny, umieści wiadomość w kolejce, a następnie zapisze w DB w tle (Data Grid również może być rozwiązaniem tutaj, nie ma pewności, czy PHP ma dobre rozwiązania gridu danych). Odpowiedź na klienta zostanie odesłana, zakładając, że rekord DB zostanie pomyślnie zaktualizowany.

https://martinfowler.com/articles/201701-event-driven.html

przypadku aktualizowania jednej tabeli, 800ms - 1100 ms nie wydaje się być akceptowalne timeline. Spróbuj dostroić kod SQL, sprawdź, czy DB jest odpowiednio dostrojony. Spróbuj użyć ConnectionPool itp.

Na Facebooku, a. oprócz aktualizacji DB na podobnym, b. Robi także inne przetwarzanie w tle, takie jak generowanie wiadomości NewsFeeds dla odpowiednich stron itp. Spekuluję, że FB może wykonywać część b, używając architektury opartej na zdarzeniach, a nie pozwalając użytkownikowi czekać.

1

Dlaczego robisz . submit(), należy robić . click().

A to, co robi Facebook, prawdopodobnie zmienia kolor przycisku po kliknięciu, bez czekania na odpowiedź. Jeśli odpowiedź powoduje błąd, prawdopodobnie kolor przycisku zmienia się z powrotem na normalny.

+0

Czy masz na to dowód? A może to tylko grzeczne domysły? – Shirkam

+0

kliknięcie przycisku podobnego powoduje wysłanie formularza, więc czy to nie jest to samo? –

+0

@Shirkam to przypuszczenie (chociaż jestem całkiem pewny, ponieważ sympatia nigdy nie wydawała się długa, nawet z ograniczoną przepustowością). –