代码之家  ›  专栏  ›  技术社区  ›  Kevin Pullin

中止(HTML)图像下载

  •  0
  • Kevin Pullin  · 技术社区  · 16 年前

    我在网页上显示了各种各样的图像集(比如每集50个图像)。用户可以从列表中选择要显示的集合,该集合通过jquery-ajax调用加载,以删除旧的img标记并添加新的标记。

    我看到的是,对第一批过时映像的所有请求仍然从服务器中提取,从而延迟新映像的加载并杀死UX。所以我的问题是:是否可以清除浏览器中第一组不再存在于dom中的img的请求?这不是自动的吗?

    下面是流程的jquery示例片段:

    updateImages = function(imageSetId) {
        // clear existing IMG set
        $("#imagesDiv").empty();
    
        $.post(
            "/GetImagesInSet",
            { imageSetId: imageSetId },
            function(data) {
                // add in new IMG set
                $("#imagesDiv").html(data);
            },
            "html"
        );
    };
    

    我的期望是对$().Empty()的调用将阻止从请求队列中删除其中所有挂起的映像。如果这是一个糟糕的设计,我会接受其他的建议!

    2 回复  |  直到 16 年前
        1
  •  2
  •   ajm    16 年前

    值得一试:

    $("img","#imagesDiv").attr("src",'');
    $("#imagesDiv").empty();
    

    我不确定是否可以从队列中删除挂起的请求,但这肯定会阻止生成任何新的请求。

        2
  •  1
  •   Kevin Pullin    16 年前

    我找到了一个更好的选择,那就是使用一种懒惰的加载技术,只下载可见的图像,而不下载所有的图像(即那些滚动出视区的图像)。Bing.com的图片搜索功能就是一个很好的例子。

    下面是一个jquery插件,它提供了类似的功能: Lazy Load

    从源代码看,每当元素的逻辑位置大于逻辑视图底部的逻辑位置时,它就会加载图像。这样做的缺点是 全部的 向下滚动时加载图像,即使图像实际上从未在视区内。例如,如果您快速滚动到页面底部,则会加载底部框架视图上方的一组图像,即使它们不是真正需要的。

    必应的实现更加强大,只有当图像真正可见时才加载图像。我必须测试这个插件以确保,但是源代码足够简单,如果需要的话,很可能是“可修复的”。