1 https://segmentfault.com/a/1190000002433791
即时加载是最常见的加载方式了,我们一般都是通过给img
标签指定具体的src值,那么等页面渲染的时候,遇到该标签的话,就会下载该指定的URL图片,并且渲染出来
- 大部分浏览器都会并发下载图片,图片的下载没有阻塞。
src
的值如果相同,也只会下载一次,也就是说相同的图片,不会多次下载。- 图片的下载和渲染会阻塞整个页面的渲染。
- 图片越大,下载的时间也就越长。
图片延迟加载的原理:页面初次加载时获取图片在页面中的位置并缓存(每次取offset的值会引发页面的reflow),计算出可视区域,当图片的位置出现在可视区域中,将src的值替换成真实的地址,此时图片就开始加载了。
当页面滚动的时候,再判断图片已经缓存的位置值是否出现在可视区域内,进行替换src加载。当所有的图片都加载完之后,将相应的触发事件卸载,避免重复操作引起的内存泄漏。将整个窗口看成是一个大容器,那么也可以在页面中设置一个小容器,在小容器中也同样可以实现图片的延迟加载。
像淘宝、天猫等电商就大量采用了该技术,因为对它们来说,要展示的图片太多了,即时加载又非常耗时间,而且用户不一定会看完所有的图片。采用延迟的加载基本上就能解决图片过多的问题
2 background-img 与 <img> 加载的图片的区别
https://my.oschina.net/u/1162572/blog/137403
在粗读过浏览器的工作原理(http://coolshell.cn/articles/9666.html)之后我知道:
浏览器首先将HTML解析成DOM tree,然后解析css生成css rule tree,将这个tree并进行一些处理之后,生成render tree。render tree就是浏览器依据绘制网页的原料了。