【问题标题】:General performance php / [big framework like doctrine / symfony] [closed]一般性能 php / [像学说 / symfony 这样的大框架] [关闭]
【发布时间】:2016-04-15 09:37:10
【问题描述】:

PHP 应用程序(使用学说作为 ORM 映射和/或 Symfony 或其他大型框架)是否适合高负载应用程序?我的意思是,每次网站或应用程序调用 php 文件时,都会加载整个框架项目。因为要使用框架,我需要包含“自动加载器”文件,并且在这个文件中,整个项目(我的项目和框架)被加载并进入内存。 因此,当我想象我的服务器每秒有 100 个请求并且每个请求都意味着调用 file.php -> 包含 autoload.php -> 自动加载整个框架文件 -> 做某事 -> 将输出发送给用户 -> 关闭连接时,这可以真的会占用大量内存吗?

或者是否有类似缓存的东西,当请求 1)将整个 php 文件(框架)加载到内存中,请求 2)在 1ms 之后,它可以使用内存中的文件?

也许有人可以帮助我了解 PHP 内部是如何工作的。

我在我的网络服务器上使用 FPM(FastCGI 进程管理器)。

【问题讨论】:

  • 这是一篇关于 Symfony 性能的文章 .. here
  • 并不是说听起来很刻薄,但您是否认真地尝试设计一个每秒 100 个请求的应用程序,而无需任何缓存或一般的 php 知识?
  • 这是一个极端的例子来说明我的担忧。让它每秒 10 个请求或每秒 1 个请求,只是想知道自动加载器是否将整个内容加载到内存中,并且每次有新请求进入时都会这样做。

标签: php performance symfony doctrine-orm


【解决方案1】:

首先,自动加载并不一定意味着整个框架都被加载到内存中。例如,composer 的自动加载器仅在实际实例化类时才加载所需的类。所以自动加载功能的要点是只加载需要的东西。

如果您使用的是 php5.5+,那么您有 opcache,它可以减少 php 应用程序的加载和加载时间,因为 php 操作码可以从缓存中加载。如果您使用的是 php7,那么它会更快。我已经用原则构建了几个应用程序,到目前为止还没有任何障碍。是的,将 ORM 作为数据库的抽象层会产生开销,但它是否超过了意大利面条代码?是的。如果您要将 PDO 与 Doctrine2 进行比较? PDO 获胜。但是你可以使用查询和元数据缓存等微调学说。我个人使用 redis 缓存的学说,它相当快。

【讨论】:

  • 感谢您的回答。我用php7。我不清楚作曲家自动加载器实际加载了什么。我以为它只加载每个类,但是当它只加载需要的东西(使用“use”导入的类?)时就可以了。
  • 当你调用“use”时它甚至不会加载类,它只会在你实例化它/调用静态方法或访问静态变量时加载类。在后台,它使用 spl_autoload_register 来注册处理自动加载的回调。见php.net/manual/en/function.spl-autoload-register.php
猜你喜欢
  • 1970-01-01
  • 2011-02-02
  • 2016-05-20
  • 2014-12-31
  • 1970-01-01
  • 2012-01-10
  • 1970-01-01
  • 1970-01-01
  • 2010-11-02
相关资源
最近更新 更多