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

Reply via email to