首页 > 其他分享 >分帧渲染、分片渲染

分帧渲染、分片渲染

时间:2024-12-14 16:59:16浏览次数:6  
标签:function const 渲染 分片 idle 分帧 return div datas

import { onUnmounted } from "vue"
// 分帧渲染
export function useDefer(maxCount = 100){
    const count = ref(0)
    let raqId = null
    function updateFrame(){
        count.value++
        if(count.value < maxCount){
            raqId = requestAnimationFrame(updateFrame)
        }
    }
    updateFrame()
    onUnmounted(()=>{
        cancelAnimationFrame(raqId)
    })
    return function (n){
        return count.value >= n
    }
}
// 分片渲染(利用浏览器空闲时间执行)
// 第一版
function performChunk(datas){
    if(datas.length === 0)return 
    let i = 0
    function _run(){
        if(i>=datas.length)return 
        requestIdleCallback((idle)=>{
            while(idle.timeRemaining() > 0 && i<datas.length){
                const div = document.createElement('div')
                div.textContent = datas[i]
                document.body.appendChild(div)
                i++
            }
        })
        _run()
    }
    _run()
}
// 第二版
// btn.onclick = ()=>{
//     const taskHandler = (datas,i)=>{
//         const div = document.createElement('div')
//         div.textContent = datas[i]
//         document.body.appendChild(div)
//     }
//     performChunk(100000,taskHandler)
// }
// function performChunk(datas,taskHandler){
//     if(typeof datas === 'number'){
//         datas = {lengths:datas}
//     }
//     if(datas.length === 0)return 
//     let i = 0
//     function _run(){
//         if(i>=datas.length)return 
//         requestIdleCallback((idle)=>{
//             while(idle.timeRemaining() > 0 && i<datas.length){
//                 taskHandler(datas[i],i)
//                 i++
//             }
//         })
//         _run()
//     }
//     _run()
// }


// 第三版
btn.onclick = ()=>{
    const taskHandler = (datas,i)=>{
        const div = document.createElement('div')
        div.textContent = datas[i]
        document.body.appendChild(div)
    }
    const scheduler = (task)=>{
        setTimeout(()=>{
            const start = Data.now()
            task(()=>Date.now() - start<50)
        },100)
    }
    // performChunk(100000,taskHandler,scheduler)
    browserPerformChunk(100000,taskHandler)
}
function performChunk(datas,taskHandler,scheduler){
    if(typeof datas === 'number'){
        datas = {lengths:datas}
    }
    if(datas.length === 0)return 
    let i = 0
    function _run(){
        if(i>=datas.length)return 
        scheduler((isGoOn)=>{
            while(isGoOn() > 0 && i<datas.length){
                taskHandler(datas[i],i)
                i++
            }
        })
        _run()
    }
    _run()
}
function browserPerformChunk(datas,taskHandler){
    const scheduler = (task)=>{
        requestIdleCallback((idle)=>{
            task(()=>idle.timeRemaining() > 0)
        })
    }
    performChunk(datas,taskHandler,scheduler)
}

  

标签:function,const,渲染,分片,idle,分帧,return,div,datas
From: https://www.cnblogs.com/MDGE/p/18606933

相关文章

  • Nuxt.js免费视频教程 开启SSR渲染
    Nuxt.js免费视频教程开启SSR渲染https://www.bilibili.com/video/BV1Xt41117Kg*100节NuxtJS视频教程介绍VM443:101节NuxtJS开发环境安装和HelloWorldVM443:102节NuxtJS目录结构和配置文件VM443:103节NuxtJS常用配置讲解VM443:104节NuxtJS路由讲解和参数传递VM443:1......
  • React服务端渲染框架Next.js入门教程
    React服务端渲染框架Next.js入门教程https://www.bilibili.com/video/BV13441117KK*101节_Next.js简介和手动创建项目02节_creat-next-app快速创建项目03节_Next.js的Page和Conponent使用04节_路由的标签跳转和编程跳转05节_路由跳使用query传递参数和接受参数06节_路由......
  • 转载:【AI系统】完全分片数据并行 FSDP
    上一篇文章内容介绍了通用的数据并行和分布式数据并行,主要是对神经网络模型的输入数据mini-batch进行分布式处理。并且讨论了同步数据并行和异步数据并行的差异点,深入到PyTorchAI框架的弹性数据并行是如何实现与处理的。在本文内容中,将会重点关注AI框架中如何实现针对权重......
  • 前端性能优化实战:从加载到渲染的全链路提速
    "网站太慢了,用户都在抱怨!"上周,我接手了一个正在运行的电商项目,首屏加载时间竟然长达8秒。作为一个对性能有执念的前端开发者,这个数字让我夜不能寐。经过一周的优化,我们把首屏时间压缩到了2秒以内。今天,我想和大家分享这个过程中的实战经验。......
  • 【鸿蒙 ArkTS 开发】网络请求HTTP并渲染列表展示
    1.页面布局和网络请求(展示产品信息)在这个页面中,我们会从网络获取产品数据,并使用List组件展示产品信息。product_list_page.etsimportui;import@ohos.net.http;importohos.agp.components.List;importohos.agp.components.Text;importohos.agp.components.Image;......
  • 图片渲染 API:极速生成电商、社媒、营销、横幅、证书等图片!
    不知道还有没有同学还记得,当时自己开发智能体时,有一个自动生成证书图片的功能,既方便又实用。今天我们就来带大家回顾一下,如何快速生成图片,并且最重要的是,完全无需通过HTTP调用,极大提高了操作的便捷性和效率。那么,今天的主角就是EdgeOne,这是一款不仅具备加速功能,还有强大安全保......
  • c# blazor页面渲染前方法
    在Blazor中,如果你想在组件渲染前执行某些操作,可以使用以下几个生命周期方法:OnInitializedAsync:这个方法在组件初始化时被调用,适合执行异步初始化操作,如从服务器加载数据。这是在组件渲染前调用的,因此你可以在这里进行数据预加载。protectedoverrideasyncTaskOnInitial......
  • 网上三维动画渲染、建模一般是的怎么报价参考!
    网上三维动画渲染、建模的报价依据项目复杂度、所需时间及细节要求而定。简单模型可能按每小时或固定价格收费,复杂项目则根据具体需求定制报价。此外,不同平台与专业程度的服务提供商收费标准差异较大,建议对比多家获取准确报价。一、工作室的报价流程交接流程:先付半成定金——开......
  • 短剧业务产业链涉及的技术系统-场景智能渲染系统
    短剧业务产业链涉及的技术系统中,场景智能渲染系统是其中的一个重要组成部分。这一系统主要应用于短剧的拍摄与制作环节,通过虚拟拍摄技术和XR(扩展现实)技术实现高效的场景渲染和制作。虚拟拍摄技术在短剧制作中的应用越来越广泛。这种技术利用LED显示屏和内容引擎,将预先设计......
  • poi导出word,包含渲染多张图片”一条数据一页“
    maven导入包<!--poi-tl--><dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.12.0</version></dependency>......