1

我有一个非常大的 AppController。近 75 个函数和 130 KB。这似乎减慢了我的系统。因此,我需要将这些函数放在另一个文件中,并在其他控制器需要时包含该文件。

选项是创建一个新的控制器或一个新的组件。我正在尝试做出选择。有什么优点或缺点?

我的观点是:

  • 我不打算在另一个项目中使用这些功能。这些功能只会被本项目使用。
  • 在我的 AppController 中,我使用这些文件、模型、组件。所以它们应该可以通过新结构访问。

    App::import('Vendor', 'MyFancyVendor', array('file' => 'MyFancyVendor.php'));
    App::uses('CakeEmail', 'Network/Email');
    
    public $uses = array('Mytable1', 'Mytable2', 'Mytable3', 'Mytable4');  
    public $components    = array('Session');  
    public $helpers = array('Session','Html');
    

编辑:虽然使用一个巨大的新控制器/组件似乎与旧结构相同,但不同之处在于:说 MyController12 和 MyController13 不使用 AppController 内部这些巨大功能的方法。但是由于 MyController12 是从 AppController 创建的,它会加载模型、组件和其他不需要的东西。如果我将这些逻辑从 AppController 中取出,MyController12 将不会加载所有这些逻辑。

4

3 回答 3

3

遵循这个模式:

  • 收集库中的所有相关功能。
  • 移动模型中的所有数据逻辑。
  • 将所有视图逻辑移动到视图中(记住视图不是模板)
  • 对于剩下的任何东西,创建一些助手

这将使您的控制器更薄。考虑到您真的不想在任何其他项目或网站的一部分中使用此类功能,创建其他控制器应该是您最后的机会。

于 2012-12-19T09:04:26.417 回答
2

函数的数量和文件的大小对代码执行的时间绝对没有影响。

示例:加载了50 多个插件、100 个控制器、84k 行代码,并且页面加载速度相当快。

您需要查看正在运行的查询。我怀疑您正在使用recursive设置为1或的查询2。您至少应该使用可包含的

另请查看explain您的选择。如果您使用的是mysql,请检查它,或者您的引擎是否类似。

您还可以安装调试工具包,它会显示很多关于需要时间的内容并且可以加快速度。

于 2012-12-19T22:24:54.687 回答
1

据我所知,最好将 AppController 划分为多个不同的文件。在没有看到您的 AppController 的情况下,它似乎承担了许多不同的角色。

也许对 Mytable1、MyTable2、Mytable3、Mytable4 使用不同的控制器会更好,并使用组件在它们之间共享任何信息。

要回答您的问题,既要使用 BOTH,也要使用 Libs 和 Helpers。必要时使用控制器,必要时使用组件。将您巨大的 AppController 更改为一个巨大的组件是没有意义的。在您看到共同点的地方拆分文件。但是,例如 ImageController 或 Postcontroller,两者都将使用 Session 组件。

编辑:如何将 $helpers、$components 和 $uses 从 AppController 更改为 Individual 控制器?使用关系以便 CakePHP 可以找到模型。并确保控制器没有加载额外的模型/类,因为我怀疑一个大控制器会导致迟缓(除非它是你的代码)

于 2012-12-19T09:09:39.700 回答