mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-23 05:50:55 +01:00
Fix performance issue with large changesets in Differential
Summary: Fixes T3151. Javelin treats a behavior without parameters as a global behavior and invokes it only once no matter how many times it is initialized (this is necessarily correct for any reasonable behavior, as the inputs do not vary). A recent patch changed `differential-dropdown-menus` from a zero-argument global behavior to an implicitly nonzero-argument behavior by adding `pht`. Currently, we initialize the behavior next to dropdown menu creation, so this resulted in `O(N^2)` initializations of the menus. For large diffs, this locks browsers. Instead, initialize outside of the dropdown loop so we ginitialize each menu just once. Test Plan: Viewed a 2,000 file diff without browser lock. Reviewers: wez, vrana, btrahan Reviewed By: wez CC: aran Maniphest Tasks: T3151 Differential Revision: https://secure.phabricator.com/D5885
This commit is contained in:
parent
13464cc568
commit
7c502e3e4e
1 changed files with 3 additions and 4 deletions
|
@ -108,6 +108,9 @@ final class DifferentialChangesetListView extends AphrontView {
|
|||
$changesets = $this->changesets;
|
||||
|
||||
Javelin::initBehavior('differential-toggle-files', array());
|
||||
Javelin::initBehavior(
|
||||
'differential-dropdown-menus',
|
||||
array());
|
||||
|
||||
$output = array();
|
||||
$mapping = array();
|
||||
|
@ -304,10 +307,6 @@ final class DifferentialChangesetListView extends AphrontView {
|
|||
|
||||
$meta['containerID'] = $detail->getID();
|
||||
|
||||
Javelin::initBehavior(
|
||||
'differential-dropdown-menus',
|
||||
array());
|
||||
|
||||
return javelin_tag(
|
||||
'a',
|
||||
array(
|
||||
|
|
Loading…
Reference in a new issue