ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

React中同步引入script标签

2019-09-16 14:42:18  阅读:715  来源: 互联网

标签:ok script url 标签 React callback scripts 加载


公众号:程序员波波

之前写了一篇异步引入的博客,但是在开发中遇到,可能某些js之间有调用关系,那么引入的时候就需要按照一定的顺序进行同步引入。

这里采用了递归的方式:

class Tools
{
    static loadScript(url, callback)
    {
        let old_script = document.getElementById(url);
        if (old_script)
        {
            if (old_script.ready == true)
            {
                // console.log("INFO:already load:" + url);
                callback();
                return;
            }
            else
            {
                document.body.removeChild(old_script);
                // console.log("INFO:remove an old script that not ready:" + url);
            }
        }
        let script = document.createElement('script');
        script.id = url;
        script.src = url;
        script.onload = script.onreadystatechange = function() {
            if (script.ready) {
                return false;
            }
            if (!script.readyState //这是FF的判断语句,因为ff下没有readyState这个值,IE的readyState肯定有值
                || script.readyState == "loaded" || script.readyState == 'complete' // 这是IE的判断语句
            ) {
                // console.log("INFO:load:" + url);
                script.ready = true;
                callback();
            }
        };
        document.body.appendChild(script);
    }

    //synchronization
    //同步加载多个脚本
    static syncLoadScripts(scripts, callback)
    {
        var ok = 0;
        var loadScript = function(url) {
            Tools.loadScript(url, function(){
                ok++;
                // console.log("init:" + url)
                if (ok == scripts.length) {
                    callback();
                }
                else {
                    loadScript(scripts[ok])
                }
            })
        }
        loadScript(scripts[0]);
    }

    //asynchronization
    //异步加载多个脚本
    static asyncLoadScripts(scripts, callback)
    {
        var ok = 0;
        for (var i=0; i < scripts.length; i++) {
            Tools.loadScript(scripts[i], function() {
                console.log(scripts[ok])
                ok++;
                if (ok==scripts.length)
                {
                    callback();
                }
            })
        }
    }
}

export default Tools;

对于加载大量js的时候,建议分批次加载,对于互相不影响的放在第一批进行异步加载,然后在回调中同步加载剩余有顺序的js。

或者分成一批完全不依赖顺序的开始异步加载,然后直接对于剩余有顺序要求的进行同步加载。

标签:ok,script,url,标签,React,callback,scripts,加载
来源: https://blog.csdn.net/AndyQsmart/article/details/79805868

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有