美文网首页
JS 分时函数性能优化验证 性能提升500%

JS 分时函数性能优化验证 性能提升500%

作者: cinoliu | 来源:发表于2022-01-10 09:14 被阅读0次

1.背景

在一些开发场景中,我们可能会一次性向文档中注入上千个节点,在短时间内向浏览器中大量添加DOM节点可能会让浏览器吃不消,结果往往会让浏览器卡顿或吃不消,解决方案之一便是使用分时函数

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>分时函数</title>
</head>
<body>
    <div>分时函数性能优化验证</div>

    <script>
        // 一次性添加到页面
        const dataSource = new Array(10000).fill('DYBOY');
        // 创建DOM
        const createDiv = (text = 'DYBOY') => {
            const div = document.createElement('div');
            div.innerHTML = text;
            document.body.appendChild(div);
        }
        // 批量添加
        for (data of dataSource) {
            createDiv(data);
        }
    </script>
</body>
</html>
1.png

分时函数的思想就是将一次性执行大量重复操作时,分批次时间周期的进行,这样就可以不阻塞页面首屏的渲染,避免出现假死现象。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>分时函数</title>
</head>
<body>
    <div>分时函数性能优化验证</div>

    <script>
        // 一次性添加到页面
        const dataSource = new Array(10000).fill('DYBOY');
        // 创建DOM
        const createDiv = (text = 'DYBOY') => {
            const div = document.createElement('div');
            div.innerHTML = text;
            document.body.appendChild(div);
        }
        // 批量添加
        // for (data of dataSource) {
        //     createDiv(data);
        // }

        /**
         * 分时函数
         * @param dataSource - 数据数组
         * @param fn - 分时执行的函数
         * @param count - 每分段时间内执行函数的次数
         * @param duration - 分段时长,单位ms
         **/
        const timeChunk = (dataSource, fn, count = 1, duration = 200) => {
            let timer;
            const start = () => {
                const minCount = Math.min(count, dataSource.length);
                for(let i = 0; i < minCount; i++) fn(dataSource.shift());
            }
            return () => {
                timer = setInterval(() => {
                    if (dataSource.length === 0) return clearInterval(timer);
                    start();
                }, duration);
            }
        }

       const newRender = timeChunk(dataSource, createDiv, 100, 300);

       newRender();
    </script>
</body>
</html>

2.png

通过对比可以看到后者经过分时函数的首屏里scripting的时间只有425ms,前者是2410ms,通过分时函数使得首屏性能提节省了500%的时间,非常可观。

相关文章

  • JS 分时函数性能优化验证 性能提升500%

    1.背景 在一些开发场景中,我们可能会一次性向文档中注入上千个节点,在短时间内向浏览器中大量添加DOM节点可能会让...

  • 前端性能优化

    js性能小贴士——优化循环 前端网页与js性能优化 我总结的js性能优化的小知识 提高 web 应用性能之 Jav...

  • 前端性能 优化 大全

    js性能小贴士——优化循环 前端网页与js性能优化 我总结的js性能优化的小知识 提高 web 应用性能之 Jav...

  • 前端进阶(9) - js 性能优化利器:prepack

    js 性能优化利器:prepack 1. js 性能优化 js 性能优化不外乎从三个角度入手: 1.1 开发者在编...

  • 函数节流(throttle)与函数去抖(debounce)

    JavaScript-性能优化,函数节流(throttle)与函数去抖(debounce)JS魔法堂:函数节流(t...

  • 如何提升JavaScript的执行效率

    js优化的总体原则 当需要时才优化 考虑可维护性 提升JS文件的加载性能 加载元素的顺序css文件放在 里,js文...

  • PHP性能优化02

    PHP语言级性能优化 优化点:尽可能减少使用魔法函数 情况描述:PHP提供的魔法函数,性能不佳 为什么性能低? 为...

  • 优化方法

    用户体验优化 图片占位 性能优化 减少标签嵌套 减少dom操作 编写动画使用js内置的函数 使用cdn 使用图片压...

  • Android性能优化 - 消除卡顿

    性能优化系列阅读 Android性能优化 性能优化 - 消除卡顿 性能优化 - 内存优化 性能分析工具 - Tra...

  • Android性能优化 - 内存优化

    性能优化系列阅读 Android性能优化 性能优化 - 消除卡顿 性能优化- 内存优化 性能分析工具 - Trac...

网友评论

      本文标题:JS 分时函数性能优化验证 性能提升500%

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