如何使用jQuery从Web Worker Thread中解析XML

时间:2013-03-15 00:12:33

标签: javascript jquery performance xml-parsing web-worker

略读?只需阅读大胆的内容。

你好朋友!我正在构建一个需要进行严格的XML处理的 Web应用程序

我目前有一个使用jQuery来解析和处理大量XML文档的功能。这个锁定浏览器的UI长达60秒,这显然是相当的跛。

我一直在研究Web Workers,因为我想在Web Worker线程中运行此操作以减轻浏览器的UI。

希望我可以使用Web Worker的self.importScripts()导入jQuery库,从Web Worker线程中解析和操作XML。
无法做到: Web Worker抛出错误,例如window is not defined,因为jQuery库会引用窗口和朋友,这不是线程安全,因此不存在于Web Worker的全局命名空间中。

我做了很多谷歌搜索,但是很难找到关于这个主题的最新信息。我发现了一些hacky work-arounds和jQuery插件,但它们都是好几年了老了,我一直希望我错过了这种相对新技术的新解决方案。
是否存在(半)官方“Web Worker jQuery”

我发现XMLforScript是jQuery的替代品,应该在Web Worker中运行 - 但是我专门寻找jQuery解决方案,因为我不想要重写我的代码。

在调用importScripts()之前,我很想尝试创建一系列假元素来缓解Web Worker中的jQuery错误,如下所示:

window={
    document:{
        createElement:function(){
            return {
                setAttribute:function(){} } } } };
    /* ... much more fake DOM */
    importScripts('jquery.js');

但是,我意识到我必须深入创建一个巨大的人工DOM来满足jQuery,并认为这可能是一条失败和浪费时间的道路,因为jQuery可能依赖于其中一些对象的XML解析(我不太了解jQuery如何知道)。

有人有任何可爱的解决方案吗?

如果没有,我只会制作一个脂肪静态加载指示器来警告用户恶作剧需要时间,并且他们必须信任并希望网络应用程序没有崩溃或停止工作:D

感谢您的琢磨。
//大通。

2 个答案:

答案 0 :(得分:0)

您应该可以使用this method中的提示,该提示使用Blob授予网络工作者访问原始dom的权限。

<强>更新

工作人员确实可以访问DOM,因为this玩具示例应该演示

以上陈述是一个公然的谎言(感谢OP)。见更新II

更新II

正如OP在下面的评论中正确指出的那样,给出的例子是作弊。如果你能够从JQuery中解脱出来,我有一个例子,使用功能强大的xml for <script>库对xml文档进行一些SAX处理。我已将示例发布到github。执行时,结果将写入console,因此打开一个。

我已上传代码here以进行演示。

此外,this SO question

还提供了对网络工作者和DOM无法访问的深入讨论。

答案 1 :(得分:0)

只是为了添加一个可能的替代,您可能需要查看Hive,或者特别是子项目Pollen.js,它为工作者提供了jQuery的许多功能(尽管显然没有任何直接操作DOM的东西)