Nucleusの長所と短所
2007年12月17日
Nucleus は、私としてはとてもお気に入りのツールなのだけれど、当然ながら長所もあれば短所もある。最も気に入っているは、プラグインインターフェースが充実していて、プラグインを自分で書けばいろいろなことが出来てしまうところ。反面、これはだめだなぁと思うのは、とにかくSQLクエリーの数が多いこと。デフォルトスキンではせいぜい10回ほどのクエリーの数なのだけれど、プラグインをいくつか入れるとあっという間に100を超えてしまう。
Nucleus は、その設計思想から、軽さが売りである。ところが、利用の仕方によってはその設計思想が逆に災いして、重くなってしまうことが多々ある。こういったことの対策としては、NP_Cache・NP_EzCache・NP_znItemCacheなどのキャッシュ系プラグイン(それぞれ、Radekさん、Andyさん、佐藤(な)さん)を利用して軽くしてしまうのがとりあえずの対処方法といったところ。
根本的にこれを解決する試みとしては、コアでSQLクエリーの結果をキャッシュしてしまおうという方法(hsurさん)や、スキンそのものをPHPで完全に書き換えてしまう方法(ZAPAさん)が報告されている。こういったことを参考に、今後自分としてNucleusとどのように向き合ってゆけばいいのか考えるため、Nucleusの長所と短所を、思いつくままにピックアップしてみた。
Nucleus の長所
・コアが軽量
・スキン→テンプレートという考え方
・プラグインインターフェースが充実している
・オブジェクト指向化が比較的進んでいる
・データベースアクセスの際、PEAR-DB などを使わずにクエリーを直接呼び出しているため、比較的高速
Nucleus の短所
・主だった機能をほぼすべてプラグインに頼っているため、スピードなどがプラグインの性能に大きく左右される
・プラグインで制御できない部分がある(管理画面など)
・オブジェクト指向化が完全でない
・グローバル変数やグローバル関数が多く使われている
・SQL クエリーの呼び出し回数が多い
・サーバーの MySQL の環境によっては、スピードに難がある
・データベースアクセスの際、PEAR-DB などを使わずにクエリーを直接呼び出しているため、MySQL の利用が必須となる
・テンプレートのプロパティが盛りだくさんで、分かりにくい
長所については、これらが長所なのだからNucleusを使っているわけなので、特に議論することは無い。逆に短所については、今後の改善の余地ありの事柄を並べてみた。
短所でもっとも大きな部分を占めるのが、スピードの問題。これは始めに述べた、キャッシュ系のプラグインなどを使うことにより、かなり軽減される。ただ、そういったプラグインを使う場合でも無駄がある部分もあるので、それについては後で述べる。
次に、これはNucleusの大きな特色でもあるプラグインとの兼ね合いについて。例えば、プラグインオプションなどは一つの値を呼び出すたびにSQLクエリーを発行している。これがスピード低下の原因の一つになっている(プラグイン自身でSQLクエリーを発行しているケースについては、Nucleusの問題ではなくてプラグインの問題なので容易に解決できる可能性があり、ここでは取り上げない)。他方で、インターフェースが充実してはいるものの、プラグインでは手が届かないところがたくさんあり、こういった部分はコアを改造するか、コアのアップデートを待つしかないと言う状態になっている。
MySQLについて。現在Nucleusが正式にサポートしているのはMySQLであるが、場合によってはMySQLのスピードがNucleusのスピードを決めてしまうことがある。SQLiteを利用するのは一つの手で、このブログはSQLiteを用いているのであるが、NucleusはSQLクエリー直書きの仕様なので、SQLiteラッパーでは、プラグインによっては対応できないものがある。
最後に、オブジェクト指向化の問題。まず最初に確認しておきたいのは、長所でも述べたとおり、Nucleusは比較的オブジェクト指向化が進んでいること。WordPressやphpBBのソースコードと見比べれば、一目瞭然である。一箇所、オブジェクト化が進んでいないのはglobalfunctions.phpで、ここのコードはお世辞にも美しい(beautiful)とはいえない。それが汚くなる原因に、私が書いたコードも少なからず絡んでいるので、なんとも恥ずかしい限りである。言い訳になってしまうが、複数人数でコードを整備すると、こういった結果を生み出してしまうことが多々あるということであろう。次の記事で、globalfunctions.php の無駄な部分について見てゆきたい。
Nucleus は、その設計思想から、軽さが売りである。ところが、利用の仕方によってはその設計思想が逆に災いして、重くなってしまうことが多々ある。こういったことの対策としては、NP_Cache・NP_EzCache・NP_znItemCacheなどのキャッシュ系プラグイン(それぞれ、Radekさん、Andyさん、佐藤(な)さん)を利用して軽くしてしまうのがとりあえずの対処方法といったところ。
根本的にこれを解決する試みとしては、コアでSQLクエリーの結果をキャッシュしてしまおうという方法(hsurさん)や、スキンそのものをPHPで完全に書き換えてしまう方法(ZAPAさん)が報告されている。こういったことを参考に、今後自分としてNucleusとどのように向き合ってゆけばいいのか考えるため、Nucleusの長所と短所を、思いつくままにピックアップしてみた。
Nucleus の長所
・コアが軽量
・スキン→テンプレートという考え方
・プラグインインターフェースが充実している
・オブジェクト指向化が比較的進んでいる
・データベースアクセスの際、PEAR-DB などを使わずにクエリーを直接呼び出しているため、比較的高速
Nucleus の短所
・主だった機能をほぼすべてプラグインに頼っているため、スピードなどがプラグインの性能に大きく左右される
・プラグインで制御できない部分がある(管理画面など)
・オブジェクト指向化が完全でない
・グローバル変数やグローバル関数が多く使われている
・SQL クエリーの呼び出し回数が多い
・サーバーの MySQL の環境によっては、スピードに難がある
・データベースアクセスの際、PEAR-DB などを使わずにクエリーを直接呼び出しているため、MySQL の利用が必須となる
・テンプレートのプロパティが盛りだくさんで、分かりにくい
長所については、これらが長所なのだからNucleusを使っているわけなので、特に議論することは無い。逆に短所については、今後の改善の余地ありの事柄を並べてみた。
短所でもっとも大きな部分を占めるのが、スピードの問題。これは始めに述べた、キャッシュ系のプラグインなどを使うことにより、かなり軽減される。ただ、そういったプラグインを使う場合でも無駄がある部分もあるので、それについては後で述べる。
次に、これはNucleusの大きな特色でもあるプラグインとの兼ね合いについて。例えば、プラグインオプションなどは一つの値を呼び出すたびにSQLクエリーを発行している。これがスピード低下の原因の一つになっている(プラグイン自身でSQLクエリーを発行しているケースについては、Nucleusの問題ではなくてプラグインの問題なので容易に解決できる可能性があり、ここでは取り上げない)。他方で、インターフェースが充実してはいるものの、プラグインでは手が届かないところがたくさんあり、こういった部分はコアを改造するか、コアのアップデートを待つしかないと言う状態になっている。
MySQLについて。現在Nucleusが正式にサポートしているのはMySQLであるが、場合によってはMySQLのスピードがNucleusのスピードを決めてしまうことがある。SQLiteを利用するのは一つの手で、このブログはSQLiteを用いているのであるが、NucleusはSQLクエリー直書きの仕様なので、SQLiteラッパーでは、プラグインによっては対応できないものがある。
最後に、オブジェクト指向化の問題。まず最初に確認しておきたいのは、長所でも述べたとおり、Nucleusは比較的オブジェクト指向化が進んでいること。WordPressやphpBBのソースコードと見比べれば、一目瞭然である。一箇所、オブジェクト化が進んでいないのはglobalfunctions.phpで、ここのコードはお世辞にも美しい(beautiful)とはいえない。それが汚くなる原因に、私が書いたコードも少なからず絡んでいるので、なんとも恥ずかしい限りである。言い訳になってしまうが、複数人数でコードを整備すると、こういった結果を生み出してしまうことが多々あるということであろう。次の記事で、globalfunctions.php の無駄な部分について見てゆきたい。