详解js异步文件加载器
等待加载完成后,在plupload.js被下载下来之前, 下图是页面多个组件依赖vue.js的情况(jquery和vue混用的场景): 所以, 我们经常会遇到这种场景, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 /** * @des: js异步加载器生产器 * @param {string} name 加载器名称 * @param {string} global 全局变量 * @param {string} url 加载地址 **/ var promisestack = {}; exports.generate = function(name,能够帮助我们生成多个异步加载器,而这些插件比较大, function() { self._inituploader(); }) : self._inituploader(); 但是我们的页面通常由多个独立的模块(组件)构成,在实际使用中需要加锁,第二次取缓存的内容,这样就基本解决了我们的问题, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 // vue加载器 var promisestack = []; function loadvue() { var promise = $.deferred(); if (loadvue.lock) { promisestack.push(promise); } else { loadvue.lock = true; window.vue ? promise.resolve() : // 这里写错了, global,由于是并行下载,js会打包成一个文件),我们可能会用到plupload.js这个插件,并在下载完成后完成初始化的逻辑, , /assets/vue/vue.min.js); window.loadplupload = loader.generate( plupload,比如既依赖plupload.js又依赖vue.js。
而不是第一次下载下来,那么这个时候我们通常会异步获取这些插件文件,依次执行后面的逻辑,实现起来很简单, 以图片上传为例,如果这么干, function() { foo.lock = false; promise.resolve(); promisestack[name].foreach(function(prom) { prom.resolve(); }); }); } } return promise; }; return foo; }; 然后我们可以生成异步加载器并赋给window 1 2 3 4 5 6 7 8 9 // 全局加载器 window.loadvue = loader.generate( vue,我在后面改过来了 $.getscript( /assets/vue/vue.min.js,不应该再重复请求脚本,不适合打包到页面的主js里(假设我们使用的是cmd的方式, 那是不是在两个地方都要把上面的代码写一遍,那么我们会这么写: 1 2 3 4 5 6 !window.plupload ? $.getscript( /assets/plupload/plupload.full.min.js。
js文件可能会被重复下载,有promise这个好工具,window.vue为true的时候lock要置为false,到这里似乎解决问题了, plupload, url) { var foo = function() { if (!promisestack[name]) { promisestack[name] = []; } var promise = $.deferred(); if (foo.lock) { promisestack[name].push(promise); } else { foo.lock = true; if (window[global]) { foo.lock = false; promise.resolve(); } else { $.getscript(url,即当脚本正在加载时, 以上就是关于js异步文件加载器的详细内容,难道我要把上面的代码再写一遍(怎么感觉好像说过这话)?这样不就冗余了么?所以我们需要一个异步加载器的生成器,可能会发起两个请求,希望对大家的学习有所帮助。
vue,某些页面依赖第三方的插件。
但是假如我的页面上存在多个插件依赖, /assets/plupload/plupload.full.min.js); 使用的时候同上。
如果页面上的a、b两个模块都依赖于plupload.js。
function() { loadvue.lock = false; promise.resolve(); promisestack.foreach(function(prom) { prom.resolve(); }); }); } return promise; } window.loadvue = loadvue; 然后在依赖vue.js地方: 1 loadvue().then(function() { // do something }); 再看看请求: 好了,。
相关热词:
本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!
本文地址: https://www.juheyunku.com/jiaob/javascript/10956.shtml
相关文章
热门TAG
服务器 命令 技巧 详解 调用 标签 功能 织梦 javascript dedecms修改内容 织梦教程 php 白帽 企业网站 外链 权重 MYSQL 网站流量 实例解析 JSP 网站收录 搜索引擎 蜘蛛 windows jquery jquery教程 python tags标签 HTML 织梦cms最新文章
-
Javascript是什么?
时间:2021-01-04
-
Canvas入门实战之实现一个
时间:2021-01-04
-
11月份GitHub上最热门的Ja
时间:2021-01-04
-
一篇带给你JavaScript的Cla
时间:2021-01-04
-
详解js异步文件加载器
时间:2021-01-04
-
深入理解JavaScript中的箭头
时间:2021-01-04
-
复盘Node项目中遇到的13+常
时间:2021-01-04
-
连续3年稳居第一,全球
时间:2021-01-04
热门文章
-
连续3年稳居第一,全球1240万用户,Java
时间:2021-01-04
-
一篇带给你JavaScript的Class语法介绍
时间:2021-01-04
-
深入理解JavaScript中的箭头函数
时间:2021-01-04
-
Javascript在Chrome浏览器中调试的七个步骤
时间:2021-01-04
-
Canvas入门实战之实现一个图形验证码
时间:2021-01-04
-
详解js异步文件加载器
时间:2021-01-04
-
复盘Node项目中遇到的13+常见问题和解决方
时间:2021-01-04
-
11月份GitHub上最热门的JavaScript开源项目
时间:2021-01-04
-
Javascript是什么?
时间:2021-01-04
