パフォーマンスとキャッシュ
Grav を魅力的なものとしている中心機能のひとつは、その速さです。速さは、 Grav の本質的な設計において、常に重要な考慮事項です。主にキャッシュによるものですが、他のコンポーネントによる部分もあります。
パフォーマンス
-
PHP のキャッシュは重要です 。Grav のベストパフォーマンスを出すには、 PHP opcache と usercache (たとえば APCu)を実行してください。
-
SSD ドライブ により、大きく変化します。ほとんどの場合、PHP のユーザーキャッシュからキャッシュを取得できますが、ファイルから取得するものもあります。そのため、 SSD ドライブは、パフォーマンスに大きく影響します。 NFS のようなネットワークファイルシステムを Grav で使用するのは避けてください。
-
ネイティブ・ホスティング は、仮想マシン(VM)と比べると、常に速いです。たしかに VM は、ホスティングプロバイダが、柔軟に “クラウド” タイプの環境を提供できるすばらしい方法です。これらは、パフォーマンスに影響を与える処理レイヤーを追加します。 VM 上のGrav は、(wordpress や joomla などよりは) 十分速いですが、パフォーマンスを最適化するなら、ネイティブ・ホスティングを選択しないわけにはいきません。
-
より速いメモリー は、より良いです。 Grav はとても速く、多くのキャッシュ機能は、メモリーを高頻度で利用するので、サーバーのメモリーのスピードは、パフォーマンスに大きく影響します。 Grav はいくつかのプラットフォームと比べて、大量のメモリーを使うわけではないので、メモリーの量は、メモリーのタイプやスピードほどにはパフォーマンスに影響せず、重要ではありません。
-
速いマルチコア・プロセッサ も、より良いです。より速く、より高度なプロセッサは、常に助けになります。ただし、他のポイントほどではありません。
-
レンタルサーバー は、安くて準備された環境が手に入ります。が、共用されたリソースは、常に少し遅いです。もう一度いいますが、Grav は、(他の CMS よりは)レンタルサーバーでもとても良く動作します。しかし、究極のスピードを求めるなら、専用サーバーがおすすめです。
-
PECL Yaml パーサー ネイティブの PHP PECL Yaml パーサーをインストールすると、YAML をパースするスピードが早くなります。最大 400% です! さらなるスピードを求めるなら、一見の価値があります。
[!Info]
getgrav.org サイトは、1つの専用サーバーで、クアッドコアのプロセッサーと、16GB のメモリーと、6G のSSD ドライブとで、運用されています。また、PHP 7.4 の実行に、 Zend opcache と、APCu ユーザーキャッシュを利用しています。この web サーバーは、いくつか他の web サイトも運用していますが、レンタルサーバー環境ほどたくさんではありません。
キャッシュ・オプション
キャッシュは、Grav に最初から組み込まれている不可欠な機能です。Grav が採用しているキャッシュメカニズムのおかげで、 Grav は高速に動きます。とはいえ、考慮すべき要素もいくつかあります。
Grav は定評のある Doctrine Cache ライブラリを使用しています。つまり、 Doctrine Cache でサポートされるあらゆるキャッシュメカニズムは、Grav でもサポートされます。つまり、Grav は以下をサポートします:
- Auto (デフォルト) - 自動で最適な選択をします
- File -
cache/
フォルダにキャッシュファイルを保存します - APCu - https://php.net/manual/en/book.apcu.php
- Memcache - https://php.net/manual/en/book.memcache.php
- Redis - https://redis.io
- WinCache - https://www.iis.net/downloads/microsoft/wincache-extension
デフォルトでは、 Grav は auto
を使うように事前に設定されています。これは、 APC を試し、それから WinCach 、そして最後に File を試します。もちろん、user/config/system.yaml
ファイルで、キャッシュ設定を明示することもできます。これにより、少し早くなるかもしれません。
キャッシュ・タイプ
Grav では、 5種類 のキャッシュが行われます。それは:
- YAML configuration caching into PHP.
- Core Grav caching for page objects.
- Twig caching of template files as PHP classes.
- Image caching for media resources.
- Asset caching of CSS and JQuery with pipelining.
YAML 設定のキャッシュは変更できません。常にコンパイルされ、 /cache
フォルダにキャッシュされます。Image キャッシュも常に on になっており、処理済みの画像が /images
フォルダに保存されます。
Grav のコア・キャッシュ
Core Grav キャッシュには、user/config/system.yaml
ファイルに設定できる、次のような設定オプションがあります:
cache:
enabled: true # Set to true to enable caching
check:
method: file # Method to check for updates in pages: file|folder|hash|none
driver: auto # One of: auto|file|apc|xcache|memcache|wincache|redis
prefix: 'g' # Cache prefix string (prevents cache conflicts)
ご覧のとおり、オプションは設定ファイル自体に記載します。開発時は、キャッシュができない方が、最新のページ編集を確認できるので、便利な場合があります。
デフォルトでは、 Grav はキャッシュのチェックメソッド( cache.check.method
)に file
を使います。これはつまり、 Grav の URL にリクエストするたびに、 Grav は高度に最適化されたルーティングを使い、 user/pages
フォルダ内のすべての ファイル を調べ、変更がないか確認します。
folder
キャッシュチェックは、 file
よりも少し高速ですが、すべての環境確実に機能するとは限りません。 folder
オプションを使うときは、Grav がサーバーでページの修正を検知するかを確認する必要があります。
hash
チェックは、各ページフォルダ内のすべてのファイルで、高速なハッシュアルゴリズムを使います。これは状況によって file チェックよりも高速で、フォルダ内のすべてのファイルが対象です。
変更されたページを自動で再キャッシュすることが重要でない場合(もしくは、比較的大規模なサイトである場合)、この値に none
を設定すると、本番環境が高速化します。変更後は、手動でのキャッシュクリア だけは必要です。これは 本番環境専用 の設定です。
[!Warning]
ページの削除で、キャッシュはクリアされません。キャッシュクリアが、フォルダの編集タイムスタンプに基づいて行われるためです。
[!Tip]
config 設定ファイルを作成/保存するだけで、簡単にキャッシュクリアを強制できます。
Memcache に特有のオプション
memcache
ドライバオプション経由で memcache サーバーに接続する場合に必要な、追加の設定オプションがあります。これらのオプションは、 user/config/system.yaml
ファイルの cache:
グループ以下に記述します:
cache:
...
memcache:
server: localhost
port: 11211
Memcached に特有のオプション
memcache と同様、memcached にもいくつかの設定オプションがあり、 memcached
ドライバオプション経由で memcached サーバーに接続する場合には必要となるオプションです。これらのオプションも、 user/config/system.yaml
ファイルの cache:
グループ以下に記述してください:
cache:
...
memcached:
server: localhost
port: 11211
Redis に特有のオプション
redis
ドライバオプション経由で redis に接続する場合に必要な、いくつかの追加設定オプションがあります。これらのオプションは、 user/config/system.yaml
ファイルの cache:
グループ以下に記述してください:
cache:
...
redis:
server: localhost
port: 6379
もしくは、ソケット接続を利用することもできます:
cache:
...
redis:
socket: '/tmp/redis.sock'
利用している redis サーバーがパスワードや secret が設定されている場合、次の設定をすることもできます:
cache:
...
redis:
password: your-secret
システムに、 php-redis をインストールする必要もあるでしょう
Twig に特有のオプション
Twig テンプレートエンジンは、独自のファイルベースのキャッシュシステムを使います。そして、それに伴い、いくつかのオプションがあります。
twig:
cache: false # Set to true to enable twig caching
debug: true # Enable Twig debug
auto_reload: true # Refresh cache on changes
autoescape: false # Autoescape Twig vars
パフォーマンスを少し良くするため、debug
拡張を無効にできます。また、cache: check: method: none
と似た機能を持つ auto_reload
も無効にできます。それにより、キャッシュがリフレッシュされるまで、 .html.twig
ファイルの変更を探しません。
キャッシュとイベント
ほとんどの場合、キャッシュが有効化されていたとしても、 イベントは発火します 。イベントが、 onPageContentRaw
, onPageProcessed
, onPageContentProcessed
, onTwigPageVariables
, もしくは onFolderProcessed
以外であるとき、これは正しいです。例外となるイベントは、すべてのページとフォルダが再起されるときに実行され、ページやフォルダが見つかるごとに発火します。イベント名から示唆されるとおり、 処理中 にのみ実行され、キャッシュされたあとには実行されません。