プロジェクト

全般

プロフィール

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

未完了

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

Shinichi Urabe さんが10年以上前に追加. ほぼ5年前に更新.

ステータス:
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   }

仕様

kaoru n さんが7年以上前に更新

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

kaoru n さんがほぼ5年前に更新

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

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