我正在使用一个代码来处理使用Web Workers的所有AJAX请求(如果可用).这些工作人员几乎只做XMLHttpRequest对象处理(没有额外的计算).工作人员创建的所有请求都是异步的(request.open("get",url,true)).
最近,我遇到了关于这段代码的几个问题,我开始怀疑是否应该花时间修复这个或者只是转储整个解决方案.
到目前为止,我的研究表明,此代码实际上可能会损害性能.但是,我无法找到支持这一点的任何可信来源.我的两个发现是:
有人能指出我讨论这个问题的可靠来源吗?或者,是否有任何基准可以消除我的疑虑?
[ 编辑 ]当WebWorker也负责解析结果(JSON.parse)时,这个问题会变得更有趣.异步解析是否提高了性能?
我想知道你对此有何看法.建议在Web worker中使用同步请求(XMLHttpRequest)?我能找到什么问题?
我一直在我的应用程序中测试这个,我没有发现任何问题.但是由于jQuery和AJAX的旧体验,我害怕这种同步行为.我的应用程序从数据库中的几个表中获取大量数据,这需要一些时间.对于从表中检索到的每一组数据,我需要立即处理它,以免过多地延迟整个过程.同时,用户正在与浏览器进行交互,因此可以阻止它,我认为网络工作者可以正常工作.你认为这是一个很好的解决方案吗?或者我应该尝试使用asynchronus请求?
谢谢.
在Chrome中,如果用户滚动所有XHR并且setTimeouts将被延迟,直到滚动停止并且我需要一个解决方法.此博客文章中描述了此行为.虽然这个功能有助于移动滚动,但对于无限滚动来说却是灾难性的,这正是我想要做的.
发生这种情况的证据:
所有其他浏览器都能正常工作,Chrome会显示一个空白屏幕,直到用户停止滚动.
网络面板将显示所有请求,pending直到滚动结束,然后它们全部完成.
把它放在一个片段中,运行它然后立即开始滚动.滚动完成后才会调用setTimeout.
var p = new Promise(function (resolve) {
setTimeout(function () {
console.log('resolving');
resolve();
}, 1000)
});
p.then(function () {
console.log('DONE!!');
})
Run Code Online (Sandbox Code Playgroud) 目前,我正在使用setTimeout()暂停一个for巨大的列表循环,以便我可以添加一些样式到页面.例如,
例如:http://imdbnator.com/process?id = wtf& redirect = false
我使用setTimeOut:
我setTimeout()用来添加图像,文本和css进度条(为什么Progress Bar不会像Text一样动态变化?2).
显然,正如您所看到的那样,用户浏览页面并将鼠标悬停在几张图片上非常痛苦.它变得非常迟钝.这有什么解决方法吗?
我的FOR循环:
每个for循环在后台向PHP API发出ajax请求.这肯定会让我在那里付出一定的效率,但是所有其他网站如何以如此优雅的方式拉开它?我的意思是,我看到网站显示了一个很好的加载图像,在发出API请求时没有用户干扰.虽然我尝试做类似的事情,但我set a time-out每次都有.
他们是否使用了更好的服务器 - 客户端交互语言,比如我听过的node.js?
此外,我想到了一些替代方案,但遇到了其他并发症.如果您能帮助我解决这些可能的替代方案,我将不胜感激.
方法1:
我没有通过jQuery对我的PHP API进行AJAX调用,而是完全可以完成一个完整的服务器端脚本.但是,我遇到的问题是我无法创建一个好的客户端页面(如我当前页面中)更新进度条并在处理完每个列表项后添加动态图像.或者这可能吗?
方法2 :(已编辑)
就像下面的有用答案一样,我认为最大的问题是服务器API和客户端交互.他建议的Websockets看起来很有希望.它们必然会比setTimeout更好吗?是否有任何重大的时间差异让我说我将当前的1000个AJAX请求替换为websocket?
此外,如果除了websocket之外还有其他任何东西比AJAX调用更好,我将不胜感激.
专业网站如何通过流媒体服务器和客户端交互来解决问题?
编辑1:请解释专业网站(例如http://www.cleartrip.com,当您请求航班详细信息时)如何在处理服务器端时提供顺畅的客户端.
编辑2:正如@Syd建议的那样.这是我正在寻找的东西.我认为我当前的客户端和服务器交互有很多延迟.Websockets似乎是一个解决方案.除了标准的AJAX之外,还有哪些其他/最佳方法可以改善服务器cleint交互?
javascript ×4
ajax ×3
web-worker ×2
asynchronous ×1
css ×1
jquery ×1
php ×1
scroll ×1
settimeout ×1