操作
Backport(バックポート) #4038
完了プラグインチャンネルサーバに接続できない場合に管理画面のプラグインリスト画面が表示できない場合がある
開始日:
2016-11-14
期日:
進捗率:
100%
予定工数:
説明
概要¶
プラグインチャンネルサーバに接続できない場合に管理画面のプラグインリスト画面(/pc_backend.php/plugin/list)が表示できない場合がある.
具体的には,インストールしているプラグインが多い状態で plugins.openpne.jp に接続できない場合に実行時間が大きくなり,設定によっては画面がレンダリングされない.
原因¶
プラグインリスト画面(/pc_backend.php/plugin/list)を表示する際,コード部としては下記部分を通るが,それぞれのプラグインについてインスタンスを生成しようとする.このとき,各生成プロセスでは registerChannel() を呼び出しており,ここで数秒ほどブロックされ,例外を握りつぶした後処理を終了して次のインスタンス生成処理に移る.このプロセスが全プラグインに対して行われるため,全体として実行時間が大きくなって表示が遅くなり,数が多い場合には表示されない.
lib/plugin/opInstalledPluginManager.class.php 67 public function getInstalledPlugins() 68 { 69 $result = array(); 70 71 $plugins = sfContext::getInstance()->getConfiguration()->getAllOpenPNEPlugins(); 72 foreach ($plugins as $pluginName) 73 { 74 $result[$pluginName] = $this->getPluginInstance($pluginName); 75 } 76 77 return $result; 78 }
lib/plugin/opPluginManager.class.php 50 try 51 { 52 $environment->registerChannel($this->channel, true); 53 } 54 catch (sfPluginException $e) {}
操作