我正在为画廊老板建立一个网站,每个网页都有很多图片。因此,我想延迟加载网页上的图像,使最初的负载较轻。不过,我想以“逐步加强”的方式来实施这一点。
我发现了很多延迟加载方法,但它们都需要修改html代码,这样关闭javascript后网页就没用了。(例如,img
标记的src
属性保持未设置,直到图像延迟加载)。
要逐步实现懒惰加载方法,我认为需要以下内容:
src
属性保存在data src
属性中 在这三个步骤中,第一步似乎是最难的。即使这个stackoverflow讨论也没有提供一个不会破坏渐进增强的答案。
有人有什么想法吗?
不指定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);
既然没有人能给出答案,我就把我找到的合理解决方案贴出来。
这个问题可以归结为以下几点:当我们想阻止浏览器在打开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不可用时才对浏览器可见。
另一方面:我认为我可以通过根本不在惰性图像上添加src
或data-src
属性来减少html大小。这会很好,因为它消除了页面中的冗余url,为我们节省了一些带宽。
我想我可以使用javascript从noscript
块中提取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吗,还是将其添加到内存中