Hoo man has submitted this change and it was merged. Change subject: Cache reference and rank messages when formatting statements ......................................................................
Cache reference and rank messages when formatting statements At least in local profiling, calling wfMessage bazillion times to repeatedly get the same messages is expensive. This adds in-process caching of the reference headings and rank messages. With this change, for my large(ish) test item, time it takes to purge goes from 28 seconds to 21 seconds. (without xdebug, goes from 2.3 to 1.7 seconds). In production, due to differences in caching setup (although i also use cdb for localisation cache) etc., the performance impact might not as much but should still help some. Change-Id: Icfd6ca13149987976317675d3394490f2e958011 --- M repo/includes/View/ClaimHtmlGenerator.php 1 file changed, 47 insertions(+), 9 deletions(-) Approvals: Jeroen De Dauw: Looks good to me, approved jenkins-bot: Verified diff --git a/repo/includes/View/ClaimHtmlGenerator.php b/repo/includes/View/ClaimHtmlGenerator.php index 4f21031..3596303 100644 --- a/repo/includes/View/ClaimHtmlGenerator.php +++ b/repo/includes/View/ClaimHtmlGenerator.php @@ -38,6 +38,16 @@ private $snakHtmlGenerator; /** + * @var string[] + */ + private $referenceHeadings = array(); + + /** + * @var string[] + */ + private $statementRankText = array(); + + /** * @param TemplateFactory $templateFactory * @param SnakHtmlGenerator $snakHtmlGenerator */ @@ -88,17 +98,11 @@ $rankHtml = $this->templateFactory->render( 'wb-rankselector', 'ui-state-disabled', 'wb-rankselector-' . $serializedRank, - wfMessage( 'wikibase-statementview-rank-' . $serializedRank )->text() + 'rank', + $this->getStatementRankText( $serializedRank ) ); - $referenceCount = count( $claim->getReferences() ); - - $referencesHeading = wfMessage( - 'wikibase-ui-pendingquantitycounter-nonpending', - wfMessage( - 'wikibase-statementview-referencesheading-pendingcountersubject' - )->numParams( $referenceCount )->text() - )->numParams( $referenceCount )->text(); + $referencesHeading = $this->getReferencesHeading( $claim ); $referencesHtml = $this->getHtmlForReferences( $claim->getReferences() @@ -214,4 +218,38 @@ ); } + /** + * @param Statement $statement + * + * @return string + */ + private function getReferencesHeading( Statement $statement ) { + $referenceCount = count( $statement->getReferences() ); + + if ( !array_key_exists( $referenceCount, $this->referenceHeadings ) ) { + $this->referenceHeadings[$referenceCount] = wfMessage( + 'wikibase-ui-pendingquantitycounter-nonpending', + wfMessage( + 'wikibase-statementview-referencesheading-pendingcountersubject' + )->numParams( $referenceCount )->text() + )->numParams( $referenceCount )->text(); + } + + return $this->referenceHeadings[$referenceCount]; + } + + /** + * @param string $serializedRank + * + * @return string + */ + private function getStatementRankText( $serializedRank ) { + if ( !array_key_exists( $serializedRank, $this->statementRankText ) ) { + $rankText = wfMessage( 'wikibase-statementview-rank-' . $serializedRank )->text(); + $this->statementRankText[$serializedRank] = $rankText; + } + + return $this->statementRankText[$serializedRank]; + } + } -- To view, visit https://gerrit.wikimedia.org/r/182455 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: Icfd6ca13149987976317675d3394490f2e958011 Gerrit-PatchSet: 5 Gerrit-Project: mediawiki/extensions/Wikibase Gerrit-Branch: master Gerrit-Owner: Aude <aude.w...@gmail.com> Gerrit-Reviewer: Adrian Lang <adrian.he...@wikimedia.de> Gerrit-Reviewer: Daniel Kinzler <daniel.kinz...@wikimedia.de> Gerrit-Reviewer: Hoo man <h...@online.de> Gerrit-Reviewer: Jeroen De Dauw <jeroended...@gmail.com> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits