【问题标题】:Profiling PHP app, 50% of time busy constructing classes -- is this OK?分析 PHP 应用程序,50% 的时间忙于构建类——这样可以吗?
【发布时间】:2023-03-14 12:43:01
【问题描述】:

我有一个用 PHP 编写的 Web 应用程序。它使用 MySQL 进行数据存储。今天我决定分析它以找出代码中的瓶颈,并找出它的哪些部分运行得比其他部分慢。平常的东西。我做了很多工作,现在我的页面在桌面上的加载时间不到 0.05 秒。

但是现在我的分析器告诉我,我的应用程序有一半时间都在忙于构建类。 Front 控制器需要ConfigDatabaseUser 类,它们在__construct() 中有自己的事情要做,然后它加载Page 控制器,它加载CacheView,然后它会触发Pagemain() 方法。所有这些东西都占用了总工作时间的 50%。剩下的50%用于查询db,处理查询结果输出到View

问题是:这样可以吗? “50% 用于建筑”的事情?这是否意味着我很好地优化了我的应用程序?我被告知,Web 应用程序最耗时的操作是数据库查询。我优化了它们,应用了一些缓存,现在它们完全在控制之下。而且我实际上对如何优化班级建设一无所知。我应该尝试优化这些__construct() 方法还是保留它们?

【问题讨论】:

    标签: php performance optimization profiling


    【解决方案1】:

    我不会太担心;如果您在完成渲染页面之前没有对数据做很多事情,那么运行它的大部分时间将花费在您的类的构造函数中,但这应该或多或少地保持不变。如果您在控制器中运行了很多逻辑,并且您的分析器仍然告诉您它正在花费大量时间来启动您的应用程序,那么您可能需要考虑优化;请记住,过早的优化是一件非常糟糕的事情,您最好将时间花在开发新功能或修复错误上,除非应用程序的执行时间慢到足以被视为错误。

    【讨论】:

    • 是的,这个构建时间似乎或多或少是恒定的,是的。一个很好的观点。
    【解决方案2】:

    是构造函数还是构造调用的函数?您是否正在使用可以查看这 50% 的组成部分的工具?因为大部分工作可能是调用其他函数。

    【讨论】:

    • 我不确定您所说的“构造功能”是什么意思。例如,__construct() 方法中的我的 User 类获取 DatabaseConfig 类的实例,定义一些默认值,然后尝试找出当前用户是否登录注册用户或一些匿名用户(1 查询D b)。所有这些东西都需要 0.02 秒,或大约 20% 的加载时间。
    • 我的意思是构造函数占用了 50% 的处理时间。各个组件的时间是多少?构造函数中的内容需要多长时间。
    【解决方案3】:

    我曾经不得不在 Drupal 站点中集成一些 Web 服务。

    所以我最终做了一些分析,结果发现 Drupal 引导程序使用了 90% 的时间,而我的代码使用了剩下的 10%。 Drupal 的设计很糟糕 :),所以它加载了很多它并没有真正使用的东西。

    我认为由你来决定你的情况。

    【讨论】:

      猜你喜欢
      • 2012-07-21
      • 2019-12-15
      • 1970-01-01
      • 2015-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多