什么是最优化的

时间:2016-11-29 08:30:00

标签: javascript

我正在使用mousemove事件,并且每当可能执行时,我想优化它并考虑这两种可能性:

ok = true;

function mousemove(e)
{
    if(ok == true)
    {
        ok = false;
        window.setTimeout(function(){ ok = true; }, 1000/60);//60 FPS
        //Code here
    }
}

lastTime = +new Date();

function mousemove(e)
{
    if(+new Date() - lastTime > 1/60)//60 FPS
    {
        lastTime = +new Date();
        //Code here
    }
}

使用窗口间隔(或超时)或使用时间戳是否更好?

(如果你有另外一个想法,我会接受!)

谢谢!

2 个答案:

答案 0 :(得分:1)

在事件中,我只是更新变量(例如鼠标的位置),在第二个事件(例如requestAnimationFrame)中,我会读取该变量并重置它。因此,在下一个循环中,我检查它是否具有有效值并再次计算(导致用户进一步移动鼠标)或者仍然没有设置(导致用户没有进一步移动鼠标)。

let currentPosition = null;

function onPaint() {
    if(currentPosition !== null) {
        let paintPosition = currentPosition;
        currentPosition = null;

        // ToDo: update visualization by using paintPosition...
    }

    window.requestAnimationFrame(onPaint);
}

function onMouseMove(e) {
    currentPosition = e.position;        
}

onPaint();

答案 1 :(得分:0)

使用间隔意味着具有每秒执行60次的功能,即使未使用鼠标也是如此。 检查鼠标事件回调中是否已经过了正确的时间段仅在需要时执行。

所以我放弃间隔方法(超时相同):

(function () {
    var time=+new Date();
    myElement.addEventListener('mousemove', function () {
        if (time- (+new Date()) < 60) return;
        time=+new Date();
        /* Here my logic*/
    });
})()