2015-10-26 42 views
0

我正在瀏覽web.config中的媒體緩存設置,並發現需要一些解釋。我發現了一個名爲「MediaResponse.MaxAge」的設置。我認爲這個設置是將緩存過期設置爲給定格式「Days.hours:minutes:seconds」,我們將它設置爲7天「7.00:00:00」。Sitecore 8:緩存媒體圖像

即使允許緩存持續7天,我們也很困惑,因爲我們網站上的圖片加載速度太慢(通過pingdom檢查)。此外,如果圖像緩存設置爲七天並且確實如此,則通過提琴手進行驗證。

snap from pingdom

下面是示出了用於一個6kb的圖像加載時間的屏幕截圖。 !

黃色 - 等待

綠 - 獲得性

實現的功能中的一類重寫ResizeProcessor管道:

void SaveStreamToCache(MediaStream outputStream, TransformationOptions transformationOptions, ImageFormat imageFormat, Stream img) 
    { 
     if (_cacheError > 5) return; 
     try 
     { 
      if (img == null || img.Length == 0) return;// don't save empty data. 

      byte[] imageByteArray = ((MemoryStream)img).ToArray(); 

      HttpRuntime.Cache.Add(GetKey(outputStream, transformationOptions, imageFormat), imageByteArray, 
        null, DateTime.Now.AddMinutes(1), 
        Cache.NoSlidingExpiration, CacheItemPriority.Normal, null); 
     } 
     catch (Exception e) 
     { 
      Log.Error(e.ToString(), this); 
      _cacheError++; 
     } 
    } 

getKey()返回由圖片屬性作爲URL的字符串。

string GetKey(MediaStream outputStream, TransformationOptions transformationOptions, ImageFormat imageFormat) 
    { 
     StringBuilder sb = new StringBuilder("SitecoreExtensions.Resources.Media.ResizeProcessor_"); 


     sb.Append("_MediaItem.Path_" + outputStream.MediaItem == null ? "<NULL>" : outputStream.MediaItem.Path); 
     sb.Append("_MediaItem.MediaPath_" + outputStream.MediaItem == null ? "<NULL>" : outputStream.MediaItem.MediaPath); 
     sb.Append("_MediaItem.FilePath_" + outputStream.MediaItem == null ? "<NULL>" : outputStream.MediaItem.FilePath); 
     sb.Append("_AllowStretch_" + transformationOptions.AllowStretch.ToString()); 
     sb.Append("_BackgroundColor_" + transformationOptions.BackgroundColor.ToString()); 
     sb.Append("_CompositingMode_" + transformationOptions.CompositingMode.ToString()); 

     sb.Append("_IgnoreAspectRatio_" + transformationOptions.IgnoreAspectRatio.ToString()); 

     sb.Append("_InterpolationMode_" + transformationOptions.InterpolationMode.ToString()); 

     sb.Append("_MaxSize_" + transformationOptions.MaxSize.ToString()); 

     sb.Append("_PixelOffsetMode_" + transformationOptions.PixelOffsetMode.ToString()); 
     sb.Append("_PreserveResolution_" + transformationOptions.PreserveResolution.ToString()); 

     sb.Append("_Quality_" + transformationOptions.Quality.ToString()); 
     sb.Append("_Scale_" + transformationOptions.Scale.ToString()); 

     sb.Append("_Size_" + transformationOptions.Size.ToString()); 

     sb.Append("_imageFormat_" + imageFormat.ToString()); 

     return sb.ToString(); 

}

需要,以減少等待時間將應用於哪些設置? 推薦this article

讚賞所有幫助/建議。

+0

MaxAge設置不會讓圖像更快下載。它會告訴瀏覽器將該映像緩存7天,以便下次不從服務器下載。有很多事情可能會影響Sitecore中圖像的下載速度 - 是否有任何自定義管道處理器正在運行? –

+0

是的..我已經在調整處理器流水線大小的邏輯,我決定是否應該緩存圖像。 –

+0

嘗試刪除該管道以檢查它是否影響性能。根據我的經驗,來自Sitecore的圖像通常非常快,特別是對於較小的圖像。 –

回答

1

我們需要類似的東西。內容編輯器以大尺寸上傳圖片,我們使用自定義媒體請求裁剪/調整和緩存這些圖片。 我寫了一個關於它的blogpost with sample code。這應該夠了吧。這將允許您爲相同圖像緩存任意數量的大小。

+1

@Sullivan:感謝您更新鏈接! –