On Special:BlankPage I see 24 queries (many to objectcache), but what caught my attention is that this simple query is repeated 4 times:
18 localhost: SELECT actor_id,actor_user,actor_name FROM `actor` WHERE actor_name = 'Developer' LIMIT 1 1.0000ms User::load 21 localhost: SELECT actor_id,actor_user,actor_name FROM `actor` WHERE actor_name = 'Developer' LIMIT 1 0.0000ms User::load 22 localhost: SELECT actor_id,actor_user,actor_name FROM `actor` WHERE actor_name = 'Developer' LIMIT 1 0.0000ms User::load 23 localhost: SELECT actor_id,actor_user,actor_name FROM `actor` WHERE actor_name = 'Developer' LIMIT 1 0.0000ms User::load
This seems wasteful. Why isn't the user object caching this properly?
--- a/includes/user/User.php +++ b/includes/user/User.php @@ -374,7 +374,7 @@ class User implements IDBAccessObject, UserIdentity { 'actor', [ 'actor_id', 'actor_user', 'actor_name' ], $this->mFrom === 'name' ? [ 'actor_name' => $this->mName ] : [ 'actor_id' => $this->mActorId ], - __METHOD__, + wfGetAllCallers( 6 ),
=> SkinTemplate->prepareQuickTemplate/Skin->bottomScripts/OutputPage->getBottomScripts/OutputPage->getRlClient/ResourceLoaderWikiModule::preloadTitleInfo/ResourceLoaderUserStylesModule->getPages/User->isAnon/User->isRegistered/User->getId/User->load 41 SELECT actor_id,actor_user,actor_name FROM `actor` WHERE actor_name = 'Admin' LIMIT 1 User::load 42 SELECT user_id,user_name,user_real_name,user_email,user_touched,user_token, user_email_authenticated,user_email_token,user_email_token_expires,user_registration,user_editcount,user_actor.actor_id FROM `user` JOIN `actor` `user_actor` ON ((user_actor.actor_user = user_id)) WHERE user_id = 1 LIMIT 1 User::loadFromDatabase 43 SELECT ug_user,ug_group,ug_expiry FROM `user_groups` WHERE ug_user = 1 UserGroupMembership::getMembershipsForUser => OutputPage->getBottomScripts/ResourceLoaderClientHtml->getBodyHtml/ResourceLoaderClientHtml->getData/ResourceLoaderWikiModule->isKnownEmpty/ResourceLoaderWikiModule->getTitleInfo/ResourceLoaderUserModule->getPages/User->isAnon/User->isRegistered/User->getId/User->load 45 SELECT actor_id,actor_user,actor_name FROM `actor` WHERE actor_name = 'Admin' LIMIT 1 User::load 46 SELECT user_id,user_name,user_real_name,user_email,user_touched,user_token, user_email_authenticated,user_email_token,user_email_token_expires,user_registration,user_editcount,user_actor.actor_id FROM `user` JOIN `actor` `user_actor` ON ((user_actor.actor_user = user_id)) WHERE user_id = 1 LIMIT 1 User::loadFromDatabase 47 SELECT ug_user,ug_group,ug_expiry FROM `user_groups` WHERE ug_user = 1 UserGroupMembership::getMembershipsForUser => OutputPage->headElement/ResourceLoaderClientHtml->getHeadHtml/ResourceLoaderClientHtml->getData/ResourceLoaderWikiModule->isKnownEmpty/ResourceLoaderWikiModule->getTitleInfo/ResourceLoaderUserModule->getPages/User->isAnon/User->isRegistered/User->getId/User->load 48 SELECT actor_id,actor_user,actor_name FROM `actor` WHERE actor_name = 'Admin' LIMIT 1 User::load 49 SELECT user_id,user_name,user_real_name,user_email,user_touched,user_token, user_email_authenticated,user_email_token,user_email_token_expires,user_registration,user_editcount,user_actor.actor_id FROM `user` JOIN `actor` `user_actor` ON ((user_actor.actor_user = user_id)) WHERE user_id = 1 LIMIT 1 User::loadFromDatabase 50 SELECT ug_user,ug_group,ug_expiry FROM `user_groups` WHERE ug_user = 1 UserGroupMembership::getMembershipsForUser => ResourceLoader->makeModuleResponse/ResourceLoaderModule->getModuleContent/ResourceLoaderModule->buildContent/ResourceLoaderUserOptionsModule->getScript/User->getEditToken/User->getEditTokenObject/User->isAnon/User->isRegistered/User->getId/User->load 51 SELECT actor_id,actor_user,actor_name FROM `actor` WHERE actor_name = 'Admin' LIMIT 1 User->load 52 SELECT user_id,user_name,user_real_name,user_email,user_touched,user_token, user_email_authenticated,user_email_token,user_email_token_expires,user_registration,user_editcount,user_actor.actor_id FROM `user` JOIN `actor` `user_actor` ON ((user_actor.actor_user = user_id)) WHERE user_id = 1 LIMIT 1 User::loadFromDatabase