将图像存储在浏览器缓存中-加载图像的最佳方式
Store images in browser cache - optimal way to load images
我目前正在为不同的断点(台式机、平板电脑、移动设备)和ng-repeating
加载多个图像,然后隐藏当前不应该显示的图像:
<img ng-repeat="img in module.imgs" src="{{img.src}}" class="image-{{img.type}}" style="top: {{img.pos}}px">
当一次仅示出一个时,该ng-repeat
使得所有三个图像元素都被加载为元素。
desktop.png GET 304 png angular.js:3151 243 B 4 ms
tablet.png GET 304 png angular.js:3151 243 B 5 ms
mobile.png GET 304 png angular.js:3151 243 B 3 ms
为了改进这一点,我尝试只加载符合当前断点的图像:
<img src="{{image.src}}" class="image-{{image.type}}" style="top: {{image.pos}}px">
$scope.$watch($scope.getWindowDimensions, function (newValue, oldValue) {
$scope.windowHeight = newValue.h;
$scope.windowWidth = newValue.w;
$scope.image = null;
if ($scope.windowWidth >= breakPoints['desk']) {
$scope.image = $scope.module.imgs[0];
} else if ($scope.windowWidth >= breakPoints['mid']) {
$scope.image = $scope.module.imgs[1];
} else {
$scope.image = $scope.module.imgs[2];
}
}, true);
不幸的是,每次我遇到断点,它都会请求图像,即使它们已经加载:
desktop.png GET 304 png angular.js:3151 243 B 4 ms
tablet.png GET 304 png angular.js:3151 243 B 5 ms
mobile.png GET 304 png angular.js:3151 243 B 3 ms
tablet.png GET 304 png angular.js:3151 243 B 4 ms
mobile.png GET 304 png angular.js:3151 243 B 5 ms
如何缓存或以其他方式存储这些图像,以便根据需要加载一次?
控制器数据结构:
$scope.module = {
imgs: [
{
type: 'desktop',
src: 'img/desktop.png',
pos: 0
},
{
type: 'tablet',
src: 'img/tablet.png',
pos: 0
},
{
type: 'mobile',
src: 'img/mobile.png',
pos: 0
}
]
};
304
状态代码表示您已告知浏览器图像尚未修改,因此无需重新下载。
您可以通过将缓存头与图像一起发送来进一步改进这一点,这将在缓存图像后停止浏览器甚至对图像发出HTTP请求。
也许您需要在服务器上设置一个缓存指令,如下所示:
<FilesMatch "'.(png|jpg|json)$">
FileETag None
<ifModule mod_headers.c>
Header unset ETag
Header set Cache-Control "max-age=604800, public"
</ifModule>
</FilesMatch>
在这种情况下,缓存持续时间非常长,因此在图像更改时请记住这一点。基本上,这是缓存图像最有效的方法,但当图像内容发生变化时,您需要更改图像名称。或者将值设置得更低(以秒为单位)。
现在,浏览器甚至不应该要求缓存图像的更新版本,从而消除"304"请求。
相关文章:
- 在通过child.print()打印之前,我如何等待图像加载到我的新窗口中
- 在检索数据时是否可以停止图像加载请求
- 如何让我的网站上的WEBP图像加载在morzilla firefox中有一个可能的解决方案吗?如果是,那么如何
- jQuery:获取图像加载错误的详细信息
- 在safari和chrome中,js图像加载产生了奇怪的结果
- 图像加载不适用于 IE 8 或更低版本
- 这个图像加载功能有什么作用
- JavaScript 图像加载器不起作用
- 动态图像加载是否会减少服务器过载
- 跨来源图像加载被拒绝-仅限iPhone-简单图像上传
- 纯javascript的进度图像加载程序仅当用户单击提交html表单时
- 使用JavaScript延迟图像加载
- 如果当前图像加载缓慢,如何加载其他图像
- HTML图像加载触发一个错误
- 将图像加载到localStorage,并将图像src设置到该位置
- jquery图像加载检查错误
- 将图像加载到织物画布背景中
- 需要在bootstrap css中单击时将图像加载为模态
- 正在显示加载..在将新图像加载到网站时播放动画
- 砖石事件:在图像加载和布局完成后调用事件