簡體   English   中英

gsap tweenlite / tweenmax垃圾收集,參考和表演

[英]gsap tweenlite/tweenmax garbage collecting, references and performances

我試圖了解使用TweenLite / TweenMax的最佳方法是什么。

  • 使用相同的變量引用所有補間是否有用?
  • 在使用相對公共方法殺死補間之后,我是否必須將引用設置為null以改進垃圾收集處理?

下面是一個評論很好的例子:

$(document).ready(function () {
    var elementOne = $('#elementOne');
    var elementTwo = $('#elementTwo');
    var myTween;

    // is it useful to overwrite the variable?
    myTween = TweenMax.to(elementOne, 1, {
        opacity: 0
    });
    myTween = TweenMax.to(elementTwo, 1, {
        left: 0,
        onComplete: destroy
    });

    function destroy () {
        // suggested on tweenmax docs
        // the console.log still returns me the object
        myTween.kill();
        console.log(myTween);

        // is it required for garbage collecting?
        // now the console.log returns me null
        myTween = null;
        console.log(myTween);

        // and then...jQuery GC friendly remove
        elementOne.remove();
        elementTwo.remove();
    }
});

除了通常對任何JS對象執行的操作之外,您不需要做任何特殊的事情來使gc(或時間軸)可用於gc。 換句話說,如果你在自己的代碼中維護一個實例的引用,它就會一直存在(否則你的代碼就會崩潰)。 但你並不需要專門殺()補間。 GSAP已經付出了很多努力來確保事情得到優化和無頭痛。 必要時,引擎將自動釋放已完成的補間以進行垃圾回收。 但是,如果你維護一個引用並重新啟動()它,那么補間仍然可以工作。

僅僅因為你在補間實例上調用kill(),這並沒有強制瀏覽器運行它的垃圾收集例程。 它也不會使您的變量為空。 這就是JavaScript的工作方式(這是一件好事)。 它與TweenLite / Max無關。

還要記住,您不需要將任何補間實例存儲在變量中。 唯一有用的是,如果您需要稍后控制補間(或將其插入時間軸或類似的東西)。 通常,只需調用TweenMax.to(...)而不將結果存儲在變量中即可。

那清楚了嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM