存储图像的最有效方法是什么? HTML / CSS / JS

时间:2011-01-20 23:42:58

标签: javascript html performance image optimization

我将会有很多图像,并试图找到最有效的方式来存储这些图像,以保持页面的活泼。

到目前为止,我只想到了两种方法:使用javascript加载picture = new Image(); picture.src = "file.jpg";并根据需要将其追加/删除到页面,或加载到<img>并设置display:none

还有其他选择吗?什么被认为是最好的方法?

3 个答案:

答案 0 :(得分:2)

照片库的最佳方式(如果你正在建造的那些)通常是有几种尺寸的图像,至少有两种:

  1. 小尺寸,高度压缩,占地面积小:这是您加载到网格中并在有多个图像的页面中显示的图像
  2. 压缩率较低且图像质量较高的较大图像 - 这是人们希望查看详细信息时显示的图像。
  3. 由于人们经常从已经显示小型/快速加载版本的页面中获取详细图像,因此已经在浏览器缓存中,您可以做一些小技巧并获得即时照片,而无需预加载任何内容。

    它是这样的:

    在详细信息页面上,您将在图像标记中显示高度压缩的小图像,该图像标记具有较大详细版本的尺寸。然后使用附加new Image()事件的onload在后​​台加载更大的详细版本,将带有小型压缩版本的图像标记源更改为大型详细版本。

    它看起来很棒,工作速度快,用户会爱你;)

    PS:存储图像的最佳方式是浏览器缓存,而不是js或DOM,所以如果你真的希望预加载图像,这通常是一种不好的做法(有时可能需要),请进行浏览器提取它们在后台通过包含一个css文件来引用它,这些文件在未应用于站点可视区域的样式中引用它们。

答案 1 :(得分:1)

我不确定“效率”,但最合乎逻辑的方法是不使用JavaScript加载图像(如果禁用JavaScript则无用)或通过display属性将图像设置为隐藏(同样,并且浏览器可能只是加载图像。)

因此,一个明智的建议是使用无聊的旧分页和每页显示'n'图像。但是,要使其更新,您可以使用“lazy”(a.k.a。“deferred”)加载并在用户滚动时通过Ajax加载其他页面内容。但是,如果禁用JavaScript等,这会优雅地降级为标准的“分页”行为。

此操作的完美示例是Google的image search,如果您search here on StackOverflow,您会看到有关可能的实施的讨论等。

答案 2 :(得分:0)

最好以你拥有它的方式使用javascript,然后根据需要将它添加到DOM,而不是先将它添加到DOM然后隐藏它,因为DOM操作速度慢得多,你可能不会使用一些图像