【问题标题】:Diagnosing Response Times诊断响应时间
【发布时间】:2016-12-15 22:33:48
【问题描述】:

我在诊断响应时间较长的原因方面没有太多经验,所以我很想从更有经验的人那里了解一些方法。

我有一个分页记录的简单索引页面,每次单击加载新页面时,它都会显示 25 条记录的响应时间略高于 300 毫秒。拉取记录的查询并不复杂,也许 300 毫秒并不长。但我仍然想知道如何找出花费大部分时间的原因,因为感觉就像是花费了一些时间。

我可以使用哪些工具或方法来找出任何瓶颈?提前致谢。

【问题讨论】:

  • 看看xhprof。
  • 调试栏,也是同一台服务器上的数据库我在一个简单的查询上等待了很长时间才发现当你不在同一台机器上运行数据库服务器时响应非常慢.
  • Chrome 开发者工具 > 网络选项卡...它将显示所有 HTTP 请求,包括响应时间。一旦您确切地确定了哪个请求是瓶颈,您就可以开始查看服务器端代码以了解为什么它需要这么长时间。除此之外,您还可以使用 Timeline 和 Performance 选项卡或 Batarang 扩展在客户端进行更高级的性能分析。
  • 谢谢大家。我会检查这些。是的,数据库与 Apache 在同一台服务器上。

标签: angularjs laravel optimization developer-tools


【解决方案1】:

DebugBar 是一种更好地了解 Laravel 应用程序执行情况的好方法。它将分解所有 SQL 查询并提供时间。

除了 DebugBar,添加一个简单的 Benchmarking 类是我经常使用的另一种策略。为此,请在应用程序的一开始就启动一个计时器。这是我过去使用过的示例类(做了一些调整,没有测试下面的代码):

<?php

class Benchmark
{
    public static $events = [];

    public static function start()
    {
        static::$events = [];
        static::bench('start');
    }

    public static function end()
    {
        static::bench('end');
    }

    public static function bench($event)
    {
        static::$events[$event] = static::time();
    }

    public static function time()
    {
        list($msec, $sec) = explode(" ", microtime());
        return ($msec+$sec) - static::$events['start'];
    }

    public static function report()
    {
        print_r(static::$events);
    }
}

实施将是:

Benchmark::start();
Benchmark::bench('finished big query');
Benchmark::end();

然后在执行结束时在某处打印出基准:

<?php Benchmark::report() ?>

检查 MySQL

大多数情况下,减速是数据库。

如果您发现某个特定查询会降低页面加载速度,请使用 MySQL slow query log 进一步隔离问题,并使用 MySQL explain 命令剖析查询以进行改进。

【讨论】:

  • 太好了,感谢您的解释。我一定会去看看的。
猜你喜欢
  • 1970-01-01
  • 2012-10-20
  • 2018-03-23
  • 1970-01-01
  • 1970-01-01
  • 2014-04-18
  • 1970-01-01
  • 1970-01-01
  • 2018-10-03
相关资源
最近更新 更多