如何缓存行内base64数据uri(图像)?
问题描述:
我正在使用背景图像数据uri base64编码图像直接内联在HTML页面内。 我到处看到与未编码图像相反的地方,它们没有存储在缓存中,这确实有时是性能问题。如何缓存行内base64数据uri(图像)?
但看我的Chrome浏览器开发工具的时候,我看“缓存在内存中” ......
是内联的,在最HTML的base64图片的缓存?
如果是的话:我的问题是:我最初检查它是因为我想分析加载base64内嵌图像的时间。所以我现在无法看到第一次下载/访问花费解码和加载它的时间?我尝试清除浏览器的历史记录,但与其他缓存(如图像等标准资产)相反,它仍然存在,也就是说,即使我清除了浏览器历史记录/缓存,下次我加载它时,它仍然是用chrome dev写入的工具为0ms /“from memory cache”:我如何清除它以查看首次访问者会发生什么?
注:当然,“禁用缓存”在Chrome浏览器开发工具选择 另外,我不知道这是重要的,但这里是Base64和HTML代码(这是相当小:小于900个字节)。
<div style="background-image: url('data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wAARCAAKAB4DAREAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABQYE/8QAJBAAAgEEAQMFAQAAAAAAAAAAAQIDAAQREgUTITEyQUJRcZL/xAAWAQEBAQAAAAAAAAAAAAAAAAAEAgP/xAAdEQACAgIDAQAAAAAAAAAAAAAAAQIDESEEInEx/9oADAMBAAIRAxEAPwCOtrYGJmdY36iEIerqUOR3I9/yqRJssYAk2jakg47HIpUFoNYygsZY7PmYmcqge2dYiQMb/Xfxmj8pPRvxWt5Bb6BYbyUB9hIRJqRgrnPmpqei7liQInmqiRIWsPUKVENIT5FQZeJJbUfId/SUW5934IpXReg7Mz8ldFyWJkfJJz8qx+JG7WWz/9k=');" ><a href="/home">
答
当我重复测试时,Chrome提出了两个请求:第一个请求获取HTML页面,这是一个正常的请求;第二个请求获取图像并从内存中提供,这是合理的,因为图像包含在第一个请求中嵌入在HTML本身
换句话说,内嵌图像不会被缓存,除非页面你居住的地方被缓存。
所以你说内联base64被缓存,因为它所在的HTML文件被缓存。但可以缓存html页面吗?我认为只有图像,CSS,JS可以被缓存? – Mathieu
当我说图像,cc,js可以被缓存时,我的意思是图像,CSS和js不在HTML文件内部(内联),但住在外部文件中(.css,.js文件...) – Mathieu
对于第一个要求讨论缓存可能是错误的,但没有为内嵌资源执行单独的请求,因此Chrome将其列为从“内存缓存”中提供服务。在回答你的问题时,任何东西都可以被缓存,当然是HTML页面。但是,动态生成的页面通常会设置标题,以防止它们被缓存,并且现在大多数页面都是动态的。所以,内联资源是一把双刃剑! – user2612030