From 2e1c00195b006d6d2abab2c902fd1aae1c729d8b Mon Sep 17 00:00:00 2001 From: Shota Nozaki Date: Tue, 15 Dec 2015 22:47:44 +0900 Subject: [PATCH] Add benckmarks --- .travis.yml | 4 +- benchmarks/AuraDiEvent.php | 83 ++++++++++++++----------- benchmarks/AurynDiEvent.php | 25 ++++++++ benchmarks/BrickDiEvent.php | 73 ++++++++++++++++++++++ benchmarks/IlluminateContainerEvent.php | 23 +++++++ benchmarks/LeagueDiEvent.php | 25 ++++++++ benchmarks/RayDiEvent.php | 25 +++++--- benchmarks/ZendDiEvent.php | 27 ++++++++ composer.json | 17 +++-- 9 files changed, 250 insertions(+), 52 deletions(-) create mode 100644 benchmarks/AurynDiEvent.php create mode 100644 benchmarks/BrickDiEvent.php create mode 100644 benchmarks/IlluminateContainerEvent.php create mode 100644 benchmarks/LeagueDiEvent.php create mode 100644 benchmarks/ZendDiEvent.php diff --git a/.travis.yml b/.travis.yml index 0dfd61f..594cfab 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,8 +14,8 @@ cache: before_script: - sudo apt-get -qq update && sudo apt-get -qq install graphviz - - sh -c "if [ $TRAVIS_PHP_VERSION != 'hhvm' ]; then if [ ${TRAVIS_PHP_VERSION%%.*} -ge 7 ]; then echo "yes\n" | pecl install apcu; else echo "yes\n" | pecl install apcu-4.0.10; fi; echo 'extension=apcu.so' >> ./php.ini; else echo 'extension=apc.so' >> ./php.ini; fi" - - composer install --prefer-source + - sh -c "if [ $TRAVIS_PHP_VERSION != 'hhvm' ]; then if [ ${TRAVIS_PHP_VERSION//./} -ge 70 ]; then echo "yes\n" | pecl install apcu; else echo "yes\n" | pecl install apcu-4.0.10; fi; echo 'extension=apcu.so' >> ./php.ini; else echo 'extension=apc.so' >> ./php.ini; fi" + - composer install --prefer-source --ignore-platform-reqs - sh -c "if [ $TRAVIS_PHP_VERSION != 'hhvm' ]; then phpenv config-add ./php.ini; fi" script: diff --git a/benchmarks/AuraDiEvent.php b/benchmarks/AuraDiEvent.php index 4c02f29..eb3a916 100644 --- a/benchmarks/AuraDiEvent.php +++ b/benchmarks/AuraDiEvent.php @@ -4,7 +4,7 @@ use Athletic\AthleticEvent; use Aura\Di\Container; -use Aura\Di\Forge; +use Aura\Di\Factory; use Aura\Di\Config; use Emonkak\Di\Benchmarks\Fixtures\Foo; @@ -15,42 +15,53 @@ class AuraDiEvent extends AthleticEvent */ public function get() { - $container = new Container(new Forge(new Config())); + $container = new Container(new Factory()); - $container->set('Emonkak\Di\Benchmarks\Fixtures\FooInterface', $container->lazyNew('Emonkak\Di\Benchmarks\Fixtures\Foo')); - $container->params['Emonkak\Di\Benchmarks\Fixtures\Foo'] = [ - 'bar' => $container->lazyNew('Emonkak\Di\Benchmarks\Fixtures\Bar'), - 'baz' => $container->lazyNew('Emonkak\Di\Benchmarks\Fixtures\Baz'), - ]; - - $container->set('Emonkak\Di\Benchmarks\Fixtures\BarInterface', $container->lazyNew('Emonkak\Di\Benchmarks\Fixtures\Bar')); - $container->params['Emonkak\Di\Benchmarks\Fixtures\Bar'] = [ - 'qux' => $container->lazyNew('Emonkak\Di\Benchmarks\Fixtures\Qux'), - 'quux' => $container->lazyNew('Emonkak\Di\Benchmarks\Fixtures\Quux'), - ]; - - $container->set('Emonkak\Di\Benchmarks\Fixtures\BazInterface', $container->lazyNew('Emonkak\Di\Benchmarks\Fixtures\Baz')); - $container->params['Emonkak\Di\Benchmarks\Fixtures\Baz'] = [ - 'corge' => $container->lazyNew('Emonkak\Di\Benchmarks\Fixtures\Corge'), - 'grault' => $container->lazyNew('Emonkak\Di\Benchmarks\Fixtures\Grault'), - ]; - - $container->set('Emonkak\Di\Benchmarks\Fixtures\Qux', $container->lazyNew('Emonkak\Di\Benchmarks\Fixtures\Qux')); - $container->params['Emonkak\Di\Benchmarks\Fixtures\Qux'] = [ - 'garply' => $container->lazyNew('Emonkak\Di\Benchmarks\Fixtures\Garply'), - ]; - $container->set('Emonkak\Di\Benchmarks\Fixtures\Quux', $container->lazyNew('Emonkak\Di\Benchmarks\Fixtures\Quux')); - $container->params['Emonkak\Di\Benchmarks\Fixtures\Quux'] = [ - 'waldo' => $container->lazyNew('Emonkak\Di\Benchmarks\Fixtures\Waldo'), - ]; - $container->set('Emonkak\Di\Benchmarks\Fixtures\Corge', $container->lazyNew('Emonkak\Di\Benchmarks\Fixtures\Corge')); - $container->params['Emonkak\Di\Benchmarks\Fixtures\Corge'] = [ - 'fred' => $container->lazyNew('Emonkak\Di\Benchmarks\Fixtures\Fred'), - ]; - $container->set('Emonkak\Di\Benchmarks\Fixtures\Grault', $container->lazyNew('Emonkak\Di\Benchmarks\Fixtures\Grault')); - $container->params['Emonkak\Di\Benchmarks\Fixtures\Grault'] = [ - 'plugh' => $container->lazyNew('Emonkak\Di\Benchmarks\Fixtures\Plugh'), - ]; + $container->set('Emonkak\Di\Benchmarks\Fixtures\FooInterface', $container->lazyNew( + 'Emonkak\Di\Benchmarks\Fixtures\Foo', + [ + 'bar' => $container->lazyNew('Emonkak\Di\Benchmarks\Fixtures\Bar'), + 'baz' => $container->lazyNew('Emonkak\Di\Benchmarks\Fixtures\Baz'), + ] + )); + $container->set('Emonkak\Di\Benchmarks\Fixtures\BarInterface', $container->lazyNew( + 'Emonkak\Di\Benchmarks\Fixtures\Bar', + [ + 'qux' => $container->lazyNew('Emonkak\Di\Benchmarks\Fixtures\Qux'), + 'quux' => $container->lazyNew('Emonkak\Di\Benchmarks\Fixtures\Quux'), + ] + )); + $container->set('Emonkak\Di\Benchmarks\Fixtures\BazInterface', $container->lazyNew( + 'Emonkak\Di\Benchmarks\Fixtures\Baz', + [ + 'corge' => $container->lazyNew('Emonkak\Di\Benchmarks\Fixtures\Corge'), + 'grault' => $container->lazyNew('Emonkak\Di\Benchmarks\Fixtures\Grault'), + ] + )); + $container->set('Emonkak\Di\Benchmarks\Fixtures\Qux', $container->lazyNew( + 'Emonkak\Di\Benchmarks\Fixtures\Qux', + [ + 'garply' => $container->lazyNew('Emonkak\Di\Benchmarks\Fixtures\Garply'), + ] + )); + $container->set('Emonkak\Di\Benchmarks\Fixtures\Quux', $container->lazyNew( + 'Emonkak\Di\Benchmarks\Fixtures\Quux', + [ + 'waldo' => $container->lazyNew('Emonkak\Di\Benchmarks\Fixtures\Waldo'), + ] + )); + $container->set('Emonkak\Di\Benchmarks\Fixtures\Corge', $container->lazyNew( + 'Emonkak\Di\Benchmarks\Fixtures\Corge', + [ + 'fred' => $container->lazyNew('Emonkak\Di\Benchmarks\Fixtures\Fred'), + ] + )); + $container->set('Emonkak\Di\Benchmarks\Fixtures\Grault', $container->lazyNew( + 'Emonkak\Di\Benchmarks\Fixtures\Grault', + [ + 'plugh' => $container->lazyNew('Emonkak\Di\Benchmarks\Fixtures\Plugh'), + ] + )); $container->set('Emonkak\Di\Benchmarks\Fixtures\Garply', $container->lazyNew('Emonkak\Di\Benchmarks\Fixtures\Garply')); $container->set('Emonkak\Di\Benchmarks\Fixtures\Waldo', $container->lazyNew('Emonkak\Di\Benchmarks\Fixtures\Waldo')); diff --git a/benchmarks/AurynDiEvent.php b/benchmarks/AurynDiEvent.php new file mode 100644 index 0000000..0faf6b2 --- /dev/null +++ b/benchmarks/AurynDiEvent.php @@ -0,0 +1,25 @@ +alias('Emonkak\Di\Benchmarks\Fixtures\FooInterface', 'Emonkak\Di\Benchmarks\Fixtures\Foo'); + $injector->alias('Emonkak\Di\Benchmarks\Fixtures\BarInterface', 'Emonkak\Di\Benchmarks\Fixtures\Bar'); + $injector->alias('Emonkak\Di\Benchmarks\Fixtures\BazInterface', 'Emonkak\Di\Benchmarks\Fixtures\Baz'); + + $foo = $injector->make('Emonkak\Di\Benchmarks\Fixtures\FooInterface'); + assert($foo instanceof Foo); + } +} diff --git a/benchmarks/BrickDiEvent.php b/benchmarks/BrickDiEvent.php new file mode 100644 index 0000000..1add5b0 --- /dev/null +++ b/benchmarks/BrickDiEvent.php @@ -0,0 +1,73 @@ +bind('Emonkak\Di\Benchmarks\Fixtures\FooInterface')->to('Emonkak\Di\Benchmarks\Fixtures\Foo'); + $container->bind('Emonkak\Di\Benchmarks\Fixtures\BarInterface')->to('Emonkak\Di\Benchmarks\Fixtures\Bar'); + $container->bind('Emonkak\Di\Benchmarks\Fixtures\BazInterface')->to('Emonkak\Di\Benchmarks\Fixtures\Baz'); + $foo = $container->get('Emonkak\Di\Benchmarks\Fixtures\FooInterface'); + assert($foo instanceof Foo); + } + } +} + +class MyPolicy implements InjectionPolicy +{ + /** + * {@inheritdoc} + */ + public function isClassInjected(\ReflectionClass $class) + { + return true; + } + + /** + * {@inheritdoc} + */ + public function isMethodInjected(\ReflectionMethod $method) + { + return false; + } + + /** + * {@inheritdoc} + */ + public function isPropertyInjected(\ReflectionProperty $property) + { + return false; + } + + /** + * {@inheritdoc} + */ + public function getParameterKey(\ReflectionParameter $parameter) + { + return $parameter->getClass()->name; + } + + /** + * {@inheritdoc} + */ + public function getPropertyKey(\ReflectionProperty $property) + { + return $property->getClass()->name; + } +} diff --git a/benchmarks/IlluminateContainerEvent.php b/benchmarks/IlluminateContainerEvent.php new file mode 100644 index 0000000..56d33c8 --- /dev/null +++ b/benchmarks/IlluminateContainerEvent.php @@ -0,0 +1,23 @@ +bind('Emonkak\Di\Benchmarks\Fixtures\FooInterface', 'Emonkak\Di\Benchmarks\Fixtures\Foo'); + $container->bind('Emonkak\Di\Benchmarks\Fixtures\BarInterface', 'Emonkak\Di\Benchmarks\Fixtures\Bar'); + $container->bind('Emonkak\Di\Benchmarks\Fixtures\BazInterface', 'Emonkak\Di\Benchmarks\Fixtures\Baz'); + $foo = $container->make('Emonkak\Di\Benchmarks\Fixtures\FooInterface'); + assert($foo instanceof Foo); + } +} diff --git a/benchmarks/LeagueDiEvent.php b/benchmarks/LeagueDiEvent.php new file mode 100644 index 0000000..65869c9 --- /dev/null +++ b/benchmarks/LeagueDiEvent.php @@ -0,0 +1,25 @@ +bind('Emonkak\Di\Benchmarks\Fixtures\FooInterface', 'Emonkak\Di\Benchmarks\Fixtures\Foo'); + $container->bind('Emonkak\Di\Benchmarks\Fixtures\BarInterface', 'Emonkak\Di\Benchmarks\Fixtures\Bar'); + $container->bind('Emonkak\Di\Benchmarks\Fixtures\BazInterface', 'Emonkak\Di\Benchmarks\Fixtures\Baz'); + + $foo = $container->resolve('Emonkak\Di\Benchmarks\Fixtures\FooInterface'); + assert($foo instanceof Foo); + } +} diff --git a/benchmarks/RayDiEvent.php b/benchmarks/RayDiEvent.php index 1c3481a..3a2172b 100644 --- a/benchmarks/RayDiEvent.php +++ b/benchmarks/RayDiEvent.php @@ -12,12 +12,18 @@ class RayDiEvent extends AthleticEvent { + public function setUp() + { + $injector = new Injector(new MyModule()); + $this->cachedInjector = serialize($injector); + } + /** * @iterations 1000 */ public function get() { - $injector = Injector::create([new MyModule()]); + $injector = new Injector(new MyModule()); $foo = $injector->getInstance('Emonkak\Di\Benchmarks\Fixtures\FooInterface'); assert($foo instanceof Foo); } @@ -27,14 +33,7 @@ public function get() */ public function getWithCache() { - $injector = new CacheInjector( - function() { - return Injector::create([new MyModule()]); - }, - function() {}, - 'ray-di', - extension_loaded('apcu') ? new ApcuCache() : new ApcCache() - ); + $injector = unserialize($this->cachedInjector); $foo = $injector->getInstance('Emonkak\Di\Benchmarks\Fixtures\FooInterface'); assert($foo instanceof Foo); } @@ -47,5 +46,13 @@ protected function configure() $this->bind('Emonkak\Di\Benchmarks\Fixtures\FooInterface')->to('Emonkak\Di\Benchmarks\Fixtures\Foo'); $this->bind('Emonkak\Di\Benchmarks\Fixtures\BarInterface')->to('Emonkak\Di\Benchmarks\Fixtures\Bar'); $this->bind('Emonkak\Di\Benchmarks\Fixtures\BazInterface')->to('Emonkak\Di\Benchmarks\Fixtures\Baz'); + $this->bind('Emonkak\Di\Benchmarks\Fixtures\Qux'); + $this->bind('Emonkak\Di\Benchmarks\Fixtures\Quux'); + $this->bind('Emonkak\Di\Benchmarks\Fixtures\Corge'); + $this->bind('Emonkak\Di\Benchmarks\Fixtures\Grault'); + $this->bind('Emonkak\Di\Benchmarks\Fixtures\Garply'); + $this->bind('Emonkak\Di\Benchmarks\Fixtures\Waldo'); + $this->bind('Emonkak\Di\Benchmarks\Fixtures\Fred'); + $this->bind('Emonkak\Di\Benchmarks\Fixtures\Plugh'); } } diff --git a/benchmarks/ZendDiEvent.php b/benchmarks/ZendDiEvent.php new file mode 100644 index 0000000..90f0e63 --- /dev/null +++ b/benchmarks/ZendDiEvent.php @@ -0,0 +1,27 @@ +instanceManager() + ->addTypePreference('Emonkak\Di\Benchmarks\Fixtures\FooInterface', 'Emonkak\Di\Benchmarks\Fixtures\Foo') + ->addTypePreference('Emonkak\Di\Benchmarks\Fixtures\BarInterface', 'Emonkak\Di\Benchmarks\Fixtures\Bar') + ->addTypePreference('Emonkak\Di\Benchmarks\Fixtures\BazInterface', 'Emonkak\Di\Benchmarks\Fixtures\Baz'); + + $foo = $di->get('Emonkak\Di\Benchmarks\Fixtures\Foo'); + assert($foo instanceof Foo); + } +} diff --git a/composer.json b/composer.json index 73c8db0..a85aa33 100644 --- a/composer.json +++ b/composer.json @@ -21,21 +21,26 @@ }, "require-dev": { "athletic/athletic": "dev-master", - "aura/di": "~1.0", + "aura/di": "~2.0", + "brick/di": "dev-master", "doctrine/annotations": "~1.2", - "doctrine/cache": "~1.4@dev", + "doctrine/cache": "^1.5", "facebook/xhprof": "dev-master", + "league/di": "^1.2", "mnapoli/php-di": "~4.4", "nikic/php-parser": "~1.2", "orno/cache": "~1.0", "orno/di": "~2.3", "phpunit/phpunit": "~4.4", "pimple/pimple": "~3.0", - "ray/di": "~1.0", + "ray/di": "^2.2", + "rdlowrey/auryn": "^1.1", "satooshi/php-coveralls": "dev-master", "symfony/dependency-injection": "~2.6", "symfony/filesystem": "~2.6", - "symfony/process": "~2.6" + "symfony/process": "~2.6", + "zendframework/zend-di": "^2.5", + "illuminate/container": "^5.1" }, "suggest": { "doctrine/annotations": "Used for AnnotationInjectionPolicy", @@ -53,5 +58,7 @@ "Emonkak\\Di\\Benchmarks\\": "benchmarks/", "Emonkak\\Di\\Tests\\": "tests/" } - } + }, + "minimum-stability": "dev", + "prefer-stable": true }