From d8261f06b86579a8fdfbbad8edd78c10bb913f75 Mon Sep 17 00:00:00 2001 From: SerafimArts Date: Mon, 31 Aug 2026 01:09:37 +0300 Subject: [PATCH] Add large payload bench --- tools/phplrt/large-payload-bench.php | 55 ++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 tools/phplrt/large-payload-bench.php diff --git a/tools/phplrt/large-payload-bench.php b/tools/phplrt/large-payload-bench.php new file mode 100644 index 00000000..f3545966 --- /dev/null +++ b/tools/phplrt/large-payload-bench.php @@ -0,0 +1,55 @@ +load(new \SplFileObject(__DIR__ . '/../../doc/grammars/type.pp3')) + ->generate() + ->save(__DIR__ . '/parser.php'); + +$phplrt = require __DIR__ . '/parser.php'; + +// PHPStan +$config = new ParserConfig([]); +$phpstanLexer = new Lexer($config); +$phpstanParser = new TypeParser($config, new ConstExprParser($config)); + + +// ------------- + +const ITS = 10; + +$sample = $sampleType = 'array>>'; +for ($i = 0; $i < 1000; ++$i) { + $sample .= '|' . $sampleType; +} + +// phplrt4 +$before = microtime(true); + +for ($i = 0; $i < ITS; ++$i) { + $phplrt->parse(new StringSource($sample)); +} + + +echo 'phplrt4: ' . number_format((microtime(true) - $before) * 1000, 3) . "ms\n"; + +// phpstan 2.3 +$before = \microtime(true); + +for ($i = 0; $i < ITS; ++$i) { + $phpstanParser->parse(new TokenIterator($phpstanLexer->tokenize($sample))); +} + +echo 'phpstan: ' . number_format((microtime(true) - $before) * 1000, 3) . "ms\n";