2017-10-17 43 views
5

我做了一個Ajax Like按鈕。點擊喜歡按鈕後,大約需要800毫秒 - 1100毫秒做以下的事情:如何增加我的Ajax像按鈕速度(jQuery + PHP)

  • 打開insertlike.php頁面中使用jQuery
  • 背景
  • 等等添加到數據庫中insertlike.php
  • 確認等等使用JSON
  • 將類似按鈕的顏色變成綠色。

但是Facebook's和其他網站的Like按鈕的工作速度非常快。

Facebook在點擊時直接改變喜歡的按鈕顏色,或者只是在將數據添加到數據庫之後才改變。

這是我的代碼:

index.php代碼,使Ajax請求

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

代碼中insertlike.php

<?php 

// Add to Database code 

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

任何方式插入類似按鈕的速度?也許一些PHP緩存技巧或類似的東西?我仍然是新手。

編輯:這是我的服務器響應時間速度測試:

enter image description here

+0

所以你問的是Facebook的按鈕功能怎麼樣...這將由你來調查,因爲我們知道你比較的其他網站可能使用實時數據,如websockets。如果你想確認更新,沒有使用它們,你別無選擇,只能等待ajax調用和服務器端完成。 – NewToJS

+0

你可以畫按鈕想象一切順利,一旦完成,如果有錯誤顯示錯誤信息。 – vortin

+0

該代碼建議你在每個* like按鈕上都有一個id爲'addedornotsend'的輸入。那是對的嗎? –

回答

2

您可以按照基於事件的架構。只要用戶點擊類似按鈕,將消息放入隊列中,然後在後臺寫入數據庫(數據網格也可以是解決方案,不確定PHP是否具有良好的數據網格解決方案)。假設數據庫記錄已成功更新,客戶端的響應將被髮回。

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

如果要更新單個表,800毫秒 - 1100毫秒似乎不被接受的時間表。嘗試調整您的SQL,檢查數據庫是否正確調整。嘗試使用ConnectionPool等。

在Facebook中,a。除了像更新數據庫一樣,b。它還進行其他後臺處理,如向相關方等生成新聞源。我在推測FB可能會使用基於事件的架構來完成b部分,而不是讓用戶等待。

1

你爲什麼要這麼做. submit(),你應該做. click()

Facebook做的事可能是點擊時改變按鈕的顏色,而無需等待響應。如果響應導致錯誤,那麼按鈕的顏色可能會改回正常。

+0

你有什麼證據嗎?或者只是一個禮貌的猜測? – Shirkam

+0

點擊按鈕提交表單,畢竟這不是一回事嗎? –

+0

@Shirkam這是一個猜測(儘管我非常有信心,因爲即使節流帶寬,喜歡似乎也不長)。 –