2013-06-21 62 views
0

这个想法是我使用一些mixin为图像生成域。假设我有2个具有相同图像的域,我希望能够从一个域加载一半图像,另一半加载一半图像。SASS为多个静态生成URL

在PHP中,这是一样的东西

$domains = array('domain1', 'domain2', 'domain3'); 
$domainIdx = 0; 

function getDomain(){ 
    $rVal = $domains[$domainIdx]; 
    $domainIdx = $domainIdx++ >= count($domains) ? 0 : $domainIdx++; 
    return $rVal; 
} 

我称之为我每次渲染的图像来获得一个域为它的时间。我怎么能在SASS中的mixin中做类似的事情,所以当生成CSS时,它将在域列表之间分发所有的URL?

+3

这听起来像是一个更好的负载平衡器解决的问题。 – cimmanon

+0

这实际上是一个网页加载优化黑客,并没有涉及到负载平衡。将在周一尝试解决方案并相应奖励!非常感谢队友:) – ptheofan

回答

0

其实,你可以端口exitsting代码SASS非常直截了当:

$domains:  'domain1.com' 'domain2.org' 'domain3.net' 
$current-domain: 1 

@function get-domain() 
    $domain: nth($domains, $current-domain) 
    $current-domain: $current-domain + 1 
    @if $current-domain > length($domains) 
    $current-domain: 1 
    @return $domain 

然后,您可以使用它像这样:

@for $i from 1 through 10 
    .element-#{$i} 
    background-image: url("http://#{get-domain()}/images/foo.png") 

演示:http://sassbin.com/gist/5831644/

而且,你”我的PHP代码片段中有一些bug。正确的代码是:

$domains = array('domain1', 'domain2', 'domain3'); 
$domainIdx = 0; 

function getDomain(){ 
    global $domains, $domainIdx; 
    $rVal = $domains[$domainIdx]; 
    $domainIdx = $domainIdx + 1>= count($domains) ? 0 : $domainIdx + 1; 
    return $rVal; 
} 

而且@cimmanon是绝对正确的。这种负载均衡的方法是业余性和不良实践。

+0

该片段是一个例子,而不是实际的代码;) – ptheofan

1

在您的指南针配置文件(即config.rb),你可以使用asset_host功能,像这样:

asset_host_list = ['domain.com', 'domain.org'] 
asset_host do |asset| 
    "http://%s" % asset_host_list[asset.hash % asset_host_list.length] 
end 

但是,我@cimmanon同意,这种做法是微弱的。