From: Jakub Narebski <jnareb@gmail.com>
To: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Cc: git@vger.kernel.org, Junio C Hamano <gitster@pobox.com>
Subject: Re: [PATCHv6 5/8] gitweb: gravatar url cache
Date: Sat, 27 Jun 2009 01:11:26 +0200 [thread overview]
Message-ID: <200906270111.26640.jnareb@gmail.com> (raw)
In-Reply-To: <1245926587-25074-6-git-send-email-giuseppe.bilotta@gmail.com>
On Thu, 25 Jun 2009, Giuseppe Bilotta wrote:
> 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.
It would be nice to have some benchmarks comparing performance before
and after this patch.
>
> Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Acked-by: Jakub Narebski <jnareb@gmail.com>
> ---
> gitweb/gitweb.perl | 24 ++++++++++++++++++++++--
> 1 files changed, 22 insertions(+), 2 deletions(-)
>
> diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
> index f2e0cfe..d3bc849 100755
> --- a/gitweb/gitweb.perl
> +++ b/gitweb/gitweb.perl
> @@ -3257,6 +3257,27 @@ sub git_print_header_div {
> "\n</div>\n";
> }
>
> +# 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 = ();
Nice explanation.
> +
> +# 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.php?gravatar_id=" .
> + Digest::MD5::md5_hex($email) . "&size=";
> + return $avatar_cache{$email} . $size;
> +}
Nice solution. Very good.
I guess it is not worth it to _not_ use cache for few avatars views
such as 'commit', 'commitdiff', in the future also 'tag' view, isn't it?
BTW. http://www.gravatar.com/site/implement/url recommends
http://www.gravatar.com/avatar/3b3be63a4c2a439b013787725dfce802 rather than
http://www.gravatar.com/avatar.php?gravatar_id=3b3be63a4c2a439b013787725dfce802
you use, following http://www.gravatar.com/site/implement/perl
Hmmm...
> +
> # Insert an avatar for the given $email at the given $size if the feature
> # is enabled.
> sub git_get_avatar {
> @@ -3266,8 +3287,7 @@ sub git_get_avatar {
> my $size = $avatar_size{$params{'size'}} || $avatar_size{'default'};
> my $url = "";
> if ($git_avatar eq 'gravatar') {
> - $url = "http://www.gravatar.com/avatar.php?gravatar_id=" .
> - Digest::MD5::md5_hex(lc $email) . "&size=$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
Very nice.
> --
> 1.6.3.rc1.192.gdbfcb
>
>
--
Jakub Narebski
Poland
next prev parent reply other threads:[~2009-06-26 23:11 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-06-25 10:42 [PATCHv6 0/8] gitweb: gravatar support Giuseppe Bilotta
2009-06-25 10:43 ` [PATCHv6 1/8] gitweb: refactor author name insertion Giuseppe Bilotta
2009-06-25 10:43 ` [PATCHv6 2/8] gitweb: uniform author info for commit and commitdiff Giuseppe Bilotta
2009-06-25 10:43 ` [PATCHv6 3/8] gitweb: right-align date cell in shortlog Giuseppe Bilotta
2009-06-25 10:43 ` [PATCHv6 4/8] gitweb: (gr)avatar support Giuseppe Bilotta
2009-06-25 10:43 ` [PATCHv6 5/8] gitweb: gravatar url cache Giuseppe Bilotta
2009-06-25 10:43 ` [PATCHv6 6/8] gitweb: add 'alt' to avatar images Giuseppe Bilotta
2009-06-25 10:43 ` [PATCHv6 7/8] gitweb: recognize 'trivial' acks Giuseppe Bilotta
2009-06-25 10:43 ` [PATCHv6 8/8] gitweb: add avatar in signoff lines Giuseppe Bilotta
2009-06-25 13:21 ` [PATCHv6 9/8] gitweb: put signoff lines in a table Giuseppe Bilotta
2009-06-27 9:55 ` Jakub Narebski
2009-06-27 9:26 ` [PATCHv6 8/8] gitweb: add avatar in signoff lines Jakub Narebski
2009-06-27 10:21 ` Giuseppe Bilotta
2009-06-27 0:19 ` [PATCHv6 7/8] gitweb: recognize 'trivial' acks Jakub Narebski
2009-06-27 1:03 ` Junio C Hamano
2009-06-27 9:04 ` Giuseppe Bilotta
2009-06-26 23:39 ` [PATCHv6 6/8] gitweb: add 'alt' to avatar images Jakub Narebski
2009-06-27 0:08 ` Thomas Adam
2009-06-26 23:11 ` Jakub Narebski [this message]
2009-06-26 23:27 ` [PATCHv6 5/8] gitweb: gravatar url cache Giuseppe Bilotta
2009-06-26 23:53 ` Jakub Narebski
2009-06-26 19:42 ` [PATCHv6 4/8] gitweb: (gr)avatar support Jakub Narebski
2009-06-26 22:08 ` Giuseppe Bilotta
2009-06-26 22:58 ` Jakub Narebski
2009-06-26 23:14 ` Giuseppe Bilotta
2009-06-26 23:25 ` Jakub Narebski
2009-06-27 0:29 ` Junio C Hamano
2009-06-27 0:32 ` Giuseppe Bilotta
2009-06-26 9:33 ` [PATCHv6 3/8] gitweb: right-align date cell in shortlog Jakub Narebski
2009-06-26 18:06 ` Giuseppe Bilotta
2009-06-26 22:34 ` Junio C Hamano
2009-06-26 22:57 ` Giuseppe Bilotta
2009-06-26 23:57 ` Junio C Hamano
2009-06-27 12:14 ` Jakub Narebski
2009-06-27 12:49 ` Jakub Narebski
2009-06-25 23:14 ` [PATCHv6 2/8] gitweb: uniform author info for commit and commitdiff Jakub Narebski
2009-06-26 17:52 ` Giuseppe Bilotta
2009-06-25 22:55 ` [PATCHv6 1/8] gitweb: refactor author name insertion Jakub Narebski
2009-06-25 23:01 ` Jakub Narebski
2009-06-25 23:41 ` Giuseppe Bilotta
2009-06-25 12:55 ` [PATCHv6 0/8] gitweb: gravatar support Jakub Narebski
2009-06-25 13:15 ` Giuseppe Bilotta
2009-06-25 17:07 ` Junio C Hamano
2009-06-25 18:46 ` Giuseppe Bilotta
2009-06-25 18:56 ` Junio C Hamano
2009-06-25 23:17 ` Jakub Narebski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200906270111.26640.jnareb@gmail.com \
--to=jnareb@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=giuseppe.bilotta@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.