在需要知道它们的高度和宽度时,“延迟加载”图像的最佳方法是什么?

时间:2018-02-21 05:15:31

标签: javascript html lazy-loading

我正试图'懒加载'动态图像。它们的高/宽比在网页的布局中很重要。我有四个选项可以防止它们在加载或渲染时弄乱DOM。

  1. 我可以使用Javascript获取图像的高度和宽度,在DOM中设置一个元素以保留图像,直到我想稍后加载它。我会用......

    var image = new Image(); var width = image.width; var height = image.height;

  2. 我可以毫不懒惰加载它们并立即使用img标记src。如果#1和这个方法一样慢,那么以后尝试加载它们就没有意义了,我也可以在HTML标签中进行加载。

    <img src='source' />

  3. 我可以将图片尺寸存储在我的数据库中。这意味着我会不断拥有图像的必要尺寸,并且可以很容易地设置占位符。我不知道这是否是常见做法。 编辑:应该注意,我正在访问数据库以检索图像网址。

    <div>this elements width and height is set</div>

  4. 我可以通过PHP获取图像的尺寸。这与Javascript方法相同,只是在流程的不同点。

    $size = getimagesize($filename);

  5. 我的问题基本上是上面哪一种获取图片宽度和高度以便在DOM中存储地点的最完善的方式?

1 个答案:

答案 0 :(得分:1)

我会说方法2和3的组合是你最好的赌注。您将图像大小和其他元数据存储在描述图像的表中。然后,您可以执行某种形式的动态加载,或者只放置一堆<img>标记,widthheight已经设置为数据库和decoding=async的大小所以浏览器在加载这些图像时不会阻止页面的其余部分。 最终状态是将文档发送到浏览器,其中包含您希望显示的清晰图像列表,以及尽可能多的关于它们的信息(大小,加载模式,各种屏幕密度的各种srcs等)。

方法1似乎需要做很多工作,其中大部分都会复制浏览器已经在做的事情 方法4将是一场表演噩梦。 getimagesize需要访问磁盘并读取您尝试显示的每个图像的某些部分。如果有一组众所周知的图像,你将被磁盘缓存保存,但是,如果你正在做一些像instagram / facebook / flickr这样的东西,每个用户都有自己的图像,你会看到{{1}随机磁盘读取数据库所做的任何I / O顶上。