在浏览器FIFO队列中使用Javascript和AJAX到Web服务

时间:2012-03-13 22:33:45

标签: javascript ajax web-services html5 web-worker

我有一个现有的Adobe AIR应用程序,我被要求转换为仅限浏览器的纯HTML5应用程序。

该应用程序用于评估扫描的学生作品的图像。 AIR应用程序接收有关要评分的主题的配置信息,然后调用Web服务,该服务返回要评分的各个项目的XML消息(服务器处理诸如锁定项目之类的内容,因此一次只有一个人可以对其进行评分)。然后,应用程序将这些传入的项目排队,并在后台下载每个项目的图像。在前台,向用户呈现表单中的一个或多个传入排队项目,并为每个项目输入分数。当他们提交时,它会获取这些分数并将它们放在传出队列中。监视传出队列,然后将任何传出消息发送到另一个在服务器上记录分数的Web服务进程。有经验的用户通常可以根据主题(每秒快一个)快速得分,因此我们大量使用缓存,通常一次在本地存储数十甚至数百个项目。

在查看HTML5及其本地存储和Web工作者的选项时,我认为这可能是可能的。我做了一些研究,但我对这些新的HTML5功能并不熟悉。我看到Web工作者是孤立的,无法访问localstorage或sessionstorage。我想我传入和传出的队列可能只是我推送和弹出的数组,但现在它不是那么清楚。如果我需要一个进程来持续监视传入队列(以保持其完整)和传出队列(保持空闲),似乎Web工作者将是理想的。但他们无法共享数据或管理本地存储。

是否有任何想法或指示让我朝着正确的方向前进?我会严格控制浏览器的要求,因此我们可以使用最新和最好的版本。还可以轻松地重新配置Web服务以处理JSON而不是XML。感谢。

1 个答案:

答案 0 :(得分:0)

我建议使用简单的HTML图像标记作为队列:假设您有10个(或n,我使用10个作为示例)图像标记,都指向某些pixel.gif。在应用启动时,您将src属性设置为前10个图像 - 这将导致并行加载而无需编写任何代码。使用onload事件进行内务管理。应隐藏所有这些图像标签。

第一张图片加载完成后,通过取消隐藏将其呈现给用户。用户将对其进行评分 - 此时您隐藏图像,启动AJAX调用以记录投票并取消隐藏下一个图像。

当AJAX调用返回成功时,您将此图像标记标记为空闲且下一行,并将src属性设置为下一个图像。冲洗并重复。

重点是,通过使用异步HTML结构(如图像加载或XmlHttlRequest),您无需为队列或Web工作人员烦恼 - 在此过程中创建的应用程序即使与稍微过时的浏览器兼容也是如此。< / p>