js中动态加载js

article/2025/10/14 3:33:31

下面介绍一种JS代码优化的一个小技巧,通过动态加载引入js外部文件来提高网页加载速度

 

  1. 【基本优化】

    将所有需要的<script>标签都放在</body>之前,确保脚本执行之前完成页面渲染而不会造成页面堵塞问题,这个大家都懂的。

  2.  

    【合并JS代码,尽可能少的使用script标签】

    最常见的方式就是带代码写入一个js文件中,让页面只使用一次<script></script>标签来引入

  3.  

    【无堵塞加载JS】

    通过给script标签增加 defer属性或者是 async 属性来实现

    <script src="file.js" defer></script>

    注解:

     

    asyncdefer不同之处是async加载完成后会自动执行脚本,defer加载完成后需要等待页面也加载完成才会执行代码

  4.  

    【动态创建script来加载-推荐】

    function loadJS( url, callback ){

        var script = document.createElement('script'),

            fn = callback || function(){};

        script.type = 'text/javascript';

        

        //IE

        if(script.readyState){

            script.onreadystatechange = function(){

                if( script.readyState == 'loaded' || script.readyState == 'complete' ){

                    script.onreadystatechange = null;

                    fn();

                }

            };

        }else{

            //其他浏览器

            script.onload = function(){

                fn();

            };

        }

        script.src = url;

        document.getElementsByTagName('head')[0].appendChild(script);

    }

     

    //用法

    loadJS('file.js',function(){

        alert(1);

    });

  5.  

    谷歌浏览器运行效果,script被动态创建在head中

  6.  

    建议大家可以封装成类库,单独引入。

    该原理实现的也有很多不错的js类库可以使用,如LazyLoad.js,支持数组的形式引入,打开浏览器在network中可看到js是同步加载的

  7.  

    【XHR加载】

    使用ajax方式加载

    代码:

    var xhr = new XMLHttpRequest;

    xhr.open('get','file.js',true);

    xhr.onreadystatechange = function(){

     

        if( xhr.readyState == 4 ){

            if( xhr.status >=200 && xhr.status < 300 || xhr.status == 304 ){

                var script = document.createElement('script');

                script.type = 'text/javascript';

                script.text = xhr.responseText;

                document.body.appendChild(script);

            }

        }

     

    };

    xhr.send(null);

  8. 8

    【总结】

    最好的方式还是使用动态创建script的方式加载,当动态创建script,浏览器会分配一个线程去下载src指向的资源,多个script也是同步下载的


http://chatgpt.dhexx.cn/article/AKHdmB5b.shtml

相关文章

统计学 假设检验 P值

统计学 假设检验 P值 什么是P值 案例分析 来自总体方差检测的题目 p值的计算 P值

统计假设检验中的P值及置信区间理解

置信区间&#xff0c;就是一种区间估计。 例如&#xff0c;使用95%假设区间估计&#xff0c; 正式的期望无法获取&#xff0c;可用期望的均值替代 显著性P-value 假设&#xff1a;说你的硬币是公平的 检验假设&#xff1a;扔十次&#xff0c;看实验的结果是不是和假设相符 …

统计|假设检验中的P值(pvalue)如何看/怎样理解

本博文源于《商务统计》&#xff0c;之前在做matlab编程和spss统计分析中&#xff0c;对p值的理解就是懵懵懂懂&#xff0c;无法确定出真正含义。今天就以新生儿的例子来观看p值是如何看的&#xff0c;并且了解假设检验的5个步骤。 例子&#xff1a;新生儿 假设检验的一般步骤…

假设检验:使用p值来接受或拒绝你的假设

作者|GUEST 编译|VK 来源|Analytics Vidhya 介绍 检验是统计学中最基本的概念之一。不仅在数据科学中,假设检验在各个领域都很重要。想知道怎么做?让我们举个例子。现在有一个lifebuoy沐浴露。 沐浴露厂商声称,它杀死99.9%的细菌。他们怎么能这么说呢?必须有一种测试技术…

假设检验中的显著性水平与p值

假设检验的原理 假设检验是根据样本信息&#xff0c;提出对于总体信息的假设&#xff0c;并且对假设的正确性进行推断。 判断原假设的方法 推断的依据是假设成立发生的概率&#xff0c;并且设置显著性水平 α \alpha α (取值一般为0.01&#xff0c;0.05&#xff0c;0.1)。…

统计学假设检验中 p 值的含义具体是什么?

一、作者&#xff1a;李可乐 链接&#xff1a;https://www.zhihu.com/question/23149768/answer/23745483 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 就从打赌开始说起。 一日闲机无聊&#xff0c;我与楼主会饮于…

统计推断——假设检验中 p 值的含义具体是什么?

「假设检验」&#xff0c;顾名思义&#xff0c;就是通过概率统计的知识来判断一个命题&#xff08;如「抛掷一枚硬币出现正反面的概率是均匀的」&#xff0c;如「值大于0.75」&#xff09;的真伪性。 这个命题便称作「零假设&#xff0c;null hypothesis」&#xff0c;我们通常…

