惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
The Cloudflare Blog
大猫的无限游戏
大猫的无限游戏
小众软件
小众软件
V
Visual Studio Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
酷 壳 – CoolShell
酷 壳 – CoolShell
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
月光博客
月光博客
The GitHub Blog
The GitHub Blog
L
LangChain Blog
D
DataBreaches.Net
T
The Blog of Author Tim Ferriss
F
Fortinet All Blogs
博客园 - Franky
阮一峰的网络日志
阮一峰的网络日志
GbyAI
GbyAI
Apple Machine Learning Research
Apple Machine Learning Research
宝玉的分享
宝玉的分享
Engineering at Meta
Engineering at Meta
V
V2EX
MyScale Blog
MyScale Blog

博客园 - howhy

TypeScript any vs unknown 详细对比 TypeScript interface vs type 完整对比 html 元素包含关系 this 指向 空对象 Object.keys for ...in Reflect.ownKeys ...区别 逻辑运算符和空值运算符 运算符优先级 js 类型显式转换 js 方法重载 fetch timeout js 任务顺序执行 暂停 js 并发任务 判断两个对象是否相同 js 动态拦截属性 js 通用动画 js groupby js 防抖和节流 实现 instanceof 操作符 js 单例模式 js 数组去重和扁平方法 js 继承方法 js new的过程实现 js deepCopy js '=='的隐性类型转换规则
js 高级函数
howhy · 2026-02-03 · via 博客园 - howhy
function animation(duration,from,to,handler){
    const dis=to-from;
    const speed=dis/duration;
    const startTime=Date.now();
    let value=from;
    handler(value);
    function _run(){
        const now=Date.now();
        const time=now-startTime;
        if(time>=duration){
            value=to;
            return 
        }
        const d=time*speed;
        value=from+d;
        handler(value);
        requestAnimationFrame(_run);
    }
    requestAnimationFrame(_run);
}

function debounce(fun,delay){
    let timerId=null;
    return function(...args){
        timerId && clearTimeout(timerId);
        timerId=setTimeout(()=>{
            fun.apply(this,args)
        },delay)
        
    }
}

function paralleltask(tasks,parallelCount){
    return new Promise(resolve=>{
        if(tasks.length===0){
            resolve();
            return;
        }
        let nextIndex=0;
        let taskFinish=0;
        function _run(){
            const task=tasks[nextIndex];
            nextIndex++;
            task().then(()=>{
                taskFinish++;
                if(nextIndex<tasks.length){
                    _run();
                }else{
                    if(taskFinish===tasks.length){
                        resolve();
                    }
                }
            })
        }
        for(let i=0;i<parallelCount && i<tasks.length;i++){
            _run();
        }
    })
   
}

function groupby(arr,generatekey){
    const newObj={};
    for(let item of arr){
        const key=generatekey(item);
        if(!newObj[key]){
            newObj[key]=[]
        }
        newObj[key].push(item)
    }
    return newObj
}


function parallelRendertask(taskdatas,renderTask){
    if(taskdatas.length===0){
        return;
    }
    let i=0;
    function _run(){
        if(i===taskdatas.length){
            return;
        }
        requestIdleCallback(idle=>{
            while(idle.timeRemaining()>0 && i<taskdatas.length){
                //做相应的渲染任务
                renderTask(taskdatas[i]);
                i++;
            }
            _run;
        })       
    }
    _run();
}

posted @ 2026-02-03 16:58  howhy  阅读(13)  评论()    收藏  举报