diff --git a/documentation/optimization.html b/documentation/optimization.html index b9cfbc9a77..28019dfcf7 100755 --- a/documentation/optimization.html +++ b/documentation/optimization.html @@ -171,9 +171,9 @@ An optional additional caching mechanism you may use is the realpath_cache_size See the PHP documentation for more details.
-
+

APC

-If you prefer using APC, + If you prefer using APC, you can use the same kind of trick as above, just changing the code a little:
     $xc = function_exists('apc_exists');
@@ -209,6 +209,76 @@ If you prefer using APC,
         }
      ...
 
+
+
+

APCu

+In PHP 5.5 and above, APC is rendered practically obsolete by the presence of ZendOPCache by default. + However, APC does not cover the "user cache", like the caching of specific variables in memory. + Considering this, you can APCu to add the same level of variable caching as described above, just changing the code a little: +
+function return_notification_menu()
+{
+    $_course = api_get_course_info();
+    $course_id = 0;
+    if (!empty($_course)) {
+        $course_id  = $_course['code'];
+    }
+
+    $user_id = api_get_user_id();
+
+    $html = '';
+    $cacheEnabled = function_exists('apcu_exists');
+
+    if ((api_get_setting('showonline', 'world') == 'true' && !$user_id) ||
+        (api_get_setting('showonline', 'users') == 'true' && $user_id) ||
+        (api_get_setting('showonline', 'course') == 'true' && $user_id && $course_id)
+    ) {
+
+        if ($cacheEnabled) {
+            $apc = apcu_cache_info(null,true);
+            $apc_end = $apc['start_time']+$apc['ttl'];
+            if (apcu_exists('my_campus_whoisonline_count_simple') AND (time() < $apc_end) AND apcu_fetch('my_campus_whoisonline_count_simple') > 0 ) {
+                $number = apcu_fetch('my_campus_whoisonline_count_simple');
+            } else {
+                $number = who_is_online_count(api_get_setting('time_limit_whosonline'));
+                apcu_clear_cache();
+                apcu_store('my_campus_whoisonline_count_simple',$number,15);
+            }
+        } else {
+            $number = who_is_online_count(api_get_setting('time_limit_whosonline'));
+        }
+
+        $number_online_in_course = 0;
+        if (!empty($_course['id'])) {
+            if ($cacheEnabled) {
+                $apc = apcu_cache_info(null,true);
+                $apc_end = $apc['start_time']+$apc['ttl'];
+                if (apcu_exists('my_campus_whoisonline_count_simple_'.$_course['id']) AND (time() < $apc_end) AND apcu_fetch('my_campus_whoisonline_count_simple_'.$_course['id']) > 0) {
+                    $number_online_in_course = apcu_fetch('my_campus_whoisonline_count_simple_'.$_course['id']);
+                } else {
+                    $number_online_in_course = who_is_online_in_this_course_count($user_id, api_get_setting('time_limit_whosonline'), $_course['id']);
+                    apcu_store('my_campus_whoisonline_count_simple_'.$_course['id'],$number_online_in_course,15);
+                }
+            } else {
+                $number_online_in_course = who_is_online_in_this_course_count(
+                    $user_id,
+                    api_get_setting('time_limit_whosonline'),
+                    $_course['id']
+                );
+            }
+        }
+
+        // Display the who's online of the platform
+        if ($number) {
+            if ((api_get_setting('showonline', 'world') == 'true' && !$user_id) ||
+                (api_get_setting('showonline', 'users') == 'true' && $user_id)
+            ) {
+                $html .= '
  • '. + Display::return_icon('user.png', get_lang('UsersOnline'), array(), ICON_SIZE_TINY).' '.$number.'
  • '; + } + } + ... +

    Memcached

    If you use php5-memcached (different set of functions than php5-memcache!), diff --git a/main/inc/lib/banner.lib.php b/main/inc/lib/banner.lib.php index ef80411b8b..9ab528f4d1 100755 --- a/main/inc/lib/banner.lib.php +++ b/main/inc/lib/banner.lib.php @@ -239,20 +239,45 @@ function return_notification_menu() $user_id = api_get_user_id(); $html = ''; - + $cacheEnabled = function_exists('apcu_exists'); + if ((api_get_setting('showonline', 'world') == 'true' && !$user_id) || (api_get_setting('showonline', 'users') == 'true' && $user_id) || (api_get_setting('showonline', 'course') == 'true' && $user_id && $course_id) ) { - $number = who_is_online_count(api_get_setting('time_limit_whosonline')); + + if ($cacheEnabled) { + $apc = apcu_cache_info(null,true); + $apc_end = $apc['start_time']+$apc['ttl']; + if (apcu_exists('my_campus_whoisonline_count_simple') AND (time() < $apc_end) AND apcu_fetch('my_campus_whoisonline_count_simple') > 0 ) { + $number = apcu_fetch('my_campus_whoisonline_count_simple'); + } else { + $number = who_is_online_count(api_get_setting('time_limit_whosonline')); + apcu_clear_cache(); + apcu_store('my_campus_whoisonline_count_simple',$number,15); + } + } else { + $number = who_is_online_count(api_get_setting('time_limit_whosonline')); + } $number_online_in_course = 0; if (!empty($_course['id'])) { - $number_online_in_course = who_is_online_in_this_course_count( - $user_id, - api_get_setting('time_limit_whosonline'), - $_course['id'] - ); + if ($cacheEnabled) { + $apc = apcu_cache_info(null,true); + $apc_end = $apc['start_time']+$apc['ttl']; + if (apcu_exists('my_campus_whoisonline_count_simple_'.$_course['id']) AND (time() < $apc_end) AND apcu_fetch('my_campus_whoisonline_count_simple_'.$_course['id']) > 0) { + $number_online_in_course = apcu_fetch('my_campus_whoisonline_count_simple_'.$_course['id']); + } else { + $number_online_in_course = who_is_online_in_this_course_count($user_id, api_get_setting('time_limit_whosonline'), $_course['id']); + apcu_store('my_campus_whoisonline_count_simple_'.$_course['id'],$number_online_in_course,15); + } + } else { + $number_online_in_course = who_is_online_in_this_course_count( + $user_id, + api_get_setting('time_limit_whosonline'), + $_course['id'] + ); + } } // Display the who's online of the platform