From: Kunal Mehta Date: Mon, 13 Aug 2018 01:57:39 +0000 (-0700) Subject: Add benchmark script demonstrating TitleValue is slower than Title X-Git-Tag: 1.34.0-rc.0~4472^2 X-Git-Url: https://git.cyclocoop.org/%7B%24www_url%7Dadmin/compta/comptes/ajouter.php?a=commitdiff_plain;h=7c5a5fe93c3ef1d380d2b894b1f459d8835d2d58;p=lhc%2Fweb%2Fwiklou.git Add benchmark script demonstrating TitleValue is slower than Title Change-Id: I9fe5b35f0f5196830cf75eae33195d14d0a66238 --- diff --git a/autoload.php b/autoload.php index feddcddd0b..d3ab3af542 100644 --- a/autoload.php +++ b/autoload.php @@ -200,6 +200,7 @@ $wgAutoloadLocalClasses = [ 'BenchmarkPurge' => __DIR__ . '/maintenance/benchmarks/benchmarkPurge.php', 'BenchmarkSanitizer' => __DIR__ . '/maintenance/benchmarks/benchmarkSanitizer.php', 'BenchmarkTidy' => __DIR__ . '/maintenance/benchmarks/benchmarkTidy.php', + 'BenchmarkTitleValue' => __DIR__ . '/maintenance/benchmarks/benchmarkTitleValue.php', 'Benchmarker' => __DIR__ . '/maintenance/benchmarks/Benchmarker.php', 'BitmapHandler' => __DIR__ . '/includes/media/BitmapHandler.php', 'BitmapHandler_ClientOnly' => __DIR__ . '/includes/media/BitmapHandler_ClientOnly.php', diff --git a/maintenance/benchmarks/benchmarkTitleValue.php b/maintenance/benchmarks/benchmarkTitleValue.php new file mode 100644 index 0000000000..c60f4bbe82 --- /dev/null +++ b/maintenance/benchmarks/benchmarkTitleValue.php @@ -0,0 +1,136 @@ + + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + */ + +use MediaWiki\MediaWikiServices; + +require_once __DIR__ . '/Benchmarker.php'; + +/** + * Maintenance script that benchmarks TitleValue vs Title. + * + * @ingroup Benchmark + */ +class BenchmarkTitleValue extends Benchmarker { + + /** + * @var TitleFormatter + */ + private $titleFormatter; + /** + * @var TitleParser + */ + private $titleParser; + + /** + * @var string + */ + private $dbKey = 'FooBar'; + /** + * @var TitleValue + */ + private $titleValue; + /** + * @var Title + */ + private $title; + + /** + * @var string + */ + private $toParse; + + public function __construct() { + parent::__construct(); + $this->addDescription( 'Benchmark TitleValue vs Title.' ); + } + + public function execute() { + $this->titleFormatter = MediaWikiServices::getInstance()->getTitleFormatter(); + $this->titleParser = MediaWikiServices::getInstance()->getTitleParser(); + $this->titleValue = $this->constructTitleValue(); + $this->title = $this->constructTitle(); + $this->toParse = 'Category:FooBar'; + $this->bench( [ + [ + 'function' => [ $this, 'constructTitleValue' ], + ], + [ + 'function' => [ $this, 'constructTitle' ], + ], + [ + 'function' => [ $this, 'constructTitleSafe' ], + ], + [ + 'function' => [ $this, 'getPrefixedTextTitleValue' ], + ], + [ + 'function' => [ $this, 'getPrefixedTextTitle' ], + ], + [ + 'function' => [ $this, 'parseTitleValue' ], + 'setup' => [ $this, 'randomize' ], + ], + [ + 'function' => [ $this, 'parseTitle' ], + 'setup' => [ $this, 'randomize' ], + ], + ] ); + } + + /** + * Use a different dbKey each time to avoid influence of Title caches + */ + protected function randomize() { + $this->dbKey = ucfirst( wfRandomString( 10 ) ); + } + + protected function constructTitleValue() { + return new TitleValue( NS_CATEGORY, $this->dbKey ); + } + + protected function constructTitle() { + return Title::makeTitle( NS_CATEGORY, $this->dbKey ); + } + + protected function constructTitleSafe() { + return Title::makeTitleSafe( NS_CATEGORY, $this->dbKey ); + } + + protected function getPrefixedTextTitleValue() { + // This is really showing TitleFormatter aka MediaWikiTitleCodec perf + return $this->titleFormatter->getPrefixedText( $this->titleValue ); + } + + protected function getPrefixedTextTitle() { + return $this->title->getPrefixedText(); + } + + protected function parseTitleValue() { + // This is really showing TitleParser aka MediaWikiTitleCodec perf + $this->titleParser->parseTitle( 'Category:' . $this->dbKey, NS_MAIN ); + } + + protected function parseTitle() { + Title::newFromText( 'Category:' . $this->dbKey ); + } +} + +$maintClass = BenchmarkTitleValue::class; +require_once RUN_MAINTENANCE_IF_MAIN;