1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-19 05:12:41 +01:00

Fix file URI perf regression

Summary:
The CSRF changes meant that we can't generate a file URI with just its PHID
anymore, and converted a mathematical function into a service call.
Unfortunately, this caused massive perf problems in some parts of the
application, critically handles, where loading N users became N single gets.
Derp derp derp. Remedy this by doing a single multiget. This substantially
improves performance of many interfaces, particularly the Maniphest task list.

I need to go through the rest of the PhabricatorFileURI callsites and get rid of
them, but I think this is the most substantive one.

Test Plan: Profiled Maniphest task list, queries went from >100 to a handful.
Explosion of multiderp. :/ Looked at some views with profile photos to verify
they still render accurately.

Reviewers: jungejason, nh, tuomaspelkonen, aran

Reviewed By: aran

CC: aran

Differential Revision: 921
This commit is contained in:
epriestley 2011-09-13 08:08:31 -07:00
parent 888af7309a
commit 03fb1887d3
2 changed files with 15 additions and 5 deletions

View file

@ -132,6 +132,17 @@ class PhabricatorObjectHandleData {
$users = $object->loadAllWhere('phid IN (%Ls)', $phids); $users = $object->loadAllWhere('phid IN (%Ls)', $phids);
$users = mpull($users, null, 'getPHID'); $users = mpull($users, null, 'getPHID');
$image_phids = mpull($users, 'getProfileImagePHID');
$image_phids = array_unique(array_filter($image_phids));
$images = array();
if ($image_phids) {
$images = id(new PhabricatorFile())->loadAllWhere(
'phid IN (%Ls)',
$image_phids);
$images = mpull($images, 'getViewURI', 'getPHID');
}
foreach ($phids as $phid) { foreach ($phids as $phid) {
$handle = new PhabricatorObjectHandle(); $handle = new PhabricatorObjectHandle();
$handle->setPHID($phid); $handle->setPHID($phid);
@ -148,10 +159,9 @@ class PhabricatorObjectHandleData {
$handle->setAlternateID($user->getID()); $handle->setAlternateID($user->getID());
$handle->setComplete(true); $handle->setComplete(true);
$img_phid = $user->getProfileImagePHID(); $img_uri = idx($images, $user->getProfileImagePHID());
if ($img_phid) { if ($img_uri) {
$handle->setImageURI( $handle->setImageURI($img_uri);
PhabricatorFileURI::getViewURIForPHID($img_phid));
} }
} }
$handles[$phid] = $handle; $handles[$phid] = $handle;

View file

@ -7,7 +7,7 @@
phutil_require_module('phabricator', 'applications/differential/constants/revisionstatus'); phutil_require_module('phabricator', 'applications/differential/constants/revisionstatus');
phutil_require_module('phabricator', 'applications/files/uri'); phutil_require_module('phabricator', 'applications/files/storage/file');
phutil_require_module('phabricator', 'applications/maniphest/constants/owner'); phutil_require_module('phabricator', 'applications/maniphest/constants/owner');
phutil_require_module('phabricator', 'applications/maniphest/constants/status'); phutil_require_module('phabricator', 'applications/maniphest/constants/status');
phutil_require_module('phabricator', 'applications/phid/constants'); phutil_require_module('phabricator', 'applications/phid/constants');