Adds new feature to dispatch avatar url between different servers.

That allows parallel download from most browsers.
To avoid caching issue, server choice is "profile_id" based so that
avatar from a specific user will always be served from same server.

Introduce new configuration parameter:
$config['avatar']['server_modulo'] = 5;

Very easy to implement using, for example, DNS wildcard.
For example, if you have following configuration:
$config['avatar']['server']        = 'static_rrdns_.domain.tld';
$config['avatar']['server_modulo'] = 5;

Then, when building avatar's URL, domain will become, depending on profile_id:
static0.domain.tld
static1.domain.tld
static2.domain.tld
static3.domain.tld
static4.domain.tld
This commit is contained in:
Jean Baptiste Favre 2011-09-03 21:11:31 +02:00
parent afd42611a3
commit 98f064e4fd

View File

@ -103,7 +103,11 @@ class Avatar extends Memcached_DataObject
{ {
$server = common_config('avatar', 'server'); $server = common_config('avatar', 'server');
if ($server) { if ($server) {
return Avatar::url($this->filename); if (common_config('avatar', 'server_modulo') && common_config('avatar', 'server_modulo') > 1 ){
return str_replace( '_rrdns_', ( $this->profile_id % common_config('avatar', 'server_modulo') ), Avatar::url($this->filename) );
}else{
return Avatar::url($this->filename);
}
} else { } else {
return $this->url; return $this->url;
} }