当前位置: 首页 > article >正文

后盾人JS -- 异步编程,宏任务与微任务

异步加载图片体验JS任务操作

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        function loadImag(src,resolve,reject){
            let image = new Image()
            image.src = src
            image.onload = ()=>{
                resolve(image)
            }
            image.onerror = reject
        }
        loadImag(
            "images/houdunren.png",
            (image)=>{
                document.body.appendChild(image)        //回调方式
            },
            ()=>{
                console.log("加载失败")
            }
        )
    </script>
</body>
</html>

定时器的任务轮询

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
    div{
        background-color: greenyellow;
        width: 200px;
        height: 200px;
        position: relative;
        left: 0;
    }
</style>
<body>
    <div></div>
    <script>
        function interval(callback,delay){
            let id = setInterval(()=>callback(id),delay)
        }
        interval(timeId => {
            const div = document.querySelector("div")
            let left = parseInt(window.getComputedStyle(div).left)
            div.style.left = left + 10 + "px"
            if(left >= 200)
        {
            clearInterval(timeId)
            interval(timeId=>{
                let width = parseInt(window.getComputedStyle(div).width)
                div.style.width = width - 10 + "px"
                if(width<=20)
            {
                clearInterval(timeId)
            }
            },100)
        }
        },50)
        console.log("后盾人.com")
    </script>
</body>
</html>

定时器有任务轮询(因为是异步的),所以肯定是主线程执行完之后才来执行它

通过文件依赖了解任务排序

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        function load(src, resolve) {
            let script = document.createElement("script")
            script.src = src
            script.onload = resolve
            document.body.appendChild(script)
        }
        load("js/hd.js", () => {
            load("js/houdunren.js", () => {
                houdunren()
            })
        })
    </script>
</body>

</html>

这是文件的依赖,学习promise后会让这个更加的简洁

后面就看不懂了

宏任务与微任务

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        setTimeout(()=>{
            console.log("定时器")
        },0)
        Promise.resolve().then(value=>{
            console.log("Promise")
        })
        console.log("后盾人")
    </script>
</body>
</html>

定时器的任务编排

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        setTimeout(()=>{
            console.log("定时器 1")
        },2000)
        setTimeout(()=>{
            console.log("定时器 2")
        },2000)
        console.log("后盾人")
        for(let i = 0;i<1000;i++)
        {
            console.log("")
        }
    </script>
</body>
</html>

时间需要少的先执行

DOM渲染任务是放到最后的,JS是后渲染的

进度条

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
    div{
        width: 100px;
        background-color: greenyellow;
    }
</style>
<body>
    <div id="hd"></div>
    <script>
        function handle(){
            let i = 0
            const hd = document.getElementById('hd');
            (function run(){
                hd.innerHTML = i
                hd.style.width = i + "%"
                if(++i<=100)
            {
                setTimeout(run,20)
            }
            })()
        }
        handle()
    </script>
</body>
</html>

http://www.kler.cn/a/541646.html

相关文章:

  • RDK新一代模型转换可视化工具!!!
  • VMware Workstation创建虚拟机
  • chromium-mojo
  • 分治下的快速排序(典型算法思想)—— OJ例题算法解析思路
  • 将DeepSeek接入Excel实现交互式对话
  • Ruby 日期 时间处理指南
  • HTML之JavaScript对象声明
  • MySQL下载过程
  • Flink内存配置和优化
  • 五十天精通硬件设计第27天-时域频域知识
  • Django中select_related 的作用
  • C++适用于所有输入法的解决方案(切换输入法)
  • GPIO函数详解(二)
  • pytest测试专题 - 1.2 如何获得美观的测试报告
  • 【Vue中BUG解决】npm error path git
  • ThreadLocal 原理?需要注意什么?
  • 自动控制视频讲解
  • CCFCSP备考第二天
  • 2.协同过滤算法
  • 第四期书生大模型实战营-第4关-L2G4000
  • 【RabbitMQ的监听器容器Simple和Direct】 实现和场景区别
  • 计算机视觉的研究方向、发展历程、发展前景介绍
  • Java网络编程学习(一)
  • 【leetcode 28】27.移除元素==双指针==
  • 【系统架构设计师】面向架构评估的质量属性
  • malloc底层原理 brk,sbrk,mmap