env('APP_DEBUG',1) 和 Log::debug 将如何影响 Lumen/Laravel 中的性能?

How env('APP_DEBUG',1) and Log::debug will impact the performance in Lumen/Laravel?

我正在使用 Lumen 和 Laravel 构建应用程序,我在许多地方使用 env 和 Log::debug

现在,当我将我的应用程序推向生产时,env 和 Log::debug 会影响性能吗?

我应该在我的代码中替换它们吗?

谢谢

首先,您不应该在配置文件以外的任何地方使用 env() 助手。它应该只是一种用环境变量填充配置文件的方法。这主要是由于配置缓存,您可以在此处阅读更多相关信息 https://laravel.com/docs/5.7/configuration#configuration-caching

因此,如果您有配置缓存,那么 env('APP_DEBUG',1) 将始终 return 1,您应该使用 config('app.debug',1).

现在,谈到您的性能问题,将某些内容写入日志是有代价的。老实说,我只是不知道所以我对我当前打开的 vagrant box 做了一个简单的测试。

for($i = 0; $i < 100000; $i++){ Log::debug("helloworld"); }; => 7.7 秒

for($i = 0; $i < 100000; $i++){}; => 0.0007 秒

就是说,在实际用例中,您很少进行这种循环,添加日志的好处是值得的。此处添加日志的成本为每次迭代 0.00007 秒,实际上并不多。

访问配置 howerer 几乎没有成本,因为相同的测试,对于 100 000 次迭代,需要 0.1713 秒:)

Laravel 的日志基本上执行文件写入操作,或者可能第 3 方调用系统(如 slack)以获取日志通知。这取决于您为哪个日志级别设置了哪些驱动程序。 more info

  • Log:debug() 实时记录自定义 messages/debug 跟踪不会对大量请求产生太大影响,但如果它出现在每个页面的 header/footer 上并且每秒调用 1000 次,我会说您正在为每个请求添加额外的日志记录操作。
  • 但这也取决于您记录的内容。如果它是一个字符串消息那么 很好,但是您正在记录一个大的集合对象,那么我会 说它会对请求的响应时间有一点影响。

  • 其次,APP_DEBUG是一些包使用的标志,用于额外计算并为您提供在开发过程中有用的信息。例如像 barryvdh/laravel-debugbar 这样的包。如果您在生产环境中使用 APP_DEBUG=true 启用了此类软件包,这将消耗一些额外的内存。

  • APP_DEBUG 还会使用异常堆栈跟踪转储您的错误。在生产中,您可能希望隐藏该信息并只显示标准错误页面。所以我会鼓励你在直播中禁用 APP_DEBUG=false。