mcpField
B
bitrix-performance

bitrix-performance

github.com/bxmaximum開発47272 回インストール2 週間前に更新
リポジトリ

bitrix-performance について

Bitrix アプリケーションの性能改善に取り組む開発者向けのスキルです。コンポジットページ、データベースクエリ、読み取りレプリカ、キャッシュ、セッションを扱い、API例や設定指針、運用チェック項目を示します。

主な機能

  1. 01コンポジットページの動的領域
  2. 02クエリと ORM の最適化
  3. 03データベースの一括書き込み
  4. 04読み取りレプリカで主系を指定
  5. 05性能運用チェックリスト

活用シーン

  1. 01個人データのコンポジットキャッシュ混入防止
  2. 02N+1 クエリと重複読み取りの削減
  3. 03書き込み直後の読み取りを主系へ送る

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/bxmaximum/bitrix-framework-skills --skill bitrix-performance

インストール後、Claude Code で/bitrix-performanceを入力して読み込まれたか確認します。

詳細

パフォーマンス

ベースライン:main 23.0+ · 検証済み:main 26.800.0

キャッシュ自体については bitrix-caching を参照してください。SQL のプロファイリングには bitrix-database(SqlTracker)を使用します。セッションについては bitrix-sessions を参照してください。

コンポジット

ページの静的 HTML はコンポジットキャッシュから配信されます(NGINX から直接配信できます)。動的エリアは後続のリクエストで取得されます。「設定」→「コンポジットサイト」で有効にします。カーネル:Bitrix\Main\Composite\Engine、Page、StaticArea、BufferArea。

コンポーネントのテンプレート内($this は CBitrixComponentTemplate です):

$this->setFrameMode(true);                 // template is composite-compatible

$frame = $this->createFrame()->begin('Loading…');  // stub shown in the cached HTML
echo htmlspecialcharsbx($arResult['USER_NAME']);   // dynamic content
$frame->end();

長いスタブマークアップの場合:begin() → 動的コンテンツ → beginStub() → スタブ HTML → end()。

コンポーネント外(サイトテンプレートのヘッダー、init.php のヘルパー):

use Bitrix\Main\Composite\StaticArea;

$area = new StaticArea('vendor_cart_counter');
$area->setStub('<span>0</span>');
$area->startDynamicArea();
echo (int)$basketCount;
$area->finishDynamicArea();
  • コードを使わずコンポーネントごとに切り替えるには、パラメーター COMPOSITE_FRAME_MODE(A/Y/N)と COMPOSITE_FRAME_TYPE(AUTO、STATIC、DYNAMIC_WITH_STUB、DYNAMIC_WITHOUT_STUB)を使用します。
  • ページを除外するには:\Bitrix\Main\Composite\Page::getInstance()->markNonCacheable()。
  • data-dynamic 属性も composite_frame_mode ページプロパティもありません。
  • 静的部分に個人データ(氏名、カート、権限、CSRF トークン)を残さないでください。各動的エリアをゲストユーザーとログインユーザーの両方でテストします。

クエリ

  • 必要なフィールドのみを選択し、filter/order で使うカラムにインデックスを設定します。
  • N+1 を避けます:fetchCollection() と fill() を使用するか、select でリレーションを指定します(bitrix-orm)。
  • 行ごとのループではなく、バッチ書き込み(addMulti、updateMulti)を使用します。
  • 繰り返しの読み取りには ORM クエリキャッシュを、組み立てた結果にはタグ付きデータキャッシュを使用します。

読み取りレプリカ

cluster モジュールを使用すると、query() による SELECT はスレーブに送られる場合があります。書き込み直後の読み取りはマスターに固定します:

$pool = \Bitrix\Main\Application::getInstance()->getConnectionPool();
$pool->useMasterOnly(true);
try
{
    $row = OrderTable::getById($id)->fetch();
}
finally
{
    $pool->useMasterOnly(false);
}

追加の DB(分析、レポート)には、connections 内の名前付き接続を使用します(bitrix-database)。

チェックリスト

  • すべてのコンポジット動的エリアをゲストユーザーとログインユーザーの両方で確認している。
  • 本番環境で NGINX がコンポジットキャッシュを配信している。
  • SqlTracker で遅いクエリを特定し、インデックスを設定している。
  • 負荷時には、キャッシュとセッションにファイルではなく Redis/Memcached を使用している。

コメント