Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

__callStatic: cache created Enum instances #129

Merged
merged 3 commits into from
Nov 14, 2020

Commits on Oct 28, 2020

  1. __callStatic: cache created Enum instances

    Instead of creating a new one each time, cache them.
    
    This only matters if you're creating thousands of these objects.
    
    I've used a small test script:
    
        <?
        require './vendor/autoload.php';
    
        class Fast extends MyCLabs\Enum\Enum {
           protected const VALUE_ONE = "one";
           protected const VALUE_TWO = "two";
        }
    
        $t = microtime(true);
        for ($i = 0; $i < 1000; $i++) {
           Fast::VALUE_ONE();
        }
        $secondsPerOp = (microtime(true) - $t) / 1000;
        var_dump("Microseconds per op: " . $secondsPerOp * 1000000);
    
    Before this change, we were getting about 4us per operation,
    after this, we get about 1us per op, a 4X speedup!!
    
    Note: This only matters if you end up constrcuting thousands of these
    objects. We end up using this library extensively and thus end up
    incurring more than ten milliseconds per request just for Enum
    construction.
    danielbeardsley committed Oct 28, 2020
    Configuration menu
    Copy the full SHA
    82ec4ac View commit details
    Browse the repository at this point in the history

Commits on Oct 29, 2020

  1. Code formatting

    danielbeardsley committed Oct 29, 2020
    Configuration menu
    Copy the full SHA
    facf0bf View commit details
    Browse the repository at this point in the history

Commits on Oct 30, 2020

  1. Enum::CONST(): never return same instance

    Enums shouldn't be compared with ===, but static accessors are now
    cached so === was working. Let's return a clone each time so === won't
    be true for values retrieved from these accessors.
    
    Note: this actually had no impact on the performance gains from a few
    commits ago.
    danielbeardsley committed Oct 30, 2020
    Configuration menu
    Copy the full SHA
    14edb7b View commit details
    Browse the repository at this point in the history