toastnz / silverstripe-debugbar
SilverStripe CMS 的 DebugBar
Requires
- php: >=5.6
- jdorn/sql-formatter: 1.3.x-dev
- maximebf/debugbar: ^1.13
- silverstripe/admin: ^1.0
- silverstripe/framework: ^4.0
- silverstripe/siteconfig: ^4.0
- tractorcow/silverstripe-proxy-db: ^0.1.0
Requires (Dev)
- phpunit/phpunit: ^5.7
- squizlabs/php_codesniffer: ^3.0
README
需求
- SilverStripe ^4.0
- maximebf/php-debugbar
- jdorn/sql-formatter
安装
您可以使用 Composer 安装调试栏
composer require --dev lekoala/silverstripe-debugbar
文档
简介
SilverStripe Debug Bar 是 PHP DebugBar 的包装器,它与 SilverStripe 集成以提供有关您的项目的更多信息。调试栏可以帮助您轻松地识别性能问题、分析环境设置并发现代码中哪些部分正在被使用。
例如,如果您的应用程序在循环中多次运行相同的数据库查询,或者某个控制器操作运行时间过长,调试栏会突出显示这些瓶颈,以便您采取措施提高整体网站性能。
此模块将
- 基于可用的钩子记录框架执行
- 记录并分析数据库调用
- 显示所有 SilverStripe 日志条目
- 显示所有会话、cookie、需求、SiteConfig 和请求数据
- 显示当前区域、框架/ CMS 版本、当前成员
- 显示请求数据和时间分析以及内存消耗
通过 DebugBarMiddleware
自动将调试栏注入任何 HTML 响应中,并且仅在 "dev" 模式下运行。
执行时间线
执行时间线("时间线" 选项卡)为您提供每个控制器和操作的图形概述,列出每个操作完成所需的时间。
上面的例子是从 CMS 加载页面时的示例。
数据库分析
"数据库" 选项卡允许您查看页面请求执行的所有数据库操作的列表,并将重复的查询分组在一起。这有助于识别性能可改进的区域,例如使用 DataObject::get_by_id()
(它缓存结果)而不是 DataObject::get()->byID()
。
通过点击右下角的重复组徽章之一,您可以看到重复查询的组
为了帮助您进行调试和优化应用程序,建议您保留 find_source
选项。这将帮助您确定触发查询的原因以及在何处适当实现缓存。
如果您使用 ?showqueries=1
,您还会看到已优化以在页面上清晰地显示所有查询及其结果。
此外,请记住,如果您使用 该 d()
辅助函数,任何名称中包含 "sql" 的字符串变量都将格式化为 SQL 字符串。
长时间运行的查询
当某些查询运行时间过长时,它们将以红色突出显示,每个项目的请求时间(右侧以粗红色文字突出显示)。此时间阈值的设置可以通过修改 DebugBar.warn_dbqueries_threshold_seconds
配置 设置进行调整。
注意:上面的示例已被故意调整为简短。对于长时间运行的查询,默认阈值值为一秒。
大量查询
如果页面请求性能超过一定数量的查询,将向“消息”标签页发送警告信息。您可以使用DebugBar.warn_query_limit
配置设置调整此阈值。
系统日志和消息
“消息”标签页将显示在页面执行过程中由SilverStripe记录器处理的所有内容
您可以通过单击底右角的日志级别按钮之一来按类型筛选列表。
注意:有时,其他DebugBar组件也可能向此标签页发送消息。
模板使用
“模板”标签页将显示调用了多少模板,以及每个模板相对于项目根目录的文件路径。
仅在您正在刷新缓存(?flush=1
)时才会填充此信息。当模板被缓存时,将显示通知,告知您刷新以查看完整列表。
部分缓存命中和未命中
“模板缓存”标签页显示您选择的局部缓存键的有效性(例如,<% cached 'navigation', $LastEdited %>...<% end_cached %>
)。它通过指示一个键是否命中缓存来做到这一点。
环境和其它信息
调试栏的各种标签页和指示器中提供了各种有用的信息。请参阅下面的截图,并按顺序从左到右解释箭头
标签
- 会话:显示当前SilverStripe会话中的所有内容
- Cookie:显示请求中可用的所有Cookie
- 参数:显示当前请求的所有GET、POST和REQUEST参数
- 配置:显示来自CMS的当前SiteConfig设置
- 需求:显示在页面执行期间进行的所有
Requirements
调用
指示器
悬停在指示器上查看
- 区域设置:网站当前使用的区域设置
- 版本:当前使用的SilverStripe软件版本
- 用户:当前登录的用户名
- 内存使用:生成页面使用的内存量
- 请求时间:生成页面的总时间(见下文)
请求时间
请求时间指示器显示服务器渲染页面所需的时间,不包括浏览器渲染页面所需的时间。您可以使用浏览器控制台来分析此方面。
- 对于常规页面加载,请求时间将带有绿色下划线,表示速度正常
- 对于较慢的页面加载,请求时间将带有橙色下划线,表示它可能比应有的时间长,但仍然可以接受
- 对于较慢的页面加载,请求时间将带有红色下划线,表示它可能非常慢
危险慢速页面加载的阈值可以通过DebugBar.warn_request_time_seconds
配置设置来配置。
慢速/警告级别指示器的阈值定义为危险阈值的百分比(默认为50%)。这可以通过修改DebugBar.warn_warning_ratio
配置设置来调整。
辅助方法
快速调试
d()
函数可以帮助您快速调试代码。它将使用Symfony VarDumper以“美观”的方式显示数据。
在XHR/AJAX上下文中,它将以更简单的方式显示数据。
当没有参数调用d()
时,它将显示所有对象在调试回溯中。它将在内容之前显示变量名,以便于在多个值中识别数据。
d($myvar, $myothervar);
任何调用d()
且变量名中包含"sql"的都将输出格式正确的SQL查询,例如
d($myDataList->sql());
快速记录
l()
函数可以帮助你记录消息,由于它们将显示在"消息"标签中,因此非常有用。
l('My message');
配置选项
尽可能多的功能已经设置为可配置的。你可以通过查看_config/debugbar.yml
来查看默认配置设置列表。要修改这些设置之一,你可以在mysite/_config
文件夹中定义一个YAML配置块,例如
mysite/_config/debugbar.yml
--- Name: mysitedebugbar --- LeKoala\DebugBar\DebugBar: enabled_in_admin: false query_limit: 500
设置
禁用调试栏
你可以使用PHP或配置来禁用调试栏
putenv('DEBUGBAR_DISABLE=true');
LeKoala\DebugBar\DebugBar: disabled: true
故障排除
使用Vagrant
如果你正在使用Vagrant(或可能是Docker或其他虚拟化),并且调试栏没有显示出来,请确保已将check_local_ip
配置选项设置为false
。这是由于Vagrant和Virtualbox默认的网络配置方式。
管理jQuery
默认情况下,调试栏将包含自己的jQuery版本。它仅在管理区域禁用(它已经使用jQuery)。
如果你已在需求中添加了jQuery(文件名必须是jquery.js或jquery.min.js),调试栏将不会加载其自己的jQuery版本。你还可以将以下配置标志设置为false,以防止调试栏包含自己的jQuery。
LeKoala\DebugBar\DebugBar: include_jquery: false
如果你自己包含了jQuery,预期你在Page::init()
中包含它。以下是如何包含框架中提供的jQuery的示例
protected function init() { parent::init(); Requirements::javascript('framework/thirdparty/jquery/jquery.min.js'); }
关于安全页面的简要说明
LeKoala\DebugBar\Extension\ControllerExtension
将为你包含调试栏所需的所有资源。
这是通过使用onAfterInit
扩展钩子来完成的,然而在Security
控制器中,onAfterInit
是在PageController
中的init()
方法之前调用的。
由于你需要在调试栏之前添加jQuery,这可能会导致问题,因此需求不会被包含在Security
控制器中。
如果你希望在Security
控制器中使用调试栏,确保在包含jQuery之后调用DebugBar::includeRequirements();
来包含所有相关需求。当调试栏被禁用时,此调用将被忽略。此外,请注意,对此方法的任何后续调用也将被忽略。
维护者
LeKoala - thomas@lekoala.be
许可证
本模块采用MIT许可证。