将数千个小图片加载到网页上

时间:2016-02-03 15:38:01

标签: html google-chrome http web http2

我正在为我的照片存档构建缩略图查看器,并且需要将数千张照片加载到单个网页上。缩略图已经从原始照片JPG通过ImageMagick + MozJPEG进行了下采样,均在100x100px范围内,每个都是1-3 KB。

例如,Chrome可以处理包含2500多张图片的页面没问题。慢速部分是请求图像,即处理2500多个HTTP请求。 HTTP / 2.0是否提供了其他选项来简化这些请求?

我想避免创建分块马赛克图像,然后我将其编入网页(我需要能够看到每个图像的文件名),但这是我现在能想到的最好的解决方法。

2 个答案:

答案 0 :(得分:1)

HTTP / 2将使许多比同类HTTP / 1方法更多的并行传输(通常至少100并行,比此多很多倍)。由于压缩,每个传出请求都会变小。

使用HTTP / 1,浏览器的典型性为每个主机名6个连接,并且通常不启用流水线操作,这使得客户端在发送下一个请求之前等待响应。因此,如果您使用大量主机名来分发图片,您可以获得许多并行传输,但这将使用更多资源,但效率仍然低于HTTP / 2.

HTTP / 1方法的一个好处是,您可以为每个连接(在TCP慢启动期间)获取一次初始窗口以发送请求,而对于HTTP / 2,您只能获得一个初始窗口。

答案 1 :(得分:0)

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.PushBuilder;

public class SimpleImagePush extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {

    String contextPath = req.getContextPath();

    PushBuilder pb = req.getPushBuilder(); 
for(int x=1;x<2500;x++)
    {
    pb.path(picturepath).push();  // picturepath is the path of the image in the server system. Adjust your filenames accordingly to use a for loop       

    }

}