我有一个非常大的AppController。近75个功能和130千字节。这似乎会减慢我的系统速度。因此,我需要将这些函数放在另一个文件中,并在其他控制器需要时包含该文件。
选项正在创建新的controller或新的component。我正在尝试做出选择。什么是优点或缺点?
我的观点是:
在我的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将不会加载所有逻辑。
答案 0 :(得分:3)
遵循以下模式:
这将使您的控制器更薄。考虑到你真的不想在任何其他项目或网站的一部分中使用这些功能,创建其他控制器应该是你的最后一次机会。
答案 1 :(得分:2)
函数的数量和文件的大小绝对不会影响执行代码所需的时间。
示例:this已加载超过50个插件,100个控制器,84k行代码并且页面加载速度相当快。
您需要查看正在运行的查询。我怀疑您使用recursive
设置为1
或2
的查询。你应该至少使用containable。
另请查看explain
您的选择。如果您正在使用mysql检查,或者您的引擎有什么相似的内容。
您还可以安装debug kit,其中显示了很多关于花费时间并且可以加速的内容。
答案 2 :(得分:1)
从我可以阅读的内容中,您可能认为将AppController分成多个不同的文件是最好的。没有看到你的AppController看起来像它承担了很多不同的角色。
也许最好为Mytable1,MyTable2,Mytable3,Mytable4使用不同的控制器,并使用Components在它们之间共享任何信息。
要回答你的问题,就是使用BOTH,并使用Libs和Helpers。必要时控制器和必要时的组件。将巨大的AppController更改为一个巨大的组件是没有意义的。在您看到共同点的地方拆分文件。但是,如ImageController或Postcontroller,都会使用Session Component。
编辑:如何将$ helpers,$ components和$ uses从AppController更改为Individual控制器?使用关系使CakePHP可以找到模型。并确保控制器没有加载额外的模型/类,因为我怀疑一个大的控制器会导致迟缓(除非你的代码)