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. 02减少 N+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);
}

额外数据库(分析、报表):在 connections 中使用命名连接(bitrix-database)。

检查清单

  • 已分别以访客和登录用户身份检查每个复合动态区域。
  • 生产环境中由 NGINX 提供复合缓存。
  • 已使用 SqlTracker 找出慢查询并为其建立索引。
  • 在负载下,缓存和会话使用 Redis/Memcached,而不是文件。

评论

支持 Markdown