Nếu hình ảnh không lớn và nếu có cơ hội tốt, bạn sẽ thường xuyên sử dụng lại hình ảnh và nếu bạn không có quá nhiều hình ảnh và nếu hình ảnh không bí mật (có nghĩa là nó không lớn thỏa thuận nếu một người dùng có khả năng nhìn thấy hình ảnh của người khác) ...
Rất nhiều "nếu" ở đây, vì vậy rất có thể đây là một ý tưởng tồi:
Bạn có thể lưu trữ các byte hình ảnh trong Cache
một thời gian ngắn và tạo một thẻ hình ảnh hướng về một phương thức hành động, lần lượt đọc từ bộ đệm và phun ra hình ảnh của bạn. Điều này sẽ cho phép trình duyệt lưu trữ hình ảnh một cách thích hợp.
// In your original controller action
HttpContext.Cache.Add("image-" + model.Id, model.ImageBytes, null,
Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(1),
CacheItemPriority.Normal, null);
// In your view:
<img src="@Url.Action("GetImage", "MyControllerName", new{fooId = Model.Id})">
// In your controller:
[OutputCache(VaryByParam = "fooId", Duration = 60)]
public ActionResult GetImage(int fooId) {
// Make sure you check for null as appropriate, re-pull from DB, etc.
return File((byte[])HttpContext.Cache["image-" + fooId], "image/gif");
}
Điều này có thêm lợi ích (hoặc là một cái nạng?) Khi làm việc trong các trình duyệt cũ hơn, trong đó các hình ảnh nội tuyến không hoạt động trong IE7 (hoặc IE8 nếu lớn hơn 32kB).