Używam JavaScript przy użyciu frameworka Node.js.

Mam następujące oświadczenie if.

if (this.LRR && this.LRR._DataStore === Key) return this.LRR;

I mam:

if ((this.LRR || {})._DataStore === Key) return this.LRR;

Załóżmy, że this.LRR jest obiektem, ale domyślnie null. Który jest bardziej zoptymalizowany?

-1
Smally 2 kwiecień 2020, 12:06

3 odpowiedzi

Najlepsza odpowiedź

Ze względu na ocenę zwarciową wykonanie zatrzymuje się, gdy napotka && po false.

Więc w twoim przypadku pierwszy jest bardziej zoptymalizowany i wydajny

if (this.LRR && this.LRR._DataStore === Key) return this.LRR;
              ^
              |
Execution stops right at here

W drugim przypadku wykonywany jest cały warunek

if ((this.LRR || {})._DataStore === Key) return this.LRR;
// => if (({})._DataStore === Key) return this.LRR;
// => if (undefined === Key) return this.LRR;
                           ^
                           |
Execution stops right at here
1
Pushkin 2 kwiecień 2020, 09:24

To

if (this.LRR && this.LRR._DataStore === Key) return this.LRR;

Ma zwarcie i unika podjęcia nowego obiektu , a następnie przyjmuje właściwość do sprawdzania wartości.

Jeśli to możliwe, możesz wziąć opcjonalny operator łańcuchowy {{ X0}}.

if (this.LRR?._DataStore === Key) return this.LRR;
0
Nina Scholz 2 kwiecień 2020, 09:13

Nie mam node.js, ale to może ci pomóc

optimalisationTest();

function optimalisationTest() {
    let startTime = Date.now();
    console.log(startTime);

    //Test with maybe even 1000000 to check what is faster.
    for (let i = 0; i < 1000; i++) {
        //Test this first. After remove this line below and change it to the other if statement u have. Check what is faster.
        if (this.LRR && this.LRR._DataStore === Key) return this.LRR;
    }

    let endTime = Date.now();
    console.log(endTime);

    //End time - begin time to check how long it took to execute the code.
    console.log(endTime - startTime);
}

Nie jestem pewien, czy twoje stwierdzenie if zadziała więcej niż raz, ale proszę o informację.

1
Allart 2 kwiecień 2020, 09:55