ajax长轮询 怎样节省性能,javascript – 改进长轮询Ajax性能

在Firefox浏览器中,一个使用jQuery的长轮询webapp在运行一整夜后会导致性能问题。尽管堆栈深度看起来并不深,但可能是由于Firefox存储每个请求导致的内存占用。解决方案可能包括禁用Firebug的网络监视器,或者考虑改用非递归的迭代方法来实现长轮询,以减轻浏览器负担。作者还在考虑是否定期刷新页面或采用不同的更新模式来避免性能影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我正在编写一个webapp(仅与Firefox兼容),它使用长轮询(通过jQuery的ajax功能)从服务器向客户端发送或多或少的持续更新.我很关心长时间运行这种运行的影响,比如说,整天或整夜.基本代码框架是这样的:

function processResults(xml)

{

// do stuff with the xml from the server

}

function fetch()

{

setTimeout(function ()

{

$.ajax({

type: 'GET',

url: 'foo/bar/baz',

dataType: 'xml',

success: function (xml)

{

processResults(xml);

fetch();

},

error: function (xhr, type, exception)

{

if (xhr.status === 0)

{

console.log('XMLHttpRequest cancelled');

}

else

{

console.debug(xhr);

fetch();

}

}

});

}, 500);

}

(半秒“睡眠”是这样的,如果更新快速返回到客户端,客户端不会锤击服务器 – 这通常是他们的.)

在一夜之间离开之后,它往往会让Firefox爬行.我一直在想这可能部分是由于堆栈深度很大,因为我基本上编写了一个无限递归函数.但是,如果我使用Firebug并在fetch中抛出一个断点,看起来情况并非如此. Firebug向我展示的堆栈只有大约4或5帧深,即使在一小时后也是如此.

我正在考虑的解决方案之一是将递归函数更改为迭代函数,但我无法弄清楚如何在不旋转的情况下在Ajax请求之间插入延迟.我已经看了JS 1.7 “yield” keyword,但我不能完全绕过它,弄清楚这是否是我需要的.

是最好的解决方案,只是定期在页面上进行硬刷新,比如每小时一次?是否有更好/更精简的长轮询设计模式即使在运行8或12小时后也不会对浏览器造成伤害?或者我应该完全跳过长轮询并使用不同的“常量更新”模式,因为我通常知道服务器对我的响应频率如何?

解决方法:

它也可能是FireBug.你是console.logging的东西,这意味着你可能打开了一个网络监视器选项卡等,这意味着每个请求都存储在内存中.

尝试禁用它,看看是否有帮助.

标签:javascript,ajax,long-polling,performance

来源: https://codeday.me/bug/20190518/1130727.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值