美文网首页
JS 脚本加载失败如何重试

JS 脚本加载失败如何重试

作者: Cherry丶小丸子 | 来源:发表于2024-07-24 19:28 被阅读0次
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        const backupDomains = ["123.cn", "456.com", "789.net"];
        const nextDomain = {};
        window.addEventListener("error", e => {
            console.log(e);
            if(e instanceof ErrorEvent || e.target.tagName !== "SCRIPT") {
                return;
            }
            const url = new URL(e.target.src);
            const pathname = url.pathname;
            if(!nextDomain[pathname]) {
                nextDomain[pathname] = 0;
            }
            const index = nextDomain[pathname];
            if(index >= backupDomains.length) {
                return;
            }
            const domain = backupDomains[index];
            url.hostname = domain;
            const newUrl = url.toString();
            document.write(`\<script src="${newUrl}">\<\/script>`);
            nextDomain[pathname]++;
        }, true);
    </script>
</head>
一、script标签特性

① script 标签默认是同步加载的。当 HTML 页面在加载的过程中,遇到了一个 script 标签,就会中断 HTML 页面的加载,然后根据对应的 src 地址向服务器发起请求,当对应的 javascript 脚本加载完成后,HTML 页面仍然不能加载,还必须等加载的 javascript 脚本执行完成后,HTML 页面才能继续往下加载。

② 当遇到 script 标签的时候会立即渲染一次。当 HTML 页面加载的过程中,遇到了一个 script 标签,如果之前已经加载了部分 HTML 内容,那么会先将之前加载的 HTML 内容渲染出来,然后再去加载对应的 javascript 脚本。

二、script 标签优化

script 标签默认是同步加载的,但是其提供了一些属性可以变成异步加载,如: async、defer、type=“module”

① async: 异步加载对应的 javascript 脚本,不阻塞 HTML 页面的渲染,当对应的 javascript 加载完成后,如果此时 HTML 页面还未加载完成,那么会阻塞页面的渲染,等 javascript 执行完成后再继续 HTML 页面的加载。

② defer: 异步加载对应的 javascript 脚本,不阻塞 HTML 页面的渲染,当对应的 javascript 加载完成后,如果此时 HTML 页面还未加载完成,那么不会阻塞页面的渲染,等 HTML 页面加载完成后再接着执行加载完成的 javascript 脚本。

③ type=“module”: 也是能起到异步加载的效果,效果同 defer,不过其可以配合 async 属性让 javascript 加载完成后立即执行。

相关文章

  • JavaScript补充

    01-延迟和异步加载JS 如何延迟加载JS:defer defer:js脚本可以延迟到文档完全被解析后执行 如何异...

  • 最简单的状态切换布局

    功能简介 正在加载数据 数据加载失败 数据加载为空 网络加载失败 重试点击事件 支持自定义布局 效果图展示 最简单...

  • 浏览器加载机制&白屏和FOUC演示

    1、如何异步加载脚本? 一般情况下,浏览器在加载js文件时,会阻塞其他组件的加载,因为js可能会改变页面结构或js...

  • js 动态加载

    js 脚本懒加载,类似于webpack import()方法,可以适用于静态js文件的加载 脚本文件 使用方式,封...

  • jspath学习资源和脚本编写

    一) 加载js 和 编写js 的过程 将js 文件加入到项目中 加载js 代码 编写脚本 fixInstance...

  • 浏览器性能提升--js加载优化

    动态加载js脚本函数封装优点:js代码加载不阻塞浏览器其他的执行

  • 异步加载JS脚本

    异步处理外部脚本总结 Dynamic Script Element 通常我们加载JS脚本...

  • js加载执行

    js性能--加载执行 [TOC] 加载脚本的方式 脚本位置 HTML4规范指出,< script >标签可放在< ...

  • (转)LABJS源码浅析

    LABJS源码浅析 LABjs里的动态加载脚本文件,是指页面的js脚本执行时,通过多种方法去加载外部的js(主要区...

  • JavaScript 性能优化小记

    加载与运行 延期脚本 js文件要在dom加载完成时才会被下载 动态脚本元素 var script= d...

网友评论

      本文标题:JS 脚本加载失败如何重试

      本文链接:https://www.haomeiwen.com/subject/hlrphjtx.html