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:
parent
888af7309a
commit
03fb1887d3
2 changed files with 15 additions and 5 deletions
|
@ -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;
|
||||||
|
|
|
@ -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');
|
||||||
|
|
Loading…
Reference in a new issue