プロジェクト

全般

プロフィール

Enhancement(機能追加・改善) #3650

#1859 での修正においてコミュニティカテゴリのソートのパフォーマンス向上の対応を行う

Shinichi Urabeほぼ10年前に追加. 約4年前に更新.

ステータス:
New(新規)
優先度:
Normal(通常)
担当者:
-
対象バージョン:
開始日:
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   }

仕様

履歴

#1 kaoru n約7年前に更新

  • 対象バージョンOpenPNE 3.9.0-old から OpenPNE 3.9.0 に変更

#2 kaoru n約4年前に更新

  • 対象バージョンOpenPNE 3.9.0 から OpenPNE 3.10.x に変更

他の形式にエクスポート: Atom PDF