将数千张小图像加载到网页上



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

例如,Chrome可以毫无问题地处理包含2500 +图像的页面。慢速部分是请求图像,即处理 2500+ HTTP 请求。HTTP/2.0 是否为简化此类请求提供了其他选项?

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

HTTP/2 将比类似的 HTTP/1 方法进行更多的并行传输(通常至少并行 100 次,比这多很多倍)。由于压缩,每个传出请求的发送量将更小。

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

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

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       
    }

}

最新更新