Drupal:在用户帐户页面上获取用户名而不会破坏性能

时间:2010-03-10 22:09:36

标签: performance drupal caching

我在用户个人资料页面上显示了多个块,user / uid

在每个人身上,我需要打印用户名。

我在每个街区都在做$user = user_load(arg(1)); print $user->name;。由于没有缓存,因为你可以成像,性能是可怕的。

是否有办法更有效地获取用户名或缓存user_load。

感谢。

4 个答案:

答案 0 :(得分:3)

只需添加一个中间函数即可自行提供静态缓存:

/**
 * Proxy for user_load(), providing static caching
 * NOTE: Only works for the common use of user_load($uid) - will NOT load by name or email
 *
 * @param int $uid - The uid of the user to load
 * @param bool $reset - Wether to reset the static cache for the given uid, defaults to FALSE
 * @return stdClass - A fully-loaded $user object upon successful user load or FALSE if user cannot be loaded.
 */
function yourModule_user_load_cached($uid, $reset = FALSE) {
  static $users = array();

  // Do we need to (re)load the user?    
  if (!isset($users[$uid]) || $reset) {
    $users[$uid] = user_load($uid);
  }

  return $users[$uid];
}

答案 1 :(得分:2)

使用menu_get_object()这是检索从正确声明的网页的网址加载的对象(用户,节点等)的正确方法。它将使用在arg(1)找到的uid返回已加载的用户对象,用于在其路径中使用%user菜单项(即$items['user/%user']user_menu()中的$ items['user/%user/view']等。

$account = menu_get_object('user');

答案 2 :(得分:0)

用户是全球性的。

function myfunction(){   全球$用户; }

答案 3 :(得分:0)

这篇名为How to cache usernames的博文可能会有用。