SuperAPI AI 工具集

bitrix-performance

部署与运维

查看项目

更新于 10-15 17:30

技能介绍

用途:面向 Bitrix 高负载场景的性能调优,覆盖复合缓存、查询优化与读副本三部分。基线 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) 声明模板兼容复合模式,再用 $frame = $this->createFrame()->begin('Loading…') 与 $frame->end() 包裹动态内容;长占位标记用 begin() → 动态内容 → beginStub() → 占位 HTML → end()。组件外(站点模板 header、init.php 辅助函数)可用 StaticArea:new StaticArea('vendor_cart_counter'),setStub('<span>0</span>'),startDynamicArea(),输出内容,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 令牌)留在静态部分,每个动态区域都要以访客和登录用户两种身份测试。

查询:只选所需字段,为过滤/排序所用列建索引;避免 N+1,用 fetchCollection() + fill() 或 select 中的关联(bitrix-orm);批量写入(addMulti、updateMulti)替代逐行循环;重复读取用 ORM 查询缓存,组装结果用带标签的数据缓存。

读副本:使用集群模块时,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 而非文件。