Aude has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/182455

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.

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(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase 
refs/changes/55/182455/2

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: newchange
Gerrit-Change-Id: Icfd6ca13149987976317675d3394490f2e958011
Gerrit-PatchSet: 2
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Aude <aude.w...@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