国際化(i18n)とローカライズ(l10n)
サイトを国際化したり、ローカライズしたりすることはあなたの観客を増やし、
訪問者すべてが彼らの必要とする情報を入手できることを確実にするすばらしい方法です。
しかしながら、しばしばパフォーマンス上のペナルティーをもたらします。
下記はあなたが国際化とローカライズのオーバーヘッドを減らすために利用できる戦略のいくつかです。
どの翻訳アダプタを使うべきですか?
翻訳アダプタのすべてが同じことを引き起こすとは限りません。
あるものは他にない特色を持ち、またあるものは他より良く機能を果たします。
さらに、ビジネス上の必要性によって、
特定のアダプタを使わなければならないことがあるかもしれません。
しかしながら、もしあなたに好みがあるなら、どのアダプタがもっとも速いでしょうか?
最速にするためにXML以外の翻訳アダプタを使う
Zend Frameworkはさまざまな翻訳アダプタとともに出荷されています。
それらのうち丸々半分はメモリやパフォーマンスのオーバーヘッドを招くXML形式を利用します。
幸運なことに、もっとより速くパース可能な他の形式を利用するアダプタがいくつかあります。
速度の順でもっとも速いものから遅いものまで見て行きましょう:
配列: これは定義上、もっとも高速です。
includeの直後に、
ネィティブなPHP形式にパースされるためです。
CSV: CSVファイルをパースするために
fgetcsv() を使い、
それをネィティブなPHP形式に変換します。
INI: INIファイルをパースするために
parse_ini_file() を使い、
それをネィティブなPHP形式に変換します。
このアダプタとCSVアダプタは性能面で概ね等価です。
Gettext: Zend Frameworkのgettextアダプタはgettextエクステンションを
使いません。
それはスレッドセーフではなく、サーバでひとつのロケールだけしか指定できないからです。
その結果、gettextエクステンションを直接利用するよりも遅くなりますが、
gettext形式はバイナリなので、XMLをパースするよりは高速です。
もしあなたの目的のひとつが高い性能なら、上記のアダプタのうちの
ひとつを利用することを提案します。
どのようにしたら翻訳やローカライズをもっと速くできますか?
もしかするとビジネス上の理由であなたはXMLベースの翻訳アダプタに制限されているかもしれません。
あるいは恐らくあなたはさらに速くしたいかもしれません。
あるいはひょっとするとローカライズ作業を早めたいかもしれません。
それにはどうしたら良いでしょう?
翻訳およびローカライズのキャッシュを使う
Zend_TranslateとZend_Localeの両方とも
パフォーマンスに大きな影響を与えることができるキャッシュ機能が実装されています。
どちらの場合も、主なボトルネックは一般的にファイルの読み込みで、
実際のルックアップ処理ではありません;
キャッシュを利用することにより、翻訳および(または)ローカライズファイルを読み込む必要をなくします。
文字列の翻訳およびローカライズのキャッシュについて下記を参考に出来ます。:
Zend_Translate
アダプタキャッシング
Zend_Locale
キャッシング