3

略读?只需阅读粗体字即可。

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

我目前有一个使用 jQuery 来解析和操作大量 XML 文档的函数。会将浏览器的 UI 锁定长达 60 秒,这显然是非常糟糕的。

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

希望我可以使用 Web Workerself.importScripts()来导入 jQuery 库,从 Web Worker 线程中解析和操作 XML。
   不能做: Web Worker 会抛出错误,例如window is not defined因为 jQuery 库引用了 window 和 Friends,它们不是线程安全的,因此不存在于 Web Worker 的全局命名空间中。

我做了很多谷歌搜索,但很难找到有关此主题的任何最新信息。我发现了一些 hacky 变通办法和 jQuery 插件,但它们都已经有好几年的历史了,我一直希望我错过了针对这种相对较新的技术的更新解决方案。
   是否存在(半)官方的“Web Worker jQuery”

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

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

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

但是,我意识到我必须非常深入地创建一个巨大的人工 DOM 来满足 jQuery,并且认为这可能是一条通向失败和浪费时间的道路,因为 jQuery 可能依赖于其中一些对象来进行 XML 解析(我对 jQuery 的工作原理知之甚少)。

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

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

感谢您的思考。
  //追赶。

4

2 回答 2

0

您应该能够使用此方法中的想法,该方法使用Blob为 web worker 提供对原始 dom 的访问权限。

更新

DOM正如这个玩具示例应该演示的那样,工人确实可以访问

上述声明是一个公然的谎言(感谢OP)。见更新二

更新二

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

我在这里上传了代码用于演示目的。

此外,在这个 SO question中还提供了对 web 工作者和 DOM 不可访问性的深入讨论

于 2013-10-24T12:20:08.510 回答
0

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

于 2015-04-01T02:08:31.780 回答