Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 为每页提供多个图像的好技术_Image_Performance_Cdn_Download Speed - Fatal编程技术网

Image 为每页提供多个图像的好技术

Image 为每页提供多个图像的好技术,image,performance,cdn,download-speed,Image,Performance,Cdn,Download Speed,我有一个web应用程序,它需要在每页上提供大量的小图像(最多100个)。我可以使用缓存来减少对数据库/后端的调用,但是必须对图像本身进行如此多的单独请求会产生明显的影响,因为图像的请求和渲染需要一些时间,特别是在较慢的连接上 在一个页面上提供多个图像有哪些良好的实践?我知道使用CDN(例如S3+Cloudfront)可以减少http请求的瓶颈,并从更近的地理位置提供内容,还可以在用户在浏览器中看到图像/内容时通过Ajax加载图像/内容。是否有其他技术可以为图像密集型页面提供显著的性能提升?它们是

我有一个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-当然。但是,在这种情况下,图像本身链接到其他内容,用户可以对其进行编辑,用户可以操纵它们的服务顺序。我想如果我走那条路的话,我会引起比我一开始要解决的更多的头痛。