【发布时间】:2015-10-26 11:45:31
【问题描述】:
我查看了 web.config 中媒体的缓存设置,发现有些地方需要澄清。我找到了一个名为“MediaResponse.MaxAge”的设置。我认为此设置是将缓存到期设置为给定格式“Days.hours:minutes:seconds”,我们已将其设置为 7 天“7.00:00:00”。
现在,我很困惑,因为我们网站上的图像加载速度太慢(通过 pingdom 检查),即使在允许缓存持续 7 天之后也是如此。此外,如果图像缓存设置为 7 天并且确实如此,则通过 fiddler 进行验证。
这是显示 6 kb 图像加载时间的屏幕截图。 !!
黄色-等待
绿色-获得
在覆盖 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
感谢所有帮助/建议。
【问题讨论】:
-
MaxAge 设置不会使图像的下载速度更快。它只会告诉浏览器将该图像缓存 7 天,以便下次它不会从服务器下载它。有很多因素会影响 Sitecore 中图像的下载速度 - 您是否运行了任何自定义管道处理器?
-
是的..我已经在调整大小处理器管道中实现了一个逻辑,我决定是否应该缓存图像。
-
尝试删除该管道以检查它是否影响性能。根据我的经验,来自 Sitecore 的图像通常速度很快,尤其是对于较小的图像。
-
您的意思是完全删除管道或仅删除我的自定义代码并让默认的站点核心管道运行。?!
-
只需注释掉添加处理器的配置,以便您测试开箱即用的 Sitecore,然后您可以查看 Sitecore 是否运行缓慢或新代码中的某些内容对其产生了影响。
标签: performance caching sitecore image-loading sitecore8