如果瀏覽器知道圖像尺寸,則會更快地渲染網頁。但是,我怎樣才能自動分配ASP.NET中的寬度和高度?擴展圖像服務器控件以自動指定圖像尺寸
我可以做一個服務器控件擴展圖像,將使用GDI +查詢圖像大小,並將這些值分配給它自己的寬度和高度屬性。
但也有幾件事情,讓我擔心,想聽取意見:
- 緩存:什麼是執行緩存的最佳方法是什麼?我想緩存每個圖像的所有頁面的高度和寬度值。
- 我應該使用哪種方法查詢圖像大小?構造函數或其他方法(OnInit,OnPreRender等等)?
- 它是GDI +查詢圖像大小的最佳選擇,還是有其他有效的方法嗎?
- 如何查詢遙控圖像的尺寸?
當然,我有一個想法,我怎麼做所有我提到的,但我想聽到一些想法。
http://code.google.com/speed/page-speed/docs/rendering.html#SpecifyImageDimensions
編輯:這是我到目前爲止有:
[ToolboxData("<{0}:AutoSizeImage runat=server></{0}:AutoSizeImage>")]
public class AutoSizeImage : Image
{
protected override void OnPreRender(EventArgs e)
{
if (Width.Value + Height.Value == 0)
{
if (IsLocal(ImageUrl))
{
using (System.Drawing.Image img = System.Drawing.Image.FromFile(Context.Server.MapPath(ImageUrl)))
{
Width = img.Width;
Height = img.Height;
}
}
else
{
System.Net.WebRequest request = System.Net.WebRequest.Create(ImageUrl);
using (System.Net.WebResponse response = request.GetResponse())
using (System.IO.Stream responseStream = response.GetResponseStream())
using (System.Drawing.Image img = System.Drawing.Image.FromStream(responseStream))
{
Width = img.Width;
Height = img.Height;
}
}
}
base.OnPreRender(e);
}
private bool IsLocal(string p)
{
return !(p.StartsWith("http://") || p.StartsWith("https://") || p.StartsWith("ftp://"));
}
}
這工作很漂亮,但我現在需要實現緩存。 我想爲每個ImageUrl的值緩存這個控件的輸出,也就是說,我想爲每個圖像調用一次OnPreRender方法。那可能嗎?
圖像是應用程序使用的圖標,因此它們是完全靜態的。 DB是一個超調我認爲 – BCartolo 2012-02-28 19:01:18