gpt4 book ai didi

javascript - 在Webworker中使用AJAX加载javascript资源

转载 作者:行者123 更新时间:2023-11-27 23:32:43 25 4
gpt4 key购买 nike

我正在创建一个单页应用程序,这是我自己的一个小框架。我使用 native Javascript,没有外部依赖项,没有 jQuery,什么都没有。

这就是我想做的:

首次访问页面后,我的框架仅同步加载呈现当前页面所需的资源。然后,当当前页面的所有内容都加载完毕后,我将创建新的 Webworker。我希望他加载其他 .js 文件,代表网站上的其他页面。这些文件中的每一个都包含一个对象,该对象代表页面 - 我希望该对象在主线程中全局可用。在我看来,webworker应该开始通过ajax调用逐一加载依赖项,每次加载东西时,他应该通过postmessage通知主线程,并将文件发送到主线程(不确定是否将整个ajax响应文本发送回主线程,或者将其写入 sessionStorage - 即使在这个主题上我也会很感激的建议)。

但是。这里有一个问题。我需要执行这个文件 - 我希望我的对象在我的主线程中全局可用。我知道我不能做这样的事情:

function loadScript(url, callback)
{
// Adding the script tag
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = url;

// Then bind the event to the callback function.
// There are several events for cross browser compatibility.
script.onreadystatechange = callback;
script.onload = callback;

// Fire the loading
head.appendChild(script);
}

因为我无法从 webworker 线程访问 DOM。

所以问题是。有没有更好的解决方案,然后将responseText字符串发送回主线程,然后对其调用eval()?我听说 eval 很邪恶,速度慢而且有 bug。但我还有其他选择吗?

每一个建议,即使是那些会破坏我的框架概念的建议,都非常值得赞赏。

这是我的 github 个人资料,但不要过多检查它,它还远未完成,并且可能存在非常愚蠢的错误,并且文档是用我的母语编写的。 https://github.com/congrady/Bakalarka

最佳答案

你的想法似乎完全可行——你可以从工作线程返回任何你想要的(好吧,几乎任何)数据到主线程,所以我会避免只返回字符串和eval-ing事物。当从工作线程接收数据时,主线程可以根据需要使其可访问(包括向 window 对象添加内容以使其全局可用)。

在 Web Worker 中进行 Ajax 调用有一些优点。例如,如果您期望返回较大的响应(即多个 MB 的 JSON 或二进制图像数据),则主线程可能会在解释和解析响应时挂起。网络 worker 可以异步处理这个问题......我已经为 a BackboneJS plugin I developed 做了类似的事情用于管理浏览器中的大规模数据集。

在 Web Worker 中,我建议找到一个小型 Ajax 库来简化 Ajax 请求的管理。我最终使用了Nanoajax ,并且对此非常满意。

请注意,如果从服务器返回的数据将包含函数和数据,则您需要使用 eval'ed String 方法或类似的方法。

关于javascript - 在Webworker中使用AJAX加载javascript资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34419898/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com