我做了一个Ajax Like Button.单击like按钮后,需要大约800ms – 1100 ms才能执行以下操作:
>使用Jquery在后台打开insertlike.PHP页面
>在insertlike.PHP页面中将类似内容添加到数据库中
>使用JSON确认
>将类似按钮的颜色变为绿色.
但Facebook和其他网站的Like按钮工作得非常快.
Facebook在点击时直接更改类似按钮的颜色,或者仅在将数据添加到数据库后才更改?
这是我的代码:
$(".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;
});
PHP
// Add to Database code
$response = new \stdClass();
$response->addremove = "".$addremove."";
$response->addedornotsend = "".$addedornotsend."";
die(json_encode($response));
有什么方法可以插入类似按钮的速度吗?也许一些PHP缓存技巧或类似的东西?我还是新手.
编辑:这是我的服务器响应时间速度测试:
最佳答案
您可以关注基于事件的架构.用户单击like按钮,将消息放入队列,然后在后台写入DB(数据网格也可以是解决方案,不确定PHP是否具有良好的数据网格解决方案).假设DB记录成功更新,将回送客户端响应.
原文链接:https://www.f2er.com/jquery/427808.htmlhttps://martinfowler.com/articles/201701-event-driven.html
如果要更新单个表,则800ms – 1100 ms似乎不是可接受的时间轴.尝试调整sql,检查数据库是否已正确调整.尝试使用ConnectionPool等.
在Facebook,a.除了更新数据库之外,b.它还进行其他后台处理,例如向相关方等生成NewsFeeds.我推测FB可能正在使用基于事件的体系结构而不是让用户等待.