簡體   English   中英

將值和對象傳遞給javascript中的嵌套函數的效率

[英]Efficiency of passing values and objects to nested functions in javascript

我正在嘗試從過程編程轉向javasript中的面向對象編程,因為我需要使代碼更易於理解。

我懷疑出於可讀性的考慮,我需要犧牲一些代碼效率,但是我仍然希望它成為我的編程風格的主要重點。 但是,如果它們效率不高,我真的不在乎新的編程范例。

編碼:

function app(){
    var cnv = document.getElementById('cnv1');
    var ctx = cnv.getContext('2d');

    var life = setup('app');    //builds an object

    cnv.addEventListener('mousemove', MyMouseOver, false);

    //requestAnimationFrame polyfill

    loop();

    function loop() {
        requestAnimationFrame(loop);
        if (life.screen.name == 'loading'){
            runLoading(life.screen);
        } else if (life.screen.name == 'mainMenu'){
            runMainMenu();
        }
    }

    function runLoading(screen){
        //does stuff with the screen object
    }

    function MyMouseOver(MyMouse) {
        if (MyMouse.pageX != undefined && MyMouse.pageY != undefined) {
            var x = MyMouse.pageX;
            var y = MyMouse.pageY;
        }
        else {
            x = MyMouse.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
            y = MyMouse.clientY + document.body.scrollTop + document.documentElement.scrollTop;
        }
        x -= cnv.offsetLeft;
        y -= cnv.offsetTop;
        life.mouseX = x;
        life.mouseY = y;
        console.log(life.mouseX + ' - ' + life.mouseY);
    }
}

我不應該污染全局名稱空間,所以我應該將所有函數放在一個大函數中。 好的,這很有意義。 畢竟,我只打過一次電話。

但這意味着我的所有函數和包含我使用的所有變量的生命對象共享同一作用域-由於重復調用所有這些函數,進一步嵌套將影響性能,因此我可以直接使用生命對象...

...但是在命名沖突的情況下,我無法更改它。

問題:

  1. 查看eventlistner-傳遞事件並將數據直接寫入生活對象或返回值會更好嗎?

自發地,我要說的是,我需要為每次使用時創建和銷毀的功能(可能很多)創建額外的開銷,並使代碼更難閱讀,但也許我錯了。

  1. 我應該停止將值和對象傳遞給函數,而是直接將life對象直接用於我所有函數中的受控數據嗎?

我主要擔心的是,隨着項目的增長,生命對象也會隨之增長...但是這會大大降低性能,還是javascript足以處理對象? 還有其他我想念的嗎?

  1. 看一下循環功能-僅僅傳遞生命對象的屏幕部分會加快對屏幕對象值的處理嗎?

謝謝您的意見。

  1. 它是一個事件偵聽器,因此您不能直接將值返回到主線程。 在緊密循環中,函數創建的開銷可能會很大,但是似乎您並不是每次都在創建事件偵聽器。

  2. 大部分時間足以處理對象。 不要過早地進行優化,了解gc的工作原理。 根據您認為它可能會如何發展來設計代碼。

  3. 是的,如果編譯器沒有自動優化該部分,它將成功。 但是大多數現代編譯器都應該能夠。

暫無
暫無

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

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