Major - Introduce global APCu check and store user info in APCu in api_get_user_info(), removing about 60K function calls in some cases if APCu is present.

pull/2487/head
Yannick Warnier 9 years ago
parent 6f47c441db
commit ea01f20da9
  1. 6
      main/inc/global.inc.php
  2. 40
      main/inc/lib/api.lib.php

@ -192,6 +192,12 @@ if (!empty($_configuration['multiple_access_urls'])) {
$_configuration['access_url'] = 1;
}
// Check if APCu is available. If so, store the value in $_configuration
if (extension_loaded('apcu')) {
$_configuration['apc'] = true;
$_configuration['apcPrefix'] = $_configuration['main_database'].'_'.$_configuration['access_url'].'_';
}
$charset = 'UTF-8';
// Enables the portability layer and configures PHP for UTF-8

@ -1459,17 +1459,45 @@ function api_get_user_info(
$loadOnlyVisibleExtraData = false,
$loadAvatars = true
) {
global $_configuration;
$apcVar = null;
if (empty($user_id)) {
$userFromSession = Session::read('_user');
if (isset($userFromSession)) {
return _api_format_user($userFromSession, $showPassword, $loadAvatars);
if (!empty($_configuration['apc'])) {
$apcVar = $_configuration['apcPrefix'] . 'userinfo_' . $userFromSession['user_id'];
if (apcu_exists($apcVar)) {
$user = apcu_fetch($apcVar);
} else {
$user = _api_format_user($userFromSession, $showPassword, $loadAvatars);
apcu_store($apcVar, $user, 60);
}
} else {
$user = _api_format_user($userFromSession, $showPassword, $loadAvatars);
}
return $user;
}
return false;
}
$sql = "SELECT * FROM ".Database :: get_main_table(TABLE_MAIN_USER)."
WHERE id='".intval($user_id)."'";
// Make sure user_id is safe
$user_id = intval($user_id);
// Re-use user information if not stale and already stored in APCu
if (!empty($_configuration['apc'])) {
$apcVar = $_configuration['apcPrefix'].'userinfo_'.$user_id;
if (apcu_exists($apcVar)) {
$user = apcu_fetch($apcVar);
return $user;
}
}
$sql = "SELECT * FROM " . Database:: get_main_table(TABLE_MAIN_USER) . "
WHERE id = $user_id";
$result = Database::query($sql);
if (Database::num_rows($result) > 0) {
$result_array = Database::fetch_array($result);
@ -1500,9 +1528,11 @@ function api_get_user_info(
);
}
$user = _api_format_user($result_array, $showPassword, $loadAvatars);
return $user;
}
if (!empty($_configuration['apc'])) {
apcu_store($apcVar, $user, 60);
}
return false;
}

Loading…
Cancel
Save