パフォーマンス最適化
XOOPSパフォーマンス最適化
Section titled “XOOPSパフォーマンス最適化”最大速度と効率のためのXOOPS最適化の包括的ガイド。
パフォーマンス最適化概要
Section titled “パフォーマンス最適化概要”graph TD A[Performance] --> B[Caching] A --> C[Database] A --> D[Web Server] A --> E[Frontend] A --> F[Code] B --> B1[Page Cache] B --> B2[Query Cache] B --> B3[Template Cache] C --> C1[Indexes] C --> C2[Queries] C --> C3[Optimization] D --> D1[Compression] D --> D2[Headers] D --> D3[Connection] E --> E1[Images] E --> E2[CSS/JS] E --> E3[Lazy Load] F --> F1[Modules] F --> F2[Queries]キャッシング設定
Section titled “キャッシング設定”キャッシングはパフォーマンスを向上させる最速の方法です。
ページレベルのキャッシング
Section titled “ページレベルのキャッシング”XOOPSでフルページキャッシングを有効化:
管理パネル > システム > 設定 > キャッシュ設定
キャッシングを有効化: はいキャッシュタイプ: ファイルキャッシュ (またはAPCu/Memcache)キャッシュ有効期限: 3600秒 (1時間)モジュールリストをキャッシュ: はい設定をキャッシュ: はい検索結果をキャッシュ: はいファイルベースキャッシング
Section titled “ファイルベースキャッシング”キャッシュディレクトリ場所を設定:
# キャッシュディレクトリをウェブルート外に作成 (より安全)mkdir -p /var/cache/xoopschown www-data:www-data /var/cache/xoopschmod 755 /var/cache/xoops
# mainfile.phpを編集define('XOOPS_CACHE_PATH', '/var/cache/xoops/');APCuキャッシング
Section titled “APCuキャッシング”APCuはインメモリキャッシング (非常に高速):
# APCuをインストールapt-get install php-apcu
# インストールを確認php -m | grep apcu
# php.iniで設定apc.enabled = 1apc.memory_size = 128Mapc.ttl = 0apc.user_ttl = 3600apc.shm_size = 128XOOPSで有効化:
管理パネル > システム > 設定 > キャッシュ設定
キャッシュタイプ: APCuMemcache/Redisキャッシング
Section titled “Memcache/Redisキャッシング”トラフィックの多いサイト向けの分散キャッシング:
Memcacheをインストール:
# Memcacheサーバーをインストールapt-get install memcached
# サービスを開始systemctl start memcachedsystemctl enable memcached
# 実行状況を確認netstat -tlnp | grep memcached# ポート11211でリッスンしている状態を表示XOOPSで設定:
mainfile.phpを編集:
// Memcache設定define('XOOPS_CACHE_TYPE', 'memcache');define('XOOPS_CACHE_HOST', 'localhost');define('XOOPS_CACHE_PORT', 11211);define('XOOPS_CACHE_TIMEOUT', 0);または管理パネル:
キャッシュタイプ: MemcacheMemcacheホスト: localhost:11211テンプレートキャッシング
Section titled “テンプレートキャッシング”XOOPSテンプレートをコンパイルしキャッシュ:
# templates_cが書き込み可能であることを確認chmod 777 /var/www/html/xoops/templates_c/
# 古いキャッシュテンプレートをクリアrm -rf /var/www/html/xoops/templates_c/*テーマで設定:
<!-- テーマのxoops_version.phpで -->{smarty.const.XOOPS_VAR_PATH|constant}<{$xoops_meta}>
<!-- テンプレートはキャッシングを使用 -->{cache} [キャッシュされるコンテンツ]{/cache}データベース最適化
Section titled “データベース最適化”データベースインデックスを追加
Section titled “データベースインデックスを追加”適切にインデックスされたデータベースは非常に高速にクエリします。
-- 現在のインデックスを確認SHOW INDEXES FROM xoops_users;
-- インデックスを追加ALTER TABLE xoops_users ADD INDEX idx_uname (uname);ALTER TABLE xoops_users ADD INDEX idx_email (email);ALTER TABLE xoops_users ADD INDEX idx_uid_active (uid, user_actkey);
-- 投稿/コンテンツテーブルにインデックスを追加ALTER TABLE xoops_posts ADD INDEX idx_post_published (post_published);ALTER TABLE xoops_posts ADD INDEX idx_post_uid (post_uid);ALTER TABLE xoops_posts ADD INDEX idx_post_created (post_created);
-- インデックスが作成されたことを確認SHOW INDEXES FROM xoops_users\Gテーブルを最適化
Section titled “テーブルを最適化”定期的なテーブル最適化でパフォーマンスが向上:
-- すべてのテーブルを最適化OPTIMIZE TABLE xoops_users;OPTIMIZE TABLE xoops_posts;OPTIMIZE TABLE xoops_config;OPTIMIZE TABLE xoops_comments;
-- または一度にすべて最適化REPAIR TABLE xoops_users;OPTIMIZE TABLE xoops_users;REPAIR TABLE xoops_posts;OPTIMIZE TABLE xoops_posts;自動最適化スクリプトを作成:
#!/bin/bash# データベース最適化スクリプト
echo "XOOPSデータベースを最適化しています..."
mysql -u xoops_user -p xoops_db << EOF-- すべてのテーブルを最適化OPTIMIZE TABLE xoops_users;OPTIMIZE TABLE xoops_posts;OPTIMIZE TABLE xoops_config;OPTIMIZE TABLE xoops_comments;OPTIMIZE TABLE xoops_users_online;
-- データベースサイズを表示SELECT table_schema, ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) as total_mbFROM information_schema.tablesWHERE table_schema = 'xoops_db'GROUP BY table_schema;EOF
echo "データベース最適化が完了しました!"cronでスケジュール:
# 最適化スケジュールcrontab -e# 追加: 0 3 * * 0 /usr/local/bin/optimize-xoops-db.shクエリ最適化
Section titled “クエリ最適化”遅いクエリを確認:
-- 遅いクエリログを有効化SET GLOBAL slow_query_log = 'ON';SET GLOBAL long_query_time = 2;
-- 遅いクエリを表示SELECT * FROM mysql.slow_log;
-- またはログファイルを確認tail -100 /var/log/mysql/slow.log一般的な最適化テクニック:
// 低速 - ループ内で不要なクエリを避けるforeach ($users as $user) { $profile = getUserProfile($user['uid']); // ループ内のクエリ! echo $profile['name'];}
// 高速 - すべてのデータを一度に取得$profiles = getAllUserProfiles($user_ids);foreach ($users as $user) { echo $profiles[$user['uid']]['name'];}バッファプールを増加
Section titled “バッファプールを増加”MySQLをキャッシング向けに設定:
/etc/mysql/mysql.conf.d/mysqld.cnfを編集:
# InnoDB Buffer Pool (システムRAMの50-80%)innodb_buffer_pool_size = 1G
# クエリキャッシュ (オプション、MySQL 5.7+では無効にできる)query_cache_size = 64Mquery_cache_type = 1
# 最大接続数max_connections = 500
# 最大許可パケットmax_allowed_packet = 256M
# 接続タイムアウトconnect_timeout = 10MySQLを再起動:
systemctl restart mysqlWebサーバー最適化
Section titled “Webサーバー最適化”Gzip圧縮を有効化
Section titled “Gzip圧縮を有効化”レスポンスを圧縮してバンド幅を削減:
Apache設定:
<IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/json
# 画像と既に圧縮されたファイルを圧縮しない SetEnvIfNoCase Request_URI \.(jpg|jpeg|png|gif|zip|gzip)$ no-gzip dont-vary
# 圧縮されたレスポンスをログ DeflateBufferSize 8096</IfModule>Nginx設定:
gzip on;gzip_types text/html text/plain text/css text/javascript application/javascript application/json;gzip_min_length 1000;gzip_vary on;gzip_comp_level 6;
# 既に圧縮されたフォーマットを圧縮しないgzip_disable "msie6";圧縮を確認:
# レスポンスがgzipされているか確認curl -I -H "Accept-Encoding: gzip" http://your-domain.com/xoops/
# 表示:# Content-Encoding: gzipブラウザキャッシングヘッダー
Section titled “ブラウザキャッシングヘッダー”静的アセットのキャッシュ有効期限を設定:
Apache:
<IfModule mod_expires.c> ExpiresActive On
# 画像を30日間キャッシュ ExpiresByType image/jpeg "access plus 30 days" ExpiresByType image/gif "access plus 30 days" ExpiresByType image/png "access plus 30 days" ExpiresByType image/svg+xml "access plus 30 days"
# CSS/JSを30日間キャッシュ ExpiresByType text/css "access plus 30 days" ExpiresByType application/javascript "access plus 30 days" ExpiresByType text/javascript "access plus 30 days"
# フォントを1年間キャッシュ ExpiresByType font/eot "access plus 1 year" ExpiresByType font/ttf "access plus 1 year" ExpiresByType font/woff "access plus 1 year" ExpiresByType font/woff2 "access plus 1 year"
# HTMLをキャッシュしない ExpiresByType text/html "access plus 1 hour"</IfModule>Nginx:
location ~* \.(jpg|jpeg|png|gif|ico|svg|woff|woff2|ttf|eot)$ { expires 30d; add_header Cache-Control "public, immutable";}
location ~* \.(css|js)$ { expires 30d; add_header Cache-Control "public";}
location ~ \.html$ { expires 1h; add_header Cache-Control "public";}接続キープアライブ
Section titled “接続キープアライブ”永続的なHTTP接続を有効化:
Apache:
<IfModule mod_http.c> KeepAlive On KeepAliveTimeout 15 MaxKeepAliveRequests 100</IfModule>Nginx:
keepalive_timeout 15s;keepalive_requests 100;フロントエンド最適化
Section titled “フロントエンド最適化”画像を最適化
Section titled “画像を最適化”画像ファイルサイズを削減:
# JPEG画像をバッチ圧縮for img in *.jpg; do convert "$img" -quality 85 "optimized_$img"done
# PNG画像をバッチ圧縮for img in *.png; do optipng -o2 "$img"done
# またはimagemin CLIを使用npm install -g imagemin-cliimagemin images/ --out-dir=images-optimizedCSSとJavaScriptを最小化
Section titled “CSSとJavaScriptを最小化”CSSとJSファイルサイズを削減:
Node.jsツールを使用:
# ミニファイアをインストールnpm install -g uglify-js clean-css-cli
# JavaScriptを最小化uglifyjs script.js -o script.min.js
# CSSを最小化cleancss style.css -o style.min.cssオンラインツールを使用:
- CSS Minifier: https://cssminifier.com/
- JavaScript Minifier: https://www.minifycode.com/javascript-minifier/
画像を遅延ロード
Section titled “画像を遅延ロード”必要な場合のみ画像をロード:
<!-- loading="lazy"属性を追加 --><img src="image.jpg" alt="Description" loading="lazy">
<!-- または古いブラウザ向けJavaScriptライブラリ --><img class="lazy" src="placeholder.jpg" data-src="image.jpg" alt="Description">
<script src="https://cdnjs.cloudflare.com/ajax/libs/vanilla-lazyload/17.1.2/lazyload.min.js"></script><script> var lazyLoad = new LazyLoad({ elements_selector: ".lazy" });</script>レンダリングをブロックするリソースを削減
Section titled “レンダリングをブロックするリソースを削減”CSSとJSを戦略的にロード:
<!-- 重要なCSSをインライン化 --><style> /* ビューポート上部の重要なスタイル */</style>
<!-- 重大でないCSSを遅延ロード --><link rel="stylesheet" href="style.css" media="print" onload="this.media='all'">
<!-- JavaScriptを遅延ロード --><script src="script.js" defer></script>
<!-- または重大でないスクリプトに非同期を使用 --><script src="analytics.js" async></script>グローバルアクセスを高速化するためにコンテンツデリバリネットワークを使用します。
人気のCDN
Section titled “人気のCDN”| CDN | コスト | 機能 |
|---|---|---|
| Cloudflare | 無料/有料 | DDoS, DNS, キャッシュ, 分析 |
| AWS CloudFront | 有料 | 高パフォーマンス、グローバル |
| Bunny CDN | 手頃 | ストレージ、ビデオ、キャッシュ |
| jsDelivr | 無料 | JavaScriptライブラリ |
| cdnjs | 無料 | 人気のあるライブラリ |
Cloudflareセットアップ
Section titled “Cloudflareセットアップ”-
https://www.cloudflare.com/ でサインアップ
-
ドメインを追加
-
ネームサーバーをCloudflareの名前に更新
-
キャッシングオプションを有効化:
- キャッシュレベル: アグレッシブ
- すべてをキャッシュ: オン
- ブラウザキャッシュTTL: 1ヶ月
-
XOOPSでドメインをCloudflare DNSに更新
XOOPSでCDNを設定
Section titled “XOOPSでCDNを設定”画像URLをCDNに更新:
テーマテンプレートを編集:
<!-- オリジナル --><img src="{$xoops_url}/uploads/image.jpg" alt="">
<!-- CDNを使用 --><img src="https://cdn.your-domain.com/uploads/image.jpg" alt="">またはPHPで設定:
// mainfile.phpまたは設定でdefine('XOOPS_CDN_URL', 'https://cdn.your-domain.com');
// テンプレートで<img src="{$smarty.const.XOOPS_CDN_URL}/uploads/image.jpg" alt="">パフォーマンス監視
Section titled “パフォーマンス監視”PageSpeed Insightsテスト
Section titled “PageSpeed Insightsテスト”サイトのパフォーマンスをテスト:
- Google PageSpeed Insightsにアクセス: https://pagespeed.web.dev/
- XOOPS URLを入力
- 推奨事項を確認
- 提案された改善を実装
サーバーパフォーマンス監視
Section titled “サーバーパフォーマンス監視”リアルタイムのサーバーメトリクスを監視:
# 監視ツールをインストールapt-get install htop iotop nethogs
# CPUとメモリを監視htop
# ディスクI/Oを監視iotop
# ネットワークを監視nethogsPHPパフォーマンスプロファイリング
Section titled “PHPパフォーマンスプロファイリング”遅いPHPコードを識別:
<?php// Xdebugを使用してプロファイリングxdebug_start_trace('profile');
// ここにコードを記述$result = someExpensiveFunction();
xdebug_stop_trace();?>MySQLクエリ監視
Section titled “MySQLクエリ監視”遅いクエリを追跡:
# クエリログを有効化mysql -u root -p
SET GLOBAL general_log = 'ON';SET GLOBAL log_output = 'FILE';SET GLOBAL general_log_file = '/var/log/mysql/query.log';
# 遅いクエリを確認tail -f /var/log/mysql/slow.log
# EXPLAINでクエリを分析EXPLAIN SELECT * FROM xoops_users WHERE uid = 1\Gパフォーマンス最適化チェックリスト
Section titled “パフォーマンス最適化チェックリスト”最高のパフォーマンスのためにこれらを実装:
- キャッシング: ファイル/APCu/Memcacheキャッシングを有効化
- データベース: インデックスを追加、テーブルを最適化
- 圧縮: Gzip圧縮を有効化
- ブラウザキャッシュ: キャッシュヘッダーを設定
- 画像: 画像を最適化して圧縮
- CSS/JS: ファイルを最小化
- 遅延ロード: 画像に遅延ロードを実装
- CDN: 静的アセット用CDNを使用
- キープアライブ: 永続接続を有効化
- モジュール: 未使用のモジュールを無効化
- テーマ: 軽量で最適化されたテーマを使用
- 監視: パフォーマンスメトリクスを追跡
- 定期メンテナンス: キャッシュをクリア、DBを最適化
パフォーマンス最適化スクリプト
Section titled “パフォーマンス最適化スクリプト”自動最適化:
#!/bin/bash# パフォーマンス最適化スクリプト
echo "=== XOOPSパフォーマンス最適化 ==="
# キャッシュをクリアecho "キャッシュをクリアしています..."rm -rf /var/www/html/xoops/cache/*rm -rf /var/www/html/xoops/templates_c/*
# データベースを最適化echo "データベースを最適化しています..."mysql -u xoops_user -p xoops_db << EOFOPTIMIZE TABLE xoops_users;OPTIMIZE TABLE xoops_posts;OPTIMIZE TABLE xoops_config;OPTIMIZE TABLE xoops_comments;EOF
# ファイルのパーミッションを確認echo "ファイルのパーミッションを確認しています..."find /var/www/html/xoops -type f -exec chmod 644 {} \;find /var/www/html/xoops -type d -exec chmod 755 {} \;chmod 777 /var/www/html/xoops/cachechmod 777 /var/www/html/xoops/templates_cchmod 777 /var/www/html/xoops/uploadschmod 777 /var/www/html/xoops/var
# パフォーマンスレポートを生成echo "パフォーマンス最適化が完了しました!"echo ""echo "次のステップ:"echo "1. https://pagespeed.web.dev/ でサイトをテスト"echo "2. 管理パネルでパフォーマンスを監視"echo "3. 静的アセット向けのCDNを検討"echo "4. MySQLで遅いクエリを確認"最適化前後のメトリクス
Section titled “最適化前後のメトリクス”改善を追跡:
最適化前:- ページロード時間: 3.5秒- データベースクエリ: 45- キャッシュヒット率: 0%- データベースサイズ: 250MB
最適化後:- ページロード時間: 0.8秒 (77%高速化)- データベースクエリ: 8 (キャッシュ)- キャッシュヒット率: 85%- データベースサイズ: 120MB (最適化)次のステップ
Section titled “次のステップ”- 基本的な設定を確認
- セキュリティ対策を実装
- キャッシングを実装
- ツールでパフォーマンスを監視
- メトリクスに基づいて調整
タグ: #performance #optimization #caching #database #cdn
関連記事:
- ../../06-Publisher-Module/User-Guide/Basic-Configuration
- System-Settings
- Security-Configuration
- ../Installation/Server-Requirements