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