toastnz/silverstripe-debugbar

SilverStripe CMS 的 DebugBar

安装: 1

依赖项: 0

建议者: 0

安全: 0

星标: 3

关注者: 2

分支: 27

类型:silverstripe-vendormodule

2.0.3 2019-04-05 02:56 UTC

README

Build Status scrutinizer Code coverage

需求

安装

您可以使用 Composer 安装调试栏

composer require --dev lekoala/silverstripe-debugbar

文档

简介

SilverStripe Debug Bar 是 PHP DebugBar 的包装器,它与 SilverStripe 集成以提供有关您的项目的更多信息。调试栏可以帮助您轻松地识别性能问题、分析环境设置并发现代码中哪些部分正在被使用。

例如,如果您的应用程序在循环中多次运行相同的数据库查询,或者某个控制器操作运行时间过长,调试栏会突出显示这些瓶颈,以便您采取措施提高整体网站性能。

此模块将

  • 基于可用的钩子记录框架执行
  • 记录并分析数据库调用
  • 显示所有 SilverStripe 日志条目
  • 显示所有会话、cookie、需求、SiteConfig 和请求数据
  • 显示当前区域、框架/ CMS 版本、当前成员
  • 显示请求数据和时间分析以及内存消耗

通过 DebugBarMiddleware 自动将调试栏注入任何 HTML 响应中,并且仅在 "dev" 模式下运行。

Screenshot

执行时间线

执行时间线("时间线" 选项卡)为您提供每个控制器和操作的图形概述,列出每个操作完成所需的时间。

Execution timeline

上面的例子是从 CMS 加载页面时的示例。

数据库分析

"数据库" 选项卡允许您查看页面请求执行的所有数据库操作的列表,并将重复的查询分组在一起。这有助于识别性能可改进的区域,例如使用 DataObject::get_by_id()(它缓存结果)而不是 DataObject::get()->byID()

Database profiling

通过点击右下角的重复组徽章之一,您可以看到重复查询的组

Duplicate grouping

为了帮助您进行调试和优化应用程序,建议您保留 find_source 选项。这将帮助您确定触发查询的原因以及在何处适当实现缓存。

如果您使用 ?showqueries=1,您还会看到已优化以在页面上清晰地显示所有查询及其结果。

此外,请记住,如果您使用 d() 辅助函数,任何名称中包含 "sql" 的字符串变量都将格式化为 SQL 字符串。

长时间运行的查询

当某些查询运行时间过长时,它们将以红色突出显示,每个项目的请求时间(右侧以粗红色文字突出显示)。此时间阈值的设置可以通过修改 DebugBar.warn_dbqueries_threshold_seconds 配置 设置进行调整。

Long running queries

注意:上面的示例已被故意调整为简短。对于长时间运行的查询,默认阈值值为一秒。

大量查询

如果页面请求性能超过一定数量的查询,将向“消息”标签页发送警告信息。您可以使用DebugBar.warn_query_limit配置设置调整此阈值。

Query threshold warning

系统日志和消息

“消息”标签页将显示在页面执行过程中由SilverStripe记录器处理的所有内容

System logs and messages

您可以通过单击底右角的日志级别按钮之一来按类型筛选列表。

注意:有时,其他DebugBar组件也可能向此标签页发送消息。

模板使用

“模板”标签页将显示调用了多少模板,以及每个模板相对于项目根目录的文件路径。

仅在您正在刷新缓存(?flush=1)时才会填充此信息。当模板被缓存时,将显示通知,告知您刷新以查看完整列表。

Templates

部分缓存命中和未命中

“模板缓存”标签页显示您选择的局部缓存键的有效性(例如,<% cached 'navigation', $LastEdited %>...<% end_cached %>)。它通过指示一个键是否命中缓存来做到这一点。

Partial caching

环境和其它信息

调试栏的各种标签页和指示器中提供了各种有用的信息。请参阅下面的截图,并按顺序从左到右解释箭头

Other indicators

标签

  • 会话:显示当前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许可证