广

JavaScript

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    详解js异步文件加载器

    2018-04-09 07:41:53 次阅读 稿源:互联网
    零七广告

    我们经常会遇到这种场景,某些页面依赖第三方的插件,而这些插件比较大,不适合打包到页面的主js里(假设我们使用的是cmd的方式,js会打包成一个文件),那么这个时候我们通常会异步获取这些插件文件,并在下载完成后完成初始化的逻辑。

    !window.plupload ?    $.getScript( "/assets/plupload/plupload.full.min.js", function() {      self._initUploader();    }) :    self._initUploader();    

    下图是页面多个组件依赖vue.js的情况(jquery和vue混用的场景):

    // vue加载器var promiseStack = [];function loadvue() {  var promise = $.Deferred();  if (loadvue.lock) {    promiseStack.push(promise);      } else {    loadvue.lock = true;    window.Vue ?        promise.resolve() : // 这里写错了,window.Vue为true的时候lock要置为false,我在后面改过来了       $.getScript( "/assets/vue/vue.min.js", function() {        loadvue.lock = false;        promise.resolve();        promiseStack.forEach(function(prom) {          prom.resolve();        });      });      }  return promise;}window.loadvue = loadvue;
    loadvue().then(function() { // do something }); 

    /** * @des: js异步加载器生产器 * @param {string} name  加载器名称 * @param {string} global 全局变量 * @param {string} url  加载地址 **/var promiseStack = {};exports.generate = function(name, global, 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, function() {          foo.lock = false;          promise.resolve();          promiseStack[name].forEach(function(prom) {            prom.resolve();          });        });      }          }    return promise;  };    return foo;};
    // 全局加载器window.loadvue = loader.generate('vue', 'Vue', '/assets/vue/vue.min.js');window.loadPlupload = loader.generate('plupload', 'plupload', '/assets/plupload/plupload.full.min.js');

    使用的时候同上,这样就基本解决了我们的问题。

    以上就是关于js异步文件加载器的详细内容,希望对大家的学习有所帮助。

    零七网部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与零七网进行文章共享合作。

    零七广告
    零七广告
    零七广告
    零七广告