减少Ajax请求
Reduce Ajax requests
我正在使用jQuery和JSON制作聊天脚本,但由于"资源使用限制",我的主机暂停了它。我想知道是否有可能(以及如何)减少这些请求。我读到一个问题,他们告诉我一些关于Ajax超时的内容,但我不太擅长Ajax。代码为:
function getOnJSON() {
var from;
var to;
var msg_id;
var msg_txt;
var new_chat_string;
//Getting the data from the JSON file
$.getJSON("/ajax/end.emu.php", function(data) {
$.each(data.notif, function(i, data) {
from = data.from;
to = data.to;
msg_id = data.id;
msg_txt = data.text;
if ($("#chat_" + from + "").length === 0) {
$("#boxes").append('...some stuf...');
$('#' + from + '_form').submit(function(){
contactForm = $(this);
valor = $(this + 'input:text').val();
destinatary = $(this + 'input[type=hidden]').val();
reponse_id = destinatary + "_input";
if (!$(this + 'input:text').val()) {
return false;
}
else {
$.ajax({
url: "/ajax/end.emu.php?ajax=true",
type: contactForm.attr('method'),
data: contactForm.serialize(),
success: function(data){
responsed = $.trim(data);
if (responsed != "success") {
alert("An error occured while posting your message");
}
else {
$('#' + reponse_id).val("");
}
}
});
return false;
}
});
$('#' + from + '_txt').jScrollPane({
stickToBottom: true,
maintainPosition: true
});
$('body').append('<embed src="http://cdn.live-pin.com/assets/pling.mp3" autostart="true" hidden="true" loop="false">');
}
else {
var pane2api = $('#' + from + '_txt').data('jsp');
var originalContent = pane2api.getContentPane().html();
pane2api.getContentPane().append('<li id="' + msg_id + '_txt_msg" class="chat_txt_msg">' + msg_txt + '</li>');
pane2api.reinitialise();
pane2api.scrollToBottom();
$('embed').remove();
$('body').append('<embed src="http://cdn.live-pin.com/assets/pling.mp3" autostart="true" hidden="true" loop="false">');
}
});
});
}
限额为600;reqs/5;分钟,我需要做到几乎每一秒。我已经支付了一年的费用,他们没有退款,而且我不能修改服务器,只能访问cPanel
。
嗯,600;req/5;如果您想为每个用户每秒发出一个请求,那么min是非常有限制的。从本质上讲,这意味着每个用户将获得60;req/min。或300/5;min。换句话说,即使您优化脚本以将两个请求合并为一个,您的站点最多也可以有两个用户;)我想不多。。。
你有两个选择:
-
坚持通过Ajax请求创建聊天系统,并更改托管提供商。如果你没有做2的技能,这可能会更便宜。
-
忘记发出Ajax请求进行轮询,并可能每秒发出另一个请求进行推送。实现一些关于web套接字、长轮询甚至XMPP的东西。如果你走这条路,我会在socket.io上寻找一个透明的库,它使用受支持的web套接字,并且在其他方面会遇到长轮询和其他问题。对于XMPP方式,有出色的Strophe.js。请注意,这两条路都比Ajax请求复杂得多,需要大量的服务器逻辑更改。
我不认为每秒检查一次真的是个好主意,在我看来,对于在线聊天来说,检查2/3秒就足够了。
为了减少请求,你还可以在客户端添加对用户活动的检查,如果窗口处于非活动状态,你可以延长检查时间,当用户恢复活动时,检查时间会回到2/3秒,这将允许你节省资源和请求/分钟
我现在正在处理一个项目,该项目需要使UI与服务器事件保持同步。我一直在使用长轮询,这确实减少了ajax调用的数量,但它给服务器带来了监听客户端感兴趣的事件的负担,这也不好玩。
我即将切换到socket.io,我将把它设置为一个单独的推送服务。
现有服务器-->推送到sockt.io服务器-->推送给订阅客户端
ggozad的响应很好,我也推荐web套接字。它们只适用于较新的浏览器型号,所以如果你想在所有浏览器上使用它,你需要一个小的Flash桥接器(Flash可以很容易地与套接字通信,还可以调用JavaScript函数并从JavaScript中调用)。此外,如果您感兴趣,Flash还提供P2P服务。http://labs.adobe.com/technologies/cirrus/
此外,对于服务器端,如果你像我一样是JavaScript粉丝,你可以查看Node.js:)
为了完成我的回答:没有办法在witch中进行基于Ajax的聊天,您被限制为600;请求/5;min(每秒2个请求),想要每秒发出一个请求并且想要两个以上的用户。
解决方案:切换到套接字或P2P。
我建议您使用单个线程(作为API代理)从服务器端调用该付费服务。您仍然可以使用600;请求/5;min。然后,每个客户端都会无限制地向您的服务器API代理进行Ajax请求轮询或长轮询。
- ajax请求的顺序总是不同的
- 从ajax请求中获取javascript对象
- Ajax请求文档就绪会导致jquery加载缓慢
- MockJax没有在JavaScript应用程序中发送对我AJAX请求的响应
- 正在传递JSONP标头's数据参数到另一个文件中的AJAX请求
- JavaScript代码未正确检查ajax请求
- node.js请求数据事件未在CORS ajax调用中触发
- jQuery Ajax GET请求工作不正常
- "日期“;AJAX请求返回的类型值未定义
- Django - 响应请求 AJAX
- 使用 jQuery 的 CORS 请求 - $.ajax()
- 如果无线电值为 ==1,则请求 ajax
- 如何处理对循环中发出的多个异步请求(AJAX 调用)的响应
- POST请求ajax jquery错误
- CasperJS don'我没有请求AJAX
- 使用这种Facebook风格的Lightbox-请求AJAX-在一个页面上覆盖多个按钮
- 400错误请求ajax post请求
- 如何在开始发送请求ajax之前延迟3秒
- 与jQuery同时请求AJAX
- 使用POST请求AJAX发送json对象