requirejs 如何实现seajs的require.async

发布于 2022-08-28 01:02:51 字数 199 浏览 16 评论 0

if (!'webkitFilter' in document.createElement('div').style ) {
    require.async('test',function(test){
      console.log(test.fuck);
    })
  }

如上面这样,判断成立后才下载js再回调

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

世界如花海般美丽 2022-09-04 01:02:51

昨天犹豫了很久还是想等大大们更规范严谨的阐述,结果居然今天还没人来回答……
那么我试着解释下看。(申明我没用过RequireJS!关于RequireJS的一切都是脑补!)

RequireJS 执行的是AMD规范,而seajs则执行CMD规范。这两者的区别主要在于对依赖模块的理解和处理方法。

AMD 和 CMD 的区别有哪些?(知乎)

与本题相关的一些差异主要在于:对于依赖的模块,AMD 是提前执行,CMD 是延迟执行
具体地说,AMD规范建议的是将依赖前置,即在代码执行前完成所有依赖,待依赖全部完成后再去执行代码。

以上不是题主问题的答案,算是背景知识。


我想表达的是,既然使用了RequireJS,就不能用类似seajs的CMD方式去思考代码的组织。require.async属于seajs“延迟加载”概念的一种具体实现,本身和RequireJS的设计理念就是背离的。
实际上,RequireJS在代码里实现了部分CMD的兼容,但其处理方式还是有一定的问题的,属于“强行把CMD模块转换为AMD模块”的行为,导致即使载入的是CMD模块,也是按照AMD的提前执行方式去运行。
所以个人并不“看好”用RequireJS实现require.async功能的可能性。

不过,据说,RequireJS 从 2.0 开始,也改成可以延迟执行。但查了半天我只看到这么一句话,没有任何样例,官网翻了好久也发现啥有用的东西。
于是一定要实现的话,其实我也不知道该怎么弄,也许直接试试这个?虽然我感觉RequireJS可能还是用AMD理念去套。

if (!'webkitFilter' in document.createElement('div').style ) {
    require(['test'],function(test){
        console.log(test.fuck);
    })
}

最后,因为很重要所以要说两次:申明我没用过RequireJS!关于RequireJS的一切都是脑补!

少钕鈤記 2022-09-04 01:02:51

楼主,我有个疑问,seajs本身不就是异步加载模块的吗?它这个异步体现在哪里?是加载时不阻塞后面的程序执行吗?另外既然sea.js本身都异步加载了那require.async这个异步加载是什么意思,用处我知道,但是我不理解它内部怎么处理的

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文