我有一個Cake Application v2.3.1在mamp v2.1.3上運行(不是親,所以這是最新版本)myapp.dev:port,我遇到一些非常慢的響應,當我有網站(約5秒)上的分頁,這是我在控制器代碼:CakePHP極慢的緩慢
public $paginate = array(
'fields' => array('Artist.id, Artist.year_born, Artist.year_died, Artist.country_born'),
'limit' => 50,
'order' => array('Artist.id' => 'desc')
);
我AppController.php使用Twitter的引導插件我分頁https://github.com/slywalker/TwitterBootstrap這樣的:
public $helpers = array('Paginator' => array('className' => 'TwitterBootstrap.BootstrapPaginator'));
我試圖將分頁的limit
設置爲1並嘗試使用蛋糕自己的分頁代替bootstrap,但它仍然非常慢。我必須是分頁的東西,因爲我可以像myapp.dev:port/artists/view/14532訪問一個藝術家,這很好,所以我不認爲它與SQL查詢有任何關係。
我試着改變/ etc/hosts文件中的名稱127.0.0.1 localhost myapp.dev
和::1 localhost myapp.dev
,但似乎沒有任何效果。有任何想法嗎?我很困難。
更新:感覺有點不好,因爲不提及我的藝術家表具有hasMany關係。這是我的藝人型號:
class Artist extends AppModel {
public $hasMany = array(
'ArtistBiography' => array('dependent' => true),
'ArtistSurname' => array('dependent' => true),
'ArtistSignature' => array('dependent' => true),
'ArtistForename' => array('dependent' => true),
'ArtistMonogram' => array('dependent' => true));
public $hasOne = array(
'ArtistActive' => array('dependent' => true));
}
我用DebugKit,我發現分頁程序做2個不必要querys兩個左聯接兩個大約需要2000毫秒每次執行。我該如何告訴分銷商忽略這一點?我嘗試了這樣一種新的關係:
public $paginate = array(
'fields' => array('Artist.id, Artist.year_born, Artist.year_died, Artist.country_born'),
'limit' => 50,
'order' => array('Artist.id' => 'desc'),
'joins' => array(
array('table' => 'artist_forenames', 'alias' => 'ArtistForename', 'type' `=> 'inner', 'conditions' => array('Artist.id = ArtistForename.artist_id')),`
array('table' => 'artist_surnames', 'alias' => 'ArtistSurname', 'type' => 'INNER', 'conditions' => array('Artist.id = ArtistSurname.artist_id'))),
'recursive' => -1
);
但我不知道如何使這項工作。我基本上想要加入artist_surnames
和artist_fornames
,並忽略兩個名爲artist.actives
和artist_monogram
的表,這兩個表一起以4000ms的速度降低查詢速度。
這裏我的第二個問題是爲什麼這兩個連接減慢了這麼多?我做了一個名爲artists/all的測試視圖,其中我列出了100位藝術家,在那裏我的查詢與所有聯接都在40-50ms左右完成。
使用DebugKit來確定實際需要這麼長時間。它顯示了一個Timer選項卡以及一個Sqllog選項卡。一旦你知道,讓我們知道,我們可以幫助更輕鬆。 – Dave
嘿Dave,我使用了DebugKit並更新了我的問題。謝謝 – bangerang