From 1734cc35c881ad64612cbcb216c3bfd342ba2a13 Mon Sep 17 00:00:00 2001 From: Albert Santoni Date: Thu, 9 Apr 2015 13:03:06 -0400 Subject: [PATCH] Refactored session_write_close() optimization and dashboard preloading hack --- airtime_mvc/application/Bootstrap.php | 5 +++ .../controllers/LibraryController.php | 1 - .../controllers/ScheduleController.php | 16 ++++++--- .../controllers/ShowbuilderController.php | 2 -- .../controllers/UsersettingsController.php | 4 --- .../application/layouts/scripts/layout.phtml | 34 +++++++++---------- .../schedule/full-calendar-functions.js | 4 +-- 7 files changed, 35 insertions(+), 31 deletions(-) diff --git a/airtime_mvc/application/Bootstrap.php b/airtime_mvc/application/Bootstrap.php index 91736f51a..a2cf9f3d4 100644 --- a/airtime_mvc/application/Bootstrap.php +++ b/airtime_mvc/application/Bootstrap.php @@ -100,6 +100,11 @@ class Bootstrap extends Zend_Application_Bootstrap_Bootstrap $csrf_namespace->authtoken = sha1(uniqid(rand(),1)); $csrf_namespace->setExpirationSeconds(2*60*60); } + + //Here we are closing the session for writing because otherwise no requests + //in this session will be handled in parallel. This gives a major boost to the perceived performance + //of the application (page load times are more consistent, no lock contention). + session_write_close(); } /** diff --git a/airtime_mvc/application/controllers/LibraryController.php b/airtime_mvc/application/controllers/LibraryController.php index a42170d6d..212d57521 100644 --- a/airtime_mvc/application/controllers/LibraryController.php +++ b/airtime_mvc/application/controllers/LibraryController.php @@ -405,7 +405,6 @@ class LibraryController extends Zend_Controller_Action public function contentsFeedAction() { - session_write_close(); $params = $this->getRequest()->getParams(); # terrible name for the method below. it does not only search files. diff --git a/airtime_mvc/application/controllers/ScheduleController.php b/airtime_mvc/application/controllers/ScheduleController.php index 5f81335de..218341599 100644 --- a/airtime_mvc/application/controllers/ScheduleController.php +++ b/airtime_mvc/application/controllers/ScheduleController.php @@ -123,7 +123,6 @@ class ScheduleController extends Zend_Controller_Action public function eventFeedAction() { - session_write_close(); $service_user = new Application_Service_UserService(); $currentUser = $service_user->getCurrentUser(); @@ -145,7 +144,6 @@ class ScheduleController extends Zend_Controller_Action $userInfo = Zend_Auth::getInstance()->getStorage()->read(); $user = new Application_Model_User($userInfo->id); $editable = $user->isUserType(array(UTYPE_SUPERADMIN, UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER)); - session_write_close(); $calendar_interval = Application_Model_Preference::GetCalendarTimeScale(); if ($calendar_interval == "agendaDay") { @@ -164,7 +162,6 @@ class ScheduleController extends Zend_Controller_Action public function getCurrentShowAction() { - session_write_close(); $currentShow = Application_Model_Show::getCurrentShow(); if (!empty($currentShow)) { $this->view->si_id = $currentShow[0]["instance_id"]; @@ -304,9 +301,19 @@ class ScheduleController extends Zend_Controller_Action } } + /** This is a nasty hack to let us embed the the data the dashboard needs into the HTML response for each page. + * This was originally loaded AFTER page load by AJAX, which is needlessly slow. This should have been templated in. + */ + public static function printCurrentPlaylistForEmbedding() + { + $front = Zend_Controller_Front::getInstance(); + $foo = new ScheduleController($front->getRequest(), $front->getResponse()); + $foo->getCurrentPlaylistAction(); + echo(json_encode($foo->view)); + } + public function getCurrentPlaylistAction() { - session_write_close(); $range = Application_Model_Schedule::GetPlayOrderRangeOld(); $show = Application_Model_Show::getCurrentShow(); @@ -715,7 +722,6 @@ class ScheduleController extends Zend_Controller_Action */ public function setTimeScaleAction() { - session_write_close(); Application_Model_Preference::SetCalendarTimeScale($this->_getParam('timeScale')); } diff --git a/airtime_mvc/application/controllers/ShowbuilderController.php b/airtime_mvc/application/controllers/ShowbuilderController.php index 075281761..3bb30abf4 100644 --- a/airtime_mvc/application/controllers/ShowbuilderController.php +++ b/airtime_mvc/application/controllers/ShowbuilderController.php @@ -246,7 +246,6 @@ class ShowbuilderController extends Zend_Controller_Action public function checkBuilderFeedAction() { - session_write_close(); $request = $this->getRequest(); $show_filter = intval($request->getParam("showFilter", 0)); $my_shows = intval($request->getParam("myShows", 0)); @@ -266,7 +265,6 @@ class ShowbuilderController extends Zend_Controller_Action public function builderFeedAction() { - session_write_close(); $current_time = time(); $request = $this->getRequest(); diff --git a/airtime_mvc/application/controllers/UsersettingsController.php b/airtime_mvc/application/controllers/UsersettingsController.php index bda20e122..86b366fc8 100644 --- a/airtime_mvc/application/controllers/UsersettingsController.php +++ b/airtime_mvc/application/controllers/UsersettingsController.php @@ -37,7 +37,6 @@ class UsersettingsController extends Zend_Controller_Action public function setLibraryDatatableAction() { - session_write_close(); $request = $this->getRequest(); $settings = $request->getParam("settings"); @@ -46,7 +45,6 @@ class UsersettingsController extends Zend_Controller_Action public function getLibraryDatatableAction() { - session_write_close(); $data = Application_Model_Preference::getCurrentLibraryTableSetting(); if (!is_null($data)) { $this->view->settings = $data; @@ -55,7 +53,6 @@ class UsersettingsController extends Zend_Controller_Action public function setTimelineDatatableAction() { - session_write_close(); $request = $this->getRequest(); $settings = $request->getParam("settings"); @@ -64,7 +61,6 @@ class UsersettingsController extends Zend_Controller_Action public function getTimelineDatatableAction() { - session_write_close(); $data = Application_Model_Preference::getTimelineDatatableSetting(); if (!is_null($data)) { $this->view->settings = $data; diff --git a/airtime_mvc/application/layouts/scripts/layout.phtml b/airtime_mvc/application/layouts/scripts/layout.phtml index 93c758c28..e84083e8d 100644 --- a/airtime_mvc/application/layouts/scripts/layout.phtml +++ b/airtime_mvc/application/layouts/scripts/layout.phtml @@ -19,23 +19,6 @@ j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= })(window,document,'script','dataLayer','GTM-55N6NH'); - - partial('partialviews/trialBox.phtml', array("is_trial"=>$this->isTrial(), "trial_remain"=> $this->trialRemaining())) ?>
versionNotify(); @@ -46,6 +29,23 @@ j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= "scheduled_play_switch"=>$sss['scheduled_play'])) ?> navigation()->menu()->setPartial($partial); ?> + + + + +