统计——假设检验与p值

假设检验&#xff0c;是基于给定的样本对假设做出判定&#xff0c;分为参数假设检验&#xff08;假设可以用一个参数的集合表示&#xff09;和非参数假设检验&#xff08;比如&#xff1a;假设总体服从某种分布&#xff09;。 假设检验的步骤&#xff1a; 1、建立假设&#xff…

STM32———高级定时器的死区时间计算方法

STM32———高级定时器的死区时间计算方法 1.定时器的时钟分频因子和预分频系数的区别&#xff1a; 1.1 时钟分频因子(Clock division),决定定时器的工作时钟频率. tDTSfDTS ; tCK_INTfCK_INT 1.2 预分频系数决定计数器的工作时钟的&#xff0c;配合自动重装载值Period完成…

暂时性死区以及函数作用域

暂时性死区 暂时性死区也就是变量声明到声明完成的区块&#xff0c;这个区块是一个封闭的作用域&#xff0c;直到声明完成。 如果在变量声明之前使用该变量&#xff0c;那么该变量是不可用的&#xff0c;也就被称为暂时性死区。 var 没有暂时性死区&#xff0c;因为var存在变…

STM32-互补输出带死区和刹车断路笔记

互补输出带死区控制 比如说&#xff0c;高级控制定时器&#xff08;TIM1 和 TIM8&#xff09;可以输出两路互补信号&#xff0c;并管理输出的关断与接通瞬间。这段时间通常称为死区&#xff0c;由于硬件设备的延迟和一些设备转换的用时&#xff0c;这时候进行操作可能会导致比…

es6中的暂存性死区

暂存性死区 暂存性死区是相对于某一个变量来说的&#xff0c;就是在定义该变量之前的区域就是暂存性死区 const i 1{//死区开始console.log(i) //死区里边拿不到外边的i&#xff0c;也拿不到本代码块内的i//死区结束const i 2 console.log(i) //直到这里才能正常使用 i }来看…

STM32实战-高级定时器带死区的互补PWM输出

前言&#xff1a; 平时我们设计点击驱动电路时&#xff0c;一般会采用npn和pnp三极管&#xff0c;来控制电机的导通和关闭&#xff0c;但是三级管内部自带电容&#xff0c;断电后不会立马断掉&#xff0c;会经过很小的一段时间才会放电完毕&#xff0c;这时候要留有死区给电容…

暂时性死区(TDZ)

常见js面试题之一&#xff1a; 提示&#xff1a;又是一道常见的前端面试题&#xff0c;什么是暂时性死区&#xff1f; 问题描述&#xff1a; console.log(a);var a 1; 日志输出&#xff1a;undefined console.log(a);let a 1; 下面我们可以看到这里的日志输出出现了报错&am…

PWM死区(Dead Zone)的作用和意义

PWM输出时的Dead Zone(死区)作用是在电平翻转时插入一个时间间隔&#xff0c;避免关闭前一个设备和打开后一个设备时因为开关速度的问题出现同时开启状态而增加负荷的情况(在没有彻底关闭前打开了后一个设备)&#xff0c;尤其是电流过大时容易造成短路等损坏设备&#xff0c;如…

死区时间和消隐时间

1 死区时间 PWM是脉冲宽度调制&#xff0c;常用到整流和逆变&#xff0c;这就需要用到整流桥和逆变桥。对于三相电&#xff0c;需要三个桥臂。以高低电平为例&#xff0c;每个桥臂上有两个电子器件&#xff0c;比如IGBT&#xff0c;大致如下图所示&#xff1a; 这两个IGBT不能同…

stm32关于带死区时间的互补PWM输出

1.互补PWM输出简介 在使用stm32输出PWM波形时,笔者所用的stm32f103zet6中的高级定时器TIM1和TIM8可以输出互补的PWM波形,使用互补的PWM波常见与一些半桥电路和全桥电路控制中,使用MCU自带的高级时钟可以简便的解决互补PWM输出问题。 笔者在控制半桥电路中应用了MCU自带的TIM1时…

PWM互补输出,以及死区时间计算

本文基于野火例程进行解说 实验内容 本次实验输出一对互补的pwm波&#xff0c;且进行死区时间的计算说明。 代码 互补输出对应的定时器初始化代码&#xff1a; bsp_advance_tim.c /********************************************************************************* fi…

死区补偿---学习笔记

最近调试中发现&#xff0c;死区补偿对电流谐波和电流带宽影响挺大&#xff0c;于是对死区补偿产生浓厚兴趣&#xff0c;找来几篇文章粗读并做一下笔记。 传统做法 无非就是根据电流方向补偿&#xff0c;假如svpwm计算出的A相理论导通实践为T1&#xff0c;死区时间是Td&#…