操作
Enhancement(機能追加・改善) #3650
未完了#1859 での修正においてコミュニティカテゴリのソートのパフォーマンス向上の対応を行う
開始日:
2014-07-08
期日:
進捗率:
0%
予定工数:
説明
概要¶
https://redmine.openpne.jp/issues/1859#note-8 を引用
このあたりが非効率な気がしました. 一旦ルートとその子供をそれぞれ取る必要はなく,ソートされた状態のルートから ソートされた子供が取得できるため,これを順番に配列に追加してゆけば問題ないのではないかと思います. パフォーマンスについては,DB 接続やソートのオーダーを無視したとして,下記のものだと 子供の数 m と 親の数 n としたときにビックオー記法で O(n+m) となります.これはおそらく O(m) になるものと思います.実際に測定しないと効果がわからいませんが,コード上ではここに記述したとおりの解釈となると思います. lib/model/doctrine/CommunityCategoryTable.class.php 52 public function getAllChildren($checkIsAllowMemberCommunity = false) 53 { 54 $roots = $this->retrieveAllRoots(); 55 $children = $this->retrieveAllChildren(); 56 57 // sort by root category 58 $temp = array(); 59 foreach ($children as $child) 60 { 61 if ($checkIsAllowMemberCommunity && !$child->getIsAllowMemberCommunity()) 62 { 63 continue; 64 } 65 $temp[$child->getTreeKey()][] = $child; 66 } 67 68 $data = array(); 69 foreach ($roots as $root) 70 { 71 if (isset($temp[$root->getId()])) 72 { 73 $data = array_merge($data, $temp[$root->getId()]); 74 } 75 } 76 77 $collection = new Doctrine_Collection($this); 78 $collection->setData($data); 79 80 return $collection; 81 }
仕様¶
操作