summaryrefslogtreecommitdiff
path: root/gitweb
diff options
context:
space:
mode:
authorGiuseppe Bilotta <giuseppe.bilotta@gmail.com>2009-06-30 00:00:52 +0200
committerJunio C Hamano <gitster@pobox.com>2009-06-30 11:06:36 -0700
commit5a371b7bbbffeddfb356b327995a95cf7bae71d5 (patch)
treeb2ace6b797740fd176e3d2561dd7a7b5c310fdf6 /gitweb
parente9fdd74e5374dd1efe1577057d14a2836b4cae78 (diff)
downloadgit-5a371b7bbbffeddfb356b327995a95cf7bae71d5.tar.gz
gitweb: gravatar url cache
Views which contain many occurrences of the same email address (e.g. shortlog view) benefit from not having to recalculate the MD5 of the email address every time. Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'gitweb')
-rwxr-xr-xgitweb/gitweb.perl24
1 files changed, 22 insertions, 2 deletions
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 92695a3ae8..4d7e4ff7a0 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -1512,6 +1512,27 @@ sub format_subject_html {
}
}
+# Rather than recomputing the url for an email multiple times, we cache it
+# after the first hit. This gives a visible benefit in views where the avatar
+# for the same email is used repeatedly (e.g. shortlog).
+# The cache is shared by all avatar engines (currently gravatar only), which
+# are free to use it as preferred. Since only one avatar engine is used for any
+# given page, there's no risk for cache conflicts.
+our %avatar_cache = ();
+
+# Compute the gravatar url for a given email, if it's not in the cache already.
+# Gravatar stores only the part of the URL before the size, since that's the
+# one computationally more expensive. This also allows reuse of the cache for
+# different sizes (for this particular engine).
+sub gravatar_url {
+ my $email = lc shift;
+ my $size = shift;
+ $avatar_cache{$email} ||=
+ "http://www.gravatar.com/avatar/" .
+ Digest::MD5::md5_hex($email) . "?s=";
+ return $avatar_cache{$email} . $size;
+}
+
# Insert an avatar for the given $email at the given $size if the feature
# is enabled.
sub git_get_avatar {
@@ -1522,8 +1543,7 @@ sub git_get_avatar {
my $size = $avatar_size{$opts{-size}} || $avatar_size{'default'};
my $url = "";
if ($git_avatar eq 'gravatar') {
- $url = "http://www.gravatar.com/avatar/" .
- Digest::MD5::md5_hex(lc $email) . "?s=$size";
+ $url = gravatar_url($email, $size);
}
# Currently only gravatars are supported, but other forms such as
# picons can be added by putting an else up here and defining $url