2011/12/14 15:38
|
マイサイト開発室別室
|
XCL 2.2 の高速化をもう少し
設定データ (config) の読み出し (getConfigByCat メソッド) は、XoopsObject をいろいろ持ってまわってるけど、結局、名前 (conf_name) と値 (conf_value) の連想配列を作っているだけだ。
元々の DB へ格納している値をそのまま渡しても結果的に同じことなのでショートカットしてやる。
[code lang=diff]--- kernel/config.php (revision 1067)
+++ kernel/config.php (working copy)
@@ -211,7 +211,7 @@
*/
function &getConfigsByCat($category, $module = 0)
{
- static $_cachedConfigs;
+ static $_cachedConfigs=array();
if (!empty($_cachedConfigs[$module][$category])) {
return $_cachedConfigs[$module][$category];
} else {
@@ -220,14 +220,20 @@
if (!empty($category)) {
$criteria->add(new Criteria('conf_catid', (int)$category));
}
- $configs =& $this->getConfigs($criteria, true);
- if (is_array($configs)) {
- foreach (array_keys($configs) as $i) {
- $conf = &$configs[$i];
- $ret[$conf->getVar('conf_name')] = $conf->getConfValueForOutput();
- }
- }
- $_cachedConfigs[$module][$category] =& $ret;
+
+ // get config values
+ $configs = array();
+ $db = $this->_cHandler->db;
+ $sql = 'SELECT conf_name,conf_value FROM '.$db->prefix('config');
+ $sql .= ' '.$criteria->renderWhere();
+ $sql .= ' ORDER BY conf_order ASC';
+ $result = $db->query($sql);
+ if ($result) {
+ while (list($name, $value) = $db->fetchRow($result)) {
+ $ret[$name] = $value;
+ }
+ $_cachedConfigs[$module][$category] =& $ret;
+ }
return $ret;
}
}
|
2011/11/27 13:15
|
マイサイト開発室別室
|
事前の言語指定
XCL は、DB と接続する文字コードを、設定した言語に基き決定する。このため、接続文字コードを決めるためには DB に一度アクセスしなければならない。
一方、XOOPS 2.5 は DB との接続は UTF-8 固定になので、設定言語を先に取得する必要がない。
言語なんてそうそう切り替えて使うものでもないので、これを固定してしまえば SQL 1つ分高速化できる。そういう些細な preload を書いてみた。
PreLanguageSetup.class.php
mRoot->mDelegateManager->add( 'Legacy_Controller.GetLanguageName' , array( &$this , 'GetLanguageName' ) ) ;
}
function GetLanguageName( &$language )
{
if (empty($language)) {
$language = 'ja_utf8'; // your language
}
}
}
10ms に満たないので、preload のオーバーヘッドもあって、あまり意味はないかも。
|