Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: terser/terser
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v5.14.1
Choose a base ref
...
head repository: terser/terser
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v5.14.2
Choose a head ref
  • 4 commits
  • 15 files changed
  • 2 contributors

Commits on Jun 19, 2022

  1. Optimize property access evaluation (#1213)

    Given the input `a.b.c.d.e.f`, the previous code would call `_eval` 57 times:
    
    ```
    1 a.b
    2 a.b.c
    3 a.b
    4 a.b
    5 a.b.c.d
    6 a.b.c
    7 a.b
    8 a.b
    9 a.b.c
    10 a.b
    11 a.b
    12 a.b.c.d.e
    13 a.b.c.d
    14 a.b.c
    15 a.b
    16 a.b
    17 a.b.c
    18 a.b
    19 a.b
    20 a.b.c.d
    21 a.b.c
    22 a.b
    23 a.b
    24 a.b.c
    25 a.b
    26 a.b
    27 a.b.c.d.e.f
    28 a.b.c.d.e
    29 a.b.c.d
    30 a.b.c
    31 a.b
    32 a.b
    33 a.b.c
    34 a.b
    35 a.b
    36 a.b.c.d
    37 a.b.c
    38 a.b
    39 a.b
    40 a.b.c
    41 a.b
    42 a.b
    43 a.b.c.d.e
    44 a.b.c.d
    45 a.b.c
    46 a.b
    47 a.b
    48 a.b.c
    49 a.b
    50 a.b
    51 a.b.c.d
    52 a.b.c
    53 a.b
    54 a.b
    55 a.b.c
    56 a.b
    57 a.b
    ```
    
    The first optimization is to only call `expression._eval(…)` a single time per evaluation of a `AST_PropAccess`. We've already called it to determine if we're a nullish, so there's no reason to do it a second time in the unsafe path. This alone brings us down to 15 calls:
    
    ```
    1 a.b
    2 a.b.c
    3 a.b
    4 a.b.c.d
    5 a.b.c
    6 a.b
    7 a.b.c.d.e
    8 a.b.c.d
    9 a.b.c
    10 a.b
    11 a.b.c.d.e.f
    12 a.b.c.d.e
    13 a.b.c.d
    14 a.b.c
    15 a.b
    ```
    
    But, we can do even better by avoiding the evaluation mid–chain. There's no reason to evaluation unless the evaluation comes from the top of the chain (the rightmost property access). If anything can be optimized, it can optimize while we descend one time from that point. This brings us to 6 evaluations:
    
    ```
    1 a.b
    2 a.b.c.d.e.f
    3 a.b.c.d.e
    4 a.b.c.d
    5 a.b.c
    6 a.b
    ```
    
    (I'm not sure why that first one happens)
    jridgewell authored Jun 19, 2022
    Configuration menu
    Copy the full SHA
    645a092 View commit details
    Browse the repository at this point in the history

Commits on Jun 20, 2022

  1. Configuration menu
    Copy the full SHA
    839b81b View commit details
    Browse the repository at this point in the history

Commits on Jul 13, 2022

  1. 3 Configuration menu
    Copy the full SHA
    a4da734 View commit details
    Browse the repository at this point in the history
  2. 5.14.2

    fabiosantoscode committed Jul 13, 2022
    Configuration menu
    Copy the full SHA
    c5cb19d View commit details
    Browse the repository at this point in the history
Loading
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy