【问题标题】:CakePhp speed optimizationCakePhp 速度优化
【发布时间】:2013-03-11 18:59:24
【问题描述】:

我的应用运行缓慢。我正在使用 Cakephp 2.3.1 版本。在需要的函数中加载模型、组件和助手是否有益?现在我在课堂上给他们打电话。例如:

class PanelsController extends AppController {
public $name = 'Panel';
public $uses = array(list of models goes here);
public $components = array(list of components goes here);
    .................
}

您还有什么其他建议。谢谢

【问题讨论】:

  • 只在需要的地方加载模型,延迟加载 = 太糟糕了!此外,检查 SQL 查询。理想情况下,它们将成为瓶颈。
  • @KarmicDice 实际上在本地主机上一切正常,当我将应用程序转移到 Godaddy 服务器时出现问题:(
  • 如果您的模型设置正确,您不应该经常或根本不使用$uses。 Cake 默认会加载你需要的模型。如果您的模型和关联很大,请开始使用可包含的行为来获得所需的内容。 book.cakephp.org/2.0/en/core-libraries/behaviors/…
  • 也许您可以将其标记为登台服务器并通过调试 2 进行检查?
  • 还要检查您的数据库是否被远程调用。众所周知,Godaddy 的远程 mysql 数据库连接速度很慢。

标签: cakephp cakephp-2.0


【解决方案1】:

如果网站运行缓慢,我会检查以下内容

速度优化

  1. 启用caching
  2. 压缩 JS 和 CSS。 (A nice plugin that does this)
  3. A good speed optimization checklist

蛋糕做法

  1. Cake 约定是您最好的指导方针,该框架旨在根据其约定进行扩展。

  2. RecursionContainable,默认情况下,Cake 会在触发查询时获取所有相关数据。递归级别和可包含行为都可以限制检索的数据量。如果 cake 默认获取所有相关数据并不意味着您必须保持这种方式。

  3. 保持数据库标准化。这将允许您推迟许多进程。例如。检索帖子时,cake 会自动获取其所有相关数据(标签、cmets)。但是,当您拥有高阶规范化数据库时,您可以推迟从 XHR/AJAX 请求加载 cmets。这也将允许您从评论的模型、控制器和视图中提供与评论相关的逻辑。即使你为他们带来了相关的模型数据集限制。

  4. 您还可以通过使用计数器缓存来放弃对相关数据的计数器查询需求。 More Details here

  5. Cache your view

  6. 您也可以手动缓存查询结果,

    Cache::write($this->Post->find("all"));
    

尝试一下,您应该能够体验到惊人的速度提升。

最后,我确实相信应用程序的架构在性能方面发挥着重要作用。有时,我们必须将某些逻辑从请求生命周期中分离出来以提高性能。

【讨论】:

    【解决方案2】:

    public $uses() 没关系。您可以根据需要添加任意数量。如果需要,Cake 只会延迟加载它们。 只需确保您在 AppModel 中默认获得 recursive = -1,并且只提出它或包含您真正需要的数据。

    但是您的组件都将立即加载和初始化。 你可能想减少这些。

    不过,这两个属性不能成为您的瓶颈。你肯定还有其他一些严重的问题。

    也不要在调试模式下做出假设。实际速度是通过调试 0 测量/观察的,其中没有收集额外的调试信息,缓存也不会不断更换。

    编辑:请注意,我上面的话仅是从“速度的角度来看”。速度无关紧要。但是,如果您能够通过关系和关系链访问模型,则不建议在 $uses 中添加模型。

    假设您想制作一个仪表板。在大多数情况下您只需要添加“用户”模型,因为 Profile、Images 和其他模型通常可以通过$this->User->Profile->foo($bar) 等直接访问。

    【讨论】:

    • 假设我在 $uses 中定义了大约 10 个模型,并且我只需要 Manager 模型来进行以下查询,例如:$this -> Manager -> find('all'),Cake 是否只从 $uses 加载 Manager 模型或所有模型都将被加载...?
    • 递归 = -1 并且只包含模型当然是 Manager 模型(在 2.x 中)
    • @user1871640 您可能需要重新考虑您的架构。你是说你在同一个控制器上使用了 10 种不同的型号?
    • 马克,我很惊讶你鼓励人们将大量模型填充到 $uses 中,更不用说更好的方法了。使用模型的正确方法是通过关联。我见过很多愚蠢的事情,包括完全不使用 assocs 的应用程序,但到处都是 $uses 和 loadModel()...
    • 我不鼓励任何事情。我只是陈述事实:从速度的角度来看,这并不重要。这就是问题所在。如果你看不到我很同情你。也没有理由拒绝投票。不过,我将添加一个声明来澄清这一点。
    【解决方案3】:

    你可以在 cakephp 中使用缓存技术来减少时间,文档见这里:http://book.cakephp.org/2.0/en/core-libraries/caching.html

    不要使用加载模型,大数据代码会产生问题。

    这里有一篇文章供您参考:(加速 cakephp 应用程序的提示) http://www.dereuromark.de/2012/02/13/what-really-speeds-up-your-cakephp-app/

    【讨论】:

      【解决方案4】:

      cakephp 应用程序缓慢可能是由很多原因造成的,目前经历过:

      • 正在尝试进行 dns 查找的 mysql 服务器
      • 呈现包含通过反向路由组装的大量链接的页面
      • 内存问题

      查找的最佳方法似乎是安装XDEBUG1 并检查分析信息

      【讨论】:

        猜你喜欢
        • 2011-08-01
        • 2016-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-17
        • 2020-01-19
        • 2020-01-09
        • 1970-01-01
        相关资源
        最近更新 更多