2011-09-28 100 views

回答

32

通過鏈輪源代碼拖網,我們發現:

# Returns a 200 OK response tuple 
    def ok_response(asset, env) 
    if body_only?(env) 
     [ 200, headers(env, asset, Rack::Utils.bytesize(asset.body)), [asset.body] ] 
    else 
     [ 200, headers(env, asset, asset.length), asset ] 
    end 
    end 

body_only?時設置?body=1 or true

對於靜態資產,Asset.body被定義爲:

def body 
    # File is read everytime to avoid memory bloat of large binary files 
    pathname.open('rb') { |f| f.read } 
end 

而將資產交還給自己一個「機架能夠體對象」

# Add enumerator to allow `Asset` instances to be used as Rack 
# compatible body objects. 
def each 
    yield to_s 
end 

當我們看bundled_asset,該Asset.body被重新定義爲獲取資產僅不包括任何依賴的身體。 Asset.to_a被定義爲將資產及其所有依賴項作爲傳遞到Rack的數組進行檢索。

通過這種方式,資產沒有組合在一起,而是作爲單獨的對象,因此單個CSS文件仍然是單獨的。

相關問題