Pages that are fast to render can be omitted from the parser cache to preserve disk space and cache write operations. The threshold is configurable per namespace, so the tradeoff can be evaluated based on different access patterns. For example, pages that are accessed rarely, like file description pages on commons, may have a high threshold configured, while pages that are read frequently, like wikipedia articles, may be configured to be always cached, using a 0 threshold. Filtering is based on a time profile recorded in the ParserOutput. A generic mechanism for capturing the timing profile is implemented in the ContentHandler base class. Subclasses may implement a more rigorous capture mechanism. Bug: T346765 Change-Id: I38a6f3ef064f98f3ad6a7c60856b0248a94fe9ac
68 lines
1.8 KiB
PHP
68 lines
1.8 KiB
PHP
<?php
|
|
/**
|
|
* 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.
|
|
* http://www.gnu.org/copyleft/gpl.html
|
|
*
|
|
* @file
|
|
* @ingroup Cache Parser
|
|
*/
|
|
|
|
namespace MediaWiki\Parser;
|
|
|
|
use MediaWiki\Page\PageRecord;
|
|
use ParserOptions;
|
|
use ParserOutput;
|
|
|
|
/**
|
|
* Filter that decides whether a ParserOutput object should be stored in the
|
|
* ParserCache or not. Can be used tweak tradeoffs between storage space and
|
|
* response latency.
|
|
*
|
|
* @since 1.42
|
|
* @package MediaWiki\Parser
|
|
*/
|
|
class ParserCacheFilter {
|
|
|
|
/**
|
|
* @see MainConfigSchema::ParserCacheFilterConfig
|
|
*/
|
|
private array $config;
|
|
|
|
/**
|
|
* @param array[] $config See MainConfigSchema::ParserCacheFilterConfig.
|
|
*/
|
|
public function __construct( array $config ) {
|
|
$this->config = $config;
|
|
}
|
|
|
|
public function shouldCache(
|
|
ParserOutput $output,
|
|
PageRecord $page,
|
|
ParserOptions $options
|
|
): bool {
|
|
$ns = $page->getNamespace();
|
|
$cpuMin = $this->config[ $ns ]['minCpuTime']
|
|
?? ( $this->config['default']['minCpuTime'] ?? 0 );
|
|
|
|
$cpuTime = $output->getTimeProfile( 'cpu' );
|
|
|
|
if ( $cpuTime !== null && $cpuTime < $cpuMin ) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
}
|