CakePHP模型加载需要一段时间

CakePHP模型加载需要一段时间,php,cakephp,optimization,cakephp-model,Php,Cakephp,Optimization,Cakephp Model,为什么是App::import('*','*'),以及模型加载需要约3-5毫秒 这是相当恼人的,当你有大约100个需要的模型为一个页面;加载核心和模型大约需要300毫秒 此外,我还看到,启用缓存系统后,加载时间并没有减少 对于一个需要很多模型的应用程序,您知道为什么要缩短这段时间这么长吗 提前谢谢 编辑:当我使用文件缓存系统(将调试模式设置为0)时,我看到缓存生成的文件的创建日期属性始终与上次生成页面时相同。这意味着缓存每次都在重新生成模型文件(尽管调试模式设置为0)。这正常吗 EDIT2:当我

为什么是
App::import('*','*'),以及模型加载需要约3-5毫秒

这是相当恼人的,当你有大约100个需要的模型为一个页面;加载核心和模型大约需要300毫秒

此外,我还看到,启用缓存系统后,加载时间并没有减少

对于一个需要很多模型的应用程序,您知道为什么要缩短这段时间这么长吗

提前谢谢

编辑:当我使用文件缓存系统(将调试模式设置为0)时,我看到缓存生成的文件的创建日期属性始终与上次生成页面时相同。这意味着缓存每次都在重新生成模型文件(尽管调试模式设置为0)。这正常吗

EDIT2:当我用记事本++打开模型缓存文件时,在开始处有我在其他缓存文件中没有的尾随“nul”标志(如persistent)


EDIT3:长话短说:为什么如果缓存系统打开,模型的加载时间与没有缓存系统时一样长?

真的,我看到了标签、用户、问题、评论、广告和一些自定义的查找查询。(本页)。在这种情况下,不需要将喜欢的、共享的或那些属性作为模型。如果您获得了这种粒度,那么您必须期望减轻加载问题


如果您需要在一个页面中使用30个模型,那么您正在做一些不合逻辑的事情,或者您的用例远远超出了规范。

需要注意的几点:

应用程序:导入(“”,“,”)正在加载所有内容,因此仅此一项就可以占用资源。如果您有一个包含30多个模型查询的页面-首先通过它们的关系获取数据。不要使用$this->loadModel()或$uses数组;CakePHP不是这样设计的。在这里查看我对更好做法的回答:

然后可以进一步限制获取的数据(这会提高速度):


Re:Cache——请阅读CakePHP书籍中的内容,其中列出了一些好的示例。如果您正在苦苦挣扎,可能值得切换到MemCache或其他专用系统,而不是CakePHP平面文件。

优化是一项相对的任务。您的时间和资源最好用于优化应用程序中消耗最多资源的部分。如果你的瓶颈只有3毫秒,那么我很难理解为什么你需要做任何优化


也就是说,如果你是一个非常好奇的人,想要找到你问题的答案,我建议你坐下来,自己对内部代码进行一些剖析,以分析哪些因素会影响执行时间。这可能是理解蛋糕内部结构如何工作的另一个有用资源。

FWIW,CakePHP 2使用延迟加载修复了这一问题。您确定调试模式已关闭吗?缓存在调试中被禁用。我使用的是CakePHP 2,我的页面/动作使用了大多数模型,所以不管加载是否延迟,都差不多。是的,调试模式已关闭,缓存已启用。仅为澄清,此页面需要查询100个模型,瓶颈确实是加载时间?只是确保你解决了正确的问题。不,大约有30个型号。看看这个页面,我确信它依赖于超过15个模型(对handel用户、标签、问题、编辑、评论、回复、喜欢、相关等等)。我刚刚做了一个观察(对于快速服务器,型号为3-5ms),我想知道原因,并希望有一个解决方案来解决它。每个型号都是3-5ms,因此,对于所有需要的型号,大约是100ms/请求,因为几乎每个请求都是一样的,我认为这是一件非常耗费资源的事情。我理解这一点,但我想让你问自己一个问题:值得我花一周时间在这件事上吗?这会为我的用户提供最边际的效用吗?很可能不是,但如果是这样的话,解决这个问题的唯一方法就是进行分析,找出Cake在3ms中的作用。顺便说一句,正如@Abba所说的,30个模型太多了。听起来你有一个更大的设计问题,我真的不这么认为。我的应用程序是一种社交网络,因此我在一个页面上要处理许多不同的数据。我有用户数据,用户及其与其他用户的关系,他们与页面的关系,他们对页面的评论,他们对页面的评分,页面的数据(页面的数据分为两个表,通用数据和本地化数据;此外,数据是版本连接的),页面的标签,页面的语言,等等…我已经在使用APC了,但无论如何,我想要的东西即使是第一次请求也不会太长。当我说App:import(“”,“,”)时,星号表示此处的通配符,而不是CakePHP,用您想要的watherver替换它;)