当前位置: 首页 > 知识库问答 >
问题:

javascript延迟加载渐进增强方式?

督劲
2023-03-14

我正在为画廊老板建立一个网站,每个网页都有很多图片。因此,我想延迟加载网页上的图像,使最初的负载较轻。不过,我想以“逐步加强”的方式来实施这一点。

我发现了很多延迟加载方法,但它们都需要修改html代码,这样关闭javascript后网页就没用了。(例如,img标记的src属性保持未设置,直到图像延迟加载)。

要逐步实现懒惰加载方法,我认为需要以下内容:

  1. 阻止浏览器获取图像,即使页面上有其他图像,但仅在启用javascript时执行此操作(因此在非javascript浏览器上,图像仍按正常方式加载)。这应该在不改变html的情况下完成。
  2. src属性保存在data src属性中
  3. 向下滚动时按顺序加载图像

在这三个步骤中,第一步似乎是最难的。即使这个stackoverflow讨论也没有提供一个不会破坏渐进增强的答案。

有人有什么想法吗?

共有2个答案

富涛
2023-03-14

不指定src属性是无效的HTML,不幸的是,大多数惰性图像加载程序都是这样工作的。

我正在使用一个使用有效html标记的lazyloader,github链接:https://github.com/tvler/lazy-progressive-enhancement

将懒散加载的图像包装在noscript元素中进行声明:

<代码>

最终输出的html是

<代码>

您可以在github上查看整个项目,它处理批加载、事件挂钩

var noscript = document.querySelector('noscript'), img;
(img = document.createElement('div')).innerHTML = noscript.textContent;
noscript.parentElement.replaceChild(img.firstChild, noscript);
罗星洲
2023-03-14

既然没有人能给出答案,我就把我找到的合理解决方案贴出来。

这个问题可以归结为以下几点:当我们想阻止浏览器在打开javascript时下载图像时,我们必须确保在关闭javascript或不可用时下载图像。

当图片处于“正常”格式时,很难始终使用javascript停止加载页面上的图片:

<img src="path/to/image.jpg"></img>

要停止下载图像,我们必须删除它们的src属性,但要做到这一点,应该已经加载DOM。现在很多浏览器都进行了优化,很难保证图像不会被下载。

除此之外,我们当然希望避免中断已经下载的图像,因为这只是一种浪费。

因此,我选择使用以下解决方案:

<img data-src="path/to/image.jpg" class="lazy"></img>
<noscript>
    <img  src="path/to/image.jpg"></img>
</noscript>

请注意,noscript标记之外的图像没有src,而是具有datasrc属性。例如,lazyloading脚本可以使用它逐个加载图像。

只有当javascript不可用时,nocript块内的图像才会可见,所以没有必要加载. lailing图像(也没有办法做到这一点,因为javascript不可用)。

但我们确实需要隐藏图像:

<noscript>
    <style>
        .lazy {
            display: none;
        }
    </style>
 </noscript>

nocript块内的img标签一样,这个style块只有在javascript不可用时才对浏览器可见。

另一方面:我认为我可以通过根本不在惰性图像上添加srcdata-src属性来减少html大小。这会很好,因为它消除了页面中的冗余url,为我们节省了一些带宽。

我想我可以使用javascriptnoscript块中提取src属性。但是,这是不可能的:javascript无法访问noscript块的内容。因此,上述方案是我能想到的最有效的方案。

 类似资料:
  • 本文向大家介绍关于延迟加载JavaScript,包括了关于延迟加载JavaScript的使用技巧和注意事项,需要的朋友参考一下 JavaScript的延迟加载是那些在web上,能让你想抓狂地去寻找解决方案的问题之一。 很多人说“那就用defer”或“async”,甚至有些人说“那就将你的javascript代码放在页面代码底部”。 上述方法都不能解决在web页面完全加载后,再加载外部js的问题。上

  • 描述 (Description) 延迟加载可应用于图像,背景图像和淡入效果,如下所述 - 对于图像 要在图像上使用延迟加载,请按照给定的步骤进行操作 - 使用data-src属性而不是src属性来指定图像源。 将类lazy添加到图像。 <div class = "page-content"> ... <img data-src = "image_path.jpg" class = "l

  • 我正在使用Mika Tuupola的jQuery延迟加载。 是否可以在每次延迟加载图像后调用函数。 我打算做的是跟踪图像的浏览次数。因此,如果图像是延迟加载的,这意味着用户已经看到了图像,我将通过在后台执行HTTP GET,将数据库中的计数器增加1。

  • 问题内容: Jeff在谈论使用JQuery编写stackoverflow时提到了“渐进增强”的概念。 快速浏览Google之后,我发现了一些有关它的高层讨论。 任何人都可以推荐一个适合作为程序员开始的好地方。 具体来说,我一直在用PHP编写Web应用程序,并且希望使用YUI来改进我正在编写的页面,但是其中很多似乎都是基于JavaScript的,而大多数驴工作都是使用JavaScript完成的。对我

  • 问题内容: 我在JPA实体中的延迟加载属性有问题。我读过许多类似的问题,但它们与spring或hibernate有关,并且他们的后代不适用或没有帮助。 该应用程序是在Wildfly应用程序服务器上运行的JEE和JPA2.1。有两个实体,DAO会话bean和servlet将它们放在一起: 当我运行此代码时,它失败并显示: 我对WebLogic / JPA1使用了非常相似的模式,并且运行平稳。任何的想

  • 问题内容: 我想知道在node.js中使用是否等效于延迟加载? 例如,如果我有一个函数需要代码中其他任何地方都不需要的特定node.js包,那么我最好在该函数内部使用它,以便仅在调用该函数时才包含所需的包。 我还不确定是否会由于缺乏对node.js架构的了解而在性能方面有所改善?我想它每次与服务器的连接都会使用更少的内存。但是,当它必须读取程序包时,它会增加磁盘的I / O吗,还是将其添加到内存中