Page MenuHomePhabricator

Reduce parser creation in service wiring code
Closed, ResolvedPublic

Description

Creating the MediaWiki parser is an expensive operation as it is a heavy class with many dependencies (Some infos at T236811).

So the parser creation should be avoided during service creation and should be done when needed.

This includes the call to MediaWikiServices::getParser() from service wiring files like core's includes/ServiceWiring.php.
This includes the use of Parser in object specs, for example for api modules or special pages, but also other usages of specs to ObjectFactory.
This includes calls to parser factory in construtor of service classes

Always use spec for ParserFactory and store that instance, create the parser when needed via ParserFactory::create, ParserFactory::getMainInstance ParserFactory::getInstance

Searches with false positives:

Event Timeline

Change 942754 had a related patch set uploaded (by Umherirrender; author: Umherirrender):

[mediawiki/core@master] parser: Delay Parser creation in ParsoidSiteConfig/ParsoidDataAccess

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

Change 942755 had a related patch set uploaded (by Umherirrender; author: Umherirrender):

[mediawiki/core@master] api: Use ParserFactory on module creation

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

Change 942756 had a related patch set uploaded (by Umherirrender; author: Umherirrender):

[mediawiki/core@master] preferences: Pass ParserFactory to DefaultPreferencesFactory

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

Change 942759 had a related patch set uploaded (by Umherirrender; author: Umherirrender):

[mediawiki/extensions/AbuseFilter@master] Pass ParserFactory to LazyVariableComputer

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

Change 942760 had a related patch set uploaded (by Umherirrender; author: Umherirrender):

[mediawiki/extensions/FileImporter@master] Pass ParserFactory to CategoryExtractor

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

Change 942761 had a related patch set uploaded (by Umherirrender; author: Umherirrender):

[mediawiki/extensions/Translate@master] Pass ParserFactory to Special:ExportTranslations

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

Change 942762 had a related patch set uploaded (by Umherirrender; author: Umherirrender):

[mediawiki/extensions/Wikibase@master] client: Pass ParserFactory to ApiFormatReference

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

Change 942764 had a related patch set uploaded (by Umherirrender; author: Umherirrender):

[mediawiki/core@master] specials: Use ParserFactory on special page creation

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

Change 942765 had a related patch set uploaded (by Umherirrender; author: Umherirrender):

[mediawiki/core@master] Rest: Pass ParserFactory to CompareHandler

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

Change 942759 merged by jenkins-bot:

[mediawiki/extensions/AbuseFilter@master] Pass ParserFactory to LazyVariableComputer

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

Change 942760 merged by jenkins-bot:

[mediawiki/extensions/FileImporter@master] Pass ParserFactory to CategoryExtractor

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

Change 942761 merged by jenkins-bot:

[mediawiki/extensions/Translate@master] Pass ParserFactory to Special:ExportTranslations

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

Change 942762 merged by jenkins-bot:

[mediawiki/extensions/Wikibase@master] client: Pass ParserFactory to ApiFormatReference

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

Change 942756 merged by jenkins-bot:

[mediawiki/core@master] preferences: Pass ParserFactory to DefaultPreferencesFactory

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

Change 942764 merged by jenkins-bot:

[mediawiki/core@master] specials: Use ParserFactory on special page creation

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

Change 942765 merged by jenkins-bot:

[mediawiki/core@master] Rest: Pass ParserFactory to CompareHandler

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

Change 942755 merged by jenkins-bot:

[mediawiki/core@master] api: Use ParserFactory on module creation

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

Change 942754 merged by jenkins-bot:

[mediawiki/core@master] parser: Delay Parser creation in ParsoidSiteConfig/ParsoidDataAccess

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

Change 964163 had a related patch set uploaded (by Umherirrender; author: Umherirrender):

[mediawiki/extensions/WikiLove@master] api: Use ParserFactory on module creation

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

Change 964170 had a related patch set uploaded (by Umherirrender; author: Umherirrender):

[mediawiki/core@master] doc: Add some @note to the Parser service about usage

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

Change 964163 merged by jenkins-bot:

[mediawiki/extensions/WikiLove@master] api: Use ParserFactory on module creation

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

Change 964170 merged by jenkins-bot:

[mediawiki/core@master] doc: Add some @note to the Parser service about usage

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