Matomo -分析代码

通过分析代码,您可以很容易地发现代码中的性能瓶颈,并找出某些代码缓慢的原因和位置。

PHP

内核支持使用xhprof或者是潮流PHP扩展(只需要其中一个)。您通常可以像这样安装这些扩展Pecl安装xhprof。我们通常尝试使用xhprof(可能不适用于某些PHP版本)和回退到潮流如果这行不通的话。原因是当地的潮流扩展我们有输出目录的问题,在过去的配置文件运行结果被写入不匹配的目录时,查看报告运行,我们有时不得不修补xhprof文件,使此工作。

一般建议

在分析时,我们需要确保尽可能接近地分析一个生产系统。这意味着我们应该遵循以下步骤:

  • 禁用开发模式(因此将使用缓存)
  • 通过执行一次想要分析的操作来预热缓存,以便在下一个请求中分析时使用缓存
  • 理想情况下,你有一个快速的磁盘,否则结果可能不会那么准确。例如,如果您正在使用虚拟机,磁盘有时可能比平时慢
  • 你可能需要打电话php的作曲家。Phar install——no-dev -o——ignore-platform-reqs确保自动加载器正确使用,不会试图找到文件

UI和API

你可以添加&xhprof = 1到任何Matomo URL,它应该自动启动剖析器。

跟踪

您需要编辑该文件piwik.php并在环境正在初始化,但在自动加载器配置之后添加下面的行。这是典型的这条线

目前不可能简单地设置xhprof URL参数。

\ Piwik \分析器:setupProfilerXHProf(真的,真的);

控制台(例如CLI、测试、…)

可以追加CLI选项——xhprof开始分析运行。

其他部分

如果不能分析某些内容,那么您可能需要调用跟踪器部分中提到的上述方法来启动分析。

概要分析器将自动停止记录,只要register_shutdown_function调用并将结果写入文件(参见下一节)。

配置文件运行的存储

文件将被存储为{runId} - {profilerNamespace} .xhprof的配置目录下xhprof.output_dirPHP ini设置。如果没有配置,那么它可能会回落到sys_get_temp_dir ()比如/ tmp。请注意,当ini设置未设置时,在查看运行时可能无法定位xhprof文件。

分析器名称空间可以是git分支的名称。

查看概要文件运行

在概要运行结束时,将打印一个URL以查看报告。这个URL大致是这样的:

https://your-matomo-domain/vendor/lox/xhprof/xhprof_html/?source= profilerNamespace&run = runId美元

如果您正在使用Apache,那么您可能需要删除该文件供应商/ . htaccess以便能够查看所记录的运行。

要记住的事情

  • 如果在一个函数中有许多(如成百上千)函数调用(例如内置函数或一般),这总是会在概要运行结果中增加一些额外的开销/时间,但在实际生活中不会有那么大的问题

数据库查询

编辑你的配置/ config.ini.php然后激活设置(调试)enable_sql_profiler = 1。任何执行的查询都将被记录到DB表中{table_prefix} _log_profiling包括执行此查询的时间数和执行此查询所花费的时间。您需要对表进行排序idprofiling查找最近执行的查询。

如果你喜欢将SQL查询信息记录到一个文件中,那么你可以将这些配置添加到你的配置文件中:

[log] log_writers[] = file log_level=debug

当将日志级别设置为调试,然后它会记录/打印更多的信息,这就是为什么你可能不想记录到屏幕而您有这个日志级别设置,只记录到文件。

跟踪器

如果还想分析跟踪器DB查询,那么还需要启用(追踪)enable_sql_profiler = 1而且跟踪调试= 1。当您发出跟踪请求时,各个查询将作为跟踪器调试输出的一部分打印出来。请注意,HTML将不会被评估,因为它将是一个文本响应,您可能需要复制/粘贴到HTML文件中,以更好地查看它。

分析特定查询

你可以这样分析一个特定的查询:

SET会话分析= 1;Select sql_no_cache * from…显示配置文件;

你还可以获得更多的查询细节,例如:为查询16显示概要CPU;。了解更多有关这方面的信息用于分析的MySQL文档

当分析一个查询(在MySQL 5.7.20之前)或检查一个查询需要多长时间加载时,使用它很重要SQL_NO_CACHE选择语句,以防止使用任何缓存并给出错误的结果。另外,要注意MySQL文档警告“由于解析器中的限制,空格字符必须在SQL_NO_CACHE关键字的前面和后面;像换行符这样的非空格会导致服务器检查查询缓存,看看结果是否已经被缓存了”。

理解查询执行

为了获得更多关于查询的见解,比如它可能会查看多少行,它是否使用索引等,只需添加前缀解释扩展解释格式= json解释格式=树到SQL选择查询。点击这里了解更多。

自MySQL 8.0.18起也有解释分析它通过测量查询执行计划的每个步骤来分解查询执行阶段,这可以更容易阅读和理解。了解更多在这里而且在这里

JavaScript

这取决于浏览器。你基本上需要打开浏览器开发工具并激活性能选项卡。

在那里您可以开始录制(或者开始录制并直接触发页面重新加载)。当你停止记录时,你会得到一份花费在JavaScript、渲染、网络等方面的时间明细。您可以深入到不同的JavaScript方法,以查看导致问题的原因等。

Baidu