当前位置: 首页 > 面试题库 >

如何在不使用window.stop()的情况下中止图像加载请求

柳威
2023-03-14
问题内容

我有一个很长的页面,可在用户滚动浏览时动态加载图像。

但是,如果用户快速滚动离开页面的某个部分,我不希望图像继续加载到页面的该部分视图之外。

除了图像加载外,页面上还同时发生了许多其他请求,因此在scroll事件上触发钝化window.stop()是不可接受的。

我尝试删除并清除不再可见的图像的img src属性,但是,由于请求已经启动,因此图像会继续加载。

请记住,当用户短暂滚动经过页面的那部分时,图像src已被填充。但是一旦过去,如果不使用window.stop(),就无法停止加载该图像。清除src无效。(Chrome和FF)


问题答案:

正如nrabinowitz所提到的,您正在尝试做的是错误的方法。您不能只是“取消”图像的加载过程(将src属性设置为空字符串不是一个好主意)。实际上,即使这样做,也只会使情况变得更糟,因为服务器将不断发送会被取消的数据,从而增加了负载率并降低了速度。另外,请考虑以下事项:

  1. 如果您的用户在页面上上下滚动,则可能会导致加载延迟。
  2. 在开始加载页面的一部分之前具有超时延迟(例如200毫秒)是完全可以接受的,并且在页面上间隔200毫秒后,一次停止并跳转多少次?即使发生,也可以回到第1点
  3. 您的图片有多大?即使是速度较慢的服务器,每秒也可以提供大约几十个3Kb的缩略图。如果您的网站具有较大的图像,请考虑将低分辨率和高分辨率图像与lightBox等组件一起使用

通常,计算机问题仅仅是设计问题。

编辑

这是一个主意:

  1. 您的页面应显示DIV具有预期图像大小的宽度和高度的容器(使用CSS设置样式)。在每个内部DIV添加一个链接。例如 :

    <div class="img-wrapper thumbnail">
    

    href="http://www.domain.com/path/to/image">Loading…



 类似资料:
  • 有没有一种方法可以下载Docker映像/容器,例如,使用Firefox,而不使用内置的。 我被公司防火墙和代理屏蔽了,我无法通过它得到一个洞。 我的问题是我不能使用Docker获取图像,即Docker保存/拉取和其他Docker提供的功能,因为它被防火墙阻止了。

  • 我试图下载和保存图像从网络使用python的模块。 以下是我使用的(工作)代码: 以下是使用

  • 据我所知,您可以通过以下方式使用PIL获取图像大小 但是,我希望获得图像的宽度和高度,而不必将图像加载到内存中。可能吗?我只做图像大小的统计,不关心图像内容。我只是想让我的处理速度更快。

  • 问题内容: 我正在尝试使用的模块从网络下载并保存图像。 这是我使用的(工作)代码: 你能帮助我从响应中使用什么属性吗? 问题答案: 你可以使用对象,也可以遍历响应。 默认情况下,使用类似文件的对象不会解码压缩的响应(使用GZIP或deflate)。你可以通过将属性设置为True(requests将其设置False为控制自身解码)来强制为你解压缩。然后,你可以使用将数据流式传输到文件对象: 要遍历响

  • 我不喜欢延迟加载,因为在用户体验方面,它看起来非常难看。但是,我了解其好处(更快的页面加载、低带宽、高页面速度分数等) 我计划编写一个javascript代码,它将: 呆在底层 这样,我就不会丢失任何速度分数(因为它会像平常一样加载延迟加载的图像),但是,当一切都完成时,我也会加载完整的图像,所以用户不会注意到。(我们在加载实时聊天脚本时也做了同样的操作,效果非常好) 它可能看起来像这样: 我不是

  • 我一直在玩流,然后我注意到当我执行以下操作时,它不会在控制台中产生输出: 我认为这是因为是一个非终止流方法,应该使用而不是来终止流并生成结果: 然而,是否有一种方法可以‘提前’终止流,使用一个自定义的终止方法(函数接口),它除了终止流之外什么都不做?..有没有一个适当的方法来利用Java现有的东西来做到这一点? 我知道我可以这样做: 但那感觉很浪费。