我正在使用 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 个请求/5 分钟,我几乎每秒都需要完成它。我已经支付了一年的费用,他们没有退款,而且我无法修改服务器,只能访问 cPanel
。
最佳答案
好吧,如果您想为每个用户每秒发出一个请求,那么 600 个请求/5 分钟是相当有限的。从本质上讲,这意味着每个用户每分钟将发出 60 个请求。或 300/5 分钟。换句话说,即使您优化脚本以将两个请求合并为一个,您的站点最多可以有两个用户;)我猜不会太多...
您有两个选择:
坚持通过 Ajax 请求创建聊天系统并更改托管提供商。如果您不具备执行 2 的技能,这实际上可能会更便宜。
忘记每秒发出一个 Ajax 请求进行轮询并可能发送另一个请求来推送。围绕网络套接字、长轮询甚至 XMPP 实现一些东西。 如果你走那条路,我会看看 socket.io一个透明的库,它使用支持 Web 套接字的库,并且可以回退到长轮询和其他其他方式。对于XMPP方式,有优秀的Strophe.js 。请注意,这两个路由都比 Ajax 请求复杂得多,并且需要大量服务器逻辑更改。
关于javascript - 减少 Ajax 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9342031/