これにアプローチする方法がわかりません。私のアプリケーション (Zend Framework、MySQL、jQuery) では、ページの 1 つがロードに 10 秒以上かかっています。
データベースから 400 件未満のレコードをロードしているので、ボトルネックは MySQL にあるとは思いません。確かに、関連するテーブルでのサーバー側の選択は問題ではありません。
379 rows in set (0.00 sec)
Firebug は、元のリクエストでサーバーの応答を待機していると遅延を報告します。「0 ---> 11.09s Waiting」。これは最初のリクエストであり、その後すべての jQuery コードがロードされ、onLoad 時間は 11.54 秒です。したがって、jQuery もボトルネックではないようです。
応答にこれほど長い時間がかかるコントローラー/アクションは他にないため、Apache の問題であるとは考えられません。ZF自体を残します。
遅延が発生する場所をテストする方法があるのだろうか。関連するアクションの全文は次のとおりです。
public function listAction()
{
$userDepts = new Application_Model_DbTable_UserDepartments;
$ptcpDepts = new Application_Model_DbTable_ParticipantDepts;
$participants = new Application_Model_DbTable_Participants;
$depts = new Application_Model_DbTable_Depts;
$ptcpAlerts = new Application_Model_DbTable_AlertsParticipants;
//check if sub-list is being passed
if ($this->_helper->flashMessenger->getMessages()) {
$passedList = $this->_helper->flashMessenger->getMessages();
$list = $passedList['0'];
} else {
$list = $participants->getStaffPtcps();
}
$goodList = array_unique($list);
$number = count($goodList);
$content = array();
foreach ($goodList as $id) {
$deptNames = array();
$ptcpInfo = $participants->getRecord($id);
$ptcpDept = $ptcpDepts->getList('depts', $id);
$flags = $ptcpAlerts->getPtcpAlerts($id);
if (count($flags) > 0) {
$flagTest = TRUE;
} else {
$flagTest = FALSE;
}
foreach ($ptcpDept as $did) {
$deptName = $depts->getDept($did);
$deptNames[$did] = $deptName['deptName'];
}
$content[$id] = $ptcpInfo;
$content[$id]['depts'] = $deptNames;
$content[$id]['flag'] = $flagTest;
}
foreach ($content as $c => $key) {
$sortLastName[] = $key['lastName'];
}
array_multisort($sortLastName, SORT_ASC, $content);
$this->view->list = $content;
$this->view->count = $number;
$this->view->layout()->customJS =
'<script type="text/javascript" src="/js/datePicker.js"></script>' .
'<script type="text/javascript" src="/js/ptcpCreate.js"></script>' .
'<script type="text/javascript" src="/js/editDataWithModal.js"></script>' .
'<script type="text/javascript" src="/js/filter.js"></script>';
$form = new Application_Form_AddParticipant;
$this->view->form = $form;
}
このコードの最適化に関するアイデア、または他の場所を探すためのポインタを大歓迎します!