Image 为每页提供多个图像的好技术
我有一个web应用程序,它需要在每页上提供大量的小图像(最多100个)。我可以使用缓存来减少对数据库/后端的调用,但是必须对图像本身进行如此多的单独请求会产生明显的影响,因为图像的请求和渲染需要一些时间,特别是在较慢的连接上 在一个页面上提供多个图像有哪些良好的实践?我知道使用CDN(例如S3+Cloudfront)可以减少http请求的瓶颈,并从更近的地理位置提供内容,还可以在用户在浏览器中看到图像/内容时通过Ajax加载图像/内容。是否有其他技术可以为图像密集型页面提供显著的性能提升?它们是否与硬件、前端或其他相关并不重要Image 为每页提供多个图像的好技术,image,performance,cdn,download-speed,Image,Performance,Cdn,Download Speed,我有一个web应用程序,它需要在每页上提供大量的小图像(最多100个)。我可以使用缓存来减少对数据库/后端的调用,但是必须对图像本身进行如此多的单独请求会产生明显的影响,因为图像的请求和渲染需要一些时间,特别是在较慢的连接上 在一个页面上提供多个图像有哪些良好的实践?我知道使用CDN(例如S3+Cloudfront)可以减少http请求的瓶颈,并从更近的地理位置提供内容,还可以在用户在浏览器中看到图像/内容时通过Ajax加载图像/内容。是否有其他技术可以为图像密集型页面提供显著的性能提升?它们是
谢谢。您始终可以将图像组合成单个图像,并使用CSS一次仅显示其中的一部分(通常称为CSS精灵) 谷歌也有一篇相当深入的文章介绍了他们如何实现“即时预览”,其中涵盖了一些优化:
您始终可以将图像组合成单个图像,并使用CSS一次仅显示其中的一部分(通常称为CSS精灵) 谷歌也有一篇相当深入的文章介绍了他们如何实现“即时预览”,其中涵盖了一些优化:
您可以为图像使用不同的域-这些图像将在与当前域不同的线程上调用 您还可以将图像托管在web服务器上,该服务器经过优化以提供静态内容—这将比动态服务器更快 上面的内容可以扩展到几个这样的域-如果浏览器设置为每个域有4个线程,那么您添加的每个域将并行化为另外4个线程(这也是使用CDN的好处之一)
另一个可能应用的常见技术是使用-如果您有一组常用的图像,您可以将它们全部放在一个图像中,并使用CSS仅在需要的位置显示所需的位。您可以为图像使用不同的域-这些将在与当前域不同的线程上调用 您还可以将图像托管在web服务器上,该服务器经过优化以提供静态内容—这将比动态服务器更快 上面的内容可以扩展到几个这样的域-如果浏览器设置为每个域有4个线程,那么您添加的每个域将并行化为另外4个线程(这也是使用CDN的好处之一)
另一个可能应用的常见技术是使用-如果您有一组常用的图像,您可以将它们全部放在一个图像中,并使用CSS仅在需要的位置显示所需的位。在一个页面请求中加载100个图像会增加页面加载时间,因为每个图像都需要在浏览器中加载时间 简单的技术是只加载一个默认图像,这意味着每100个图像的源应该是公共默认图像,并且只加载一个图像不会花费太多时间 当页面加载所有内容时,请尝试使用帮助jQuery加载每个图像 使用lazyload jQuery插件加载页面加载后的所有图像 像这样
<img class="lazy" src="default.jpg" data-original="img1.jpg" >
<img class="lazy" src="default.jpg" data-original="img2.jpg" >
<img class="lazy" src="default.jpg" data-original="img3.jpg" >
.......
<img class="lazy" src="default.jpg" data-original="img100.jpg">
您可以将expires头添加到每个图像中,这允许浏览器缓存它们,而不是在下一个请求时请求它们
希望它能帮助您。在一个页面请求中加载100个图像会增加页面加载时间,因为每个图像都需要在浏览器中加载时间 简单的技术是只加载一个默认图像,这意味着每100个图像的源应该是公共默认图像,并且只加载一个图像不会花费太多时间 当页面加载所有内容时,请尝试使用帮助jQuery加载每个图像 使用lazyload jQuery插件加载页面加载后的所有图像 像这样
<img class="lazy" src="default.jpg" data-original="img1.jpg" >
<img class="lazy" src="default.jpg" data-original="img2.jpg" >
<img class="lazy" src="default.jpg" data-original="img3.jpg" >
.......
<img class="lazy" src="default.jpg" data-original="img100.jpg">
您可以将expires头添加到每个图像中,这允许浏览器缓存它们,而不是在下一个请求时请求它们
希望对您有所帮助。您的照片是什么?他们有关系吗?也就是说,当你显示一个图像时,你总是显示同一组其他图像吗?@Oded:图像都是不同的,通常每个图像都是10-20kb左右的小JPEG。问题更多的是它们是否经常一起使用。@Oded-不幸的是,它们不是。我一次缓存10分钟,这说明了它们的变化速度。这些图像可以通过SVG等其他方式表示吗?它们的图像是什么?他们有关系吗?也就是说,当你显示一个图像时,你总是显示同一组其他图像吗?@Oded:图像都是不同的,通常每个图像都是10-20kb左右的小JPEG。问题更多的是它们是否经常一起使用。@Oded-不幸的是,它们不是。我一次缓存10分钟,这说明了它们的变化速度。图像可以通过SVG等其他方式表示吗?谢谢,但在这种情况下,图像是通过db请求的,在应用程序中通常是“动态的”。精灵不是一个选项。@Oded-当然。但是,在这种情况下,图像本身链接到其他内容,用户可以对其进行编辑,用户可以操纵它们的服务顺序。如果我走这条路,我想我会比我一开始试图解决的问题更头痛。谢谢,但在这种情况下,图像是通过数据库请求的,在应用程序中通常是“动态的”。精灵不是一个选项。@Oded-当然。但是,在这种情况下,图像本身链接到其他内容,用户可以对其进行编辑,用户可以操纵它们的服务顺序。我想如果我走那条路的话,我会引起比我一开始要解决的更多的头痛。