首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

iOS11 Safari上不会出现JavaScript延迟加载图像回退

基础概念

JavaScript延迟加载图像(Lazy Loading Images)是一种优化网页性能的技术,它只在用户滚动到图像位置时才加载图像,而不是一次性加载所有图像。这样可以减少初始页面加载时间,提高用户体验。

问题描述

在iOS 11的Safari浏览器上,JavaScript延迟加载图像可能会出现回退问题,即图像无法正常加载。

原因分析

iOS 11的Safari浏览器对某些JavaScript API的支持不够完善,特别是与IntersectionObserver API相关的功能。IntersectionObserver是实现延迟加载图像的关键API之一,但在iOS 11的Safari中可能存在兼容性问题。

解决方案

1. 使用Polyfill

可以使用IntersectionObserver的Polyfill来解决兼容性问题。Polyfill是一种JavaScript代码,用于在不支持某些现代API的浏览器中模拟这些API的功能。

代码语言:txt
复制
<!-- 引入IntersectionObserver Polyfill -->
<script src="https://polyfill.io/v3/polyfill.min.js?features=IntersectionObserver"></script>

2. 使用传统的滚动事件监听

如果不想使用Polyfill,可以使用传统的滚动事件监听来实现延迟加载图像。

代码语言:txt
复制
function lazyLoadImages() {
    const images = document.querySelectorAll('img[data-src]');

    function checkImage(event) {
        images.forEach(img => {
            if (img.getBoundingClientRect().top <= window.innerHeight && img.getBoundingClientRect().bottom >= 0) {
                const src = img.getAttribute('data-src');
                if (src) {
                    img.src = src;
                    img.removeAttribute('data-src');
                }
            }
        });
    }

    window.addEventListener('scroll', checkImage);
    window.addEventListener('resize', checkImage);
    window.addEventListener('orientationchange', checkImage);

    // 初始检查
    checkImage();
}

document.addEventListener('DOMContentLoaded', lazyLoadImages);

3. 使用第三方库

还可以使用一些成熟的第三方库来实现延迟加载图像,例如lazysizes

代码语言:txt
复制
<!-- 引入lazysizes库 -->
<script src="https://cdn.jsdelivr.net/npm/lazysizes@5.3.2/lazysizes.min.js" async=""></script>

<!-- 使用lazysizes实现延迟加载 -->
<img data-src="image.jpg" class="lazyload" />

应用场景

延迟加载图像广泛应用于各种网页,特别是包含大量图像的网站,如图片库、电商网站、新闻网站等。通过延迟加载图像,可以显著提高页面加载速度,提升用户体验。

参考链接

通过以上方法,可以有效解决iOS 11 Safari上JavaScript延迟加载图像回退的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

提升 Web 核心性能指标的 9 个建议

去年的 Google I/O 活动上,他们展示了实际的下载时间往往不是图像的最大延迟,今年的分析进一步证实了这一点。...但是在将 LCP 图像优化的可以被易于发现后,并不代表就可以更快的加载。因为浏览器更倾向于优先处理阻塞渲染的内容,如 CSS 和同步 JavaScript,而不是图像。...回到之前的例子,我们解决了图片可尽早被发现的问题,但是请求图像和开始下载依然会存在很大的延迟。使用 fetch proirity API 可以将延迟最小化,并且让图像尽快下载。...BF Cache 我们去年看到 CLS 的最大改进之一是在 Chrome 中推出的回退缓存或 BF 缓存中。另外,Safari 和 Firefox 也已经上线这个功能一段时间了。...JavaScript 不是唯一可以影响我们网站响应性的东西,如果浏览器需要大量的工作来将页面渲染到屏幕,那么浏览器本身也可能会变慢。

58120

灯塔原创|苹果如何稳住阵营,在AI、AR大战中自成一派?

,预计在下一代的iPhone将会增加增强现实的功能; 智能语音助手Siri:AI专用芯片可以将移动设备本身的运算能力带来一个显著的提高,不需要再将数据上传云服务器进行处理,这将大大减少延迟,从而提供更加快速的机器学习服务...在此次WWDC,苹果发布了新的机器学习框架Core ML,其中包括了面部识别、自然语言处理、图像识别等API。...苹果这次发布的各项软件产品中,也无不都整合了深度学习带来的智能人性功能:Siri的自然语言理解和翻译功能,Safari的网页追踪保护隐私功能,Photos的图像识别功能,New应用的推荐功能,Apple...在应用程序,Messages有了重新设计的应用程序抽屉;转账功能上,支持了个人向个人转账功能;人像模式图像处理上,iOS11中,人像模式图像质量更高,照片库更加智能,可以识别更多种类的活动,如婚礼,婴儿淋浴等...但这不是仅仅的图像叠加,当你移动手机而保持物品固定时,苹果在物体的一些细节也做得很棒。凭借对软硬件的完全控制。

75180
  • Cloudflare的HTTP2优化策略

    在浏览器访问至文档正文也就是之前,网页不会向用户显示任何内容,页面将保持空白。因此,浏览器需要尽可能快地加载头部文件。...如上所述,在浏览器呈现全部网页内容之前的页面加载时期,会在CSS被阻止并阻止HTML的部分中的JavaScript;所以在这一期间最好使用全部连接带宽以充分下载被阻塞的资源,并按照HTML...获取字体过程所发生的任何延迟最终都会导致屏幕显示空白文本或以错误字体显示文本。...JavaScript可能包括面向用户的应用程序逻辑、用户行为分析与营销跟踪信标,一旦出现延迟即可导致业务跟踪指标的下降。 借并行下载可实现更好的图像加载效果。...2)Safari Safari 同样采取并行策略加载所有资源,但Safari会根据不同资源的重要程度为其划分合适且足够的带宽(例如:渲染脚本和样式表等阻塞资源比渲染图像更为重要);而图像虽采用并行加载的策略

    1.3K30

    什么是 Preload、Prefetch 和 Preconnect?

    一般来说,最好使用 preload 来加载你最重要的资源,比如图像,CSS,JavaScript 和字体文件。这不要与浏览器预加载混淆,浏览器预加载只预先加载在HTML中声明的资源。...preload 指令事实克服了这个限制并且允许预加载在 CSS 和JavaScript 中定义的资源,并允许决定何时应用每个资源。...同时也要注意 preload 并不会阻塞 window 的 onload 事件。...举例 这里有一个非常基本的预加载图像的例子: 这里有一个预加载字体的例子,记住:如果你的预加载需要 CORS 的跨域请求,那么也要加上..."DNS 请求在带宽方面流量非常小,可是延迟会很高,尤其是在移动设备。通过 prefetching 指定的 DNS 可以在特定的场景显著的减小延迟,比如用户点击链接的时候。

    5.6K31

    【兼容性】监听页面关闭发送请求

    于是就去研究了一下,好家伙,兼容性五花八门 我测试的终端包括 1、Windows PC (10),Chrome 2、iOS(14,13,12,11),Safari 3、Android (10,9),自带浏览器...,并使得下一个导航出现的更晚。...针对这个情况, navigator.sendBeacon() 方法就出现了 会使用户代理在有机会时异步地向服务器发送数据,同时不会延迟页面的卸载或影响下一导航的载入性能。...这就解决了提交分析数据时的所有的问题:数据可靠,传输异步并且不会影响下一页面的加载 yyds!...但是好像支持情况也不太好嘛,IE 再见了 经过实测,只有 iOS11 没有sendBeacon 这个方法,其他的 HarmonyOS ,Android,PC、iOS11以上 都能成功发送请求 但是呢,

    4.7K50

    2020前端性能优化清单(五)

    使用 IntersectionObserver 和优先级提示(priority hints)懒加载耗性能的组件 通常,我们应该延迟加载所有耗性能的组件,比如大的 JavaScript、视频、iframe...请再次检查所有可以延迟加载的内容,即使是延迟加载翻译字符串和表情符号。移动 Twitter 就是通过该方法在新的国际化管道中实现了 80%的 JavaScript 执行速度提升。 ?...您可能需要将此应用到每个模板。 你可以使用 critters Webpack 插件[28]嵌入关键的 CSS 和延迟加载其余的 CSS。...您还可以动态加载 JavaScript[79],有效地延迟加载执行。...考虑使用本地延迟加载[122],而不是使用带有外部脚本的延迟加载,或者只在本地延迟加载不受支持的情况下使用混合延迟加载[123]。

    2K20

    揭秘HTTP3优先级

    另一个例子就是Chromium的“紧凑模式”,它会主动延迟掉不太重要的资源(例如HTML中的图像、CSS和JS),直到(大部分)更重要的资源加载完成。再有,同时激活的预加载资源也有限制。...这些信号不会以原始形式出现在浏览器的开发工具中,也不会出现在WebPageTest内。所以我决定修改aioquic HTTP/3服务器,为优先级信号添加一些额外的日志记录。...这应该不会影响服务器的资源交付方式(紧急度值的比较关系更重要,具体使用哪个数字其实无所谓),但有趣的是,即使是这样一套简单系统,市面上也出现了三种不同的实现方法。...另外还有两个明确的例子,能够说明单纯强调优先级还不够:预加载和懒加载都根本不会影响到图像优先级!...最后,测试页面中还包含隐藏的懒加载图像,各浏览器均未对其发出请求。 作为测试的收尾,我打算试试用JavaScript fetch() API发出的请求的优先级。

    73520

    【HTML5 理论知识】就H5调试技巧,浅谈:iPhone X 适配方案!

    机型,H5加入viewport-fit=cover后,safeArea的值是基于“如果布局接触了非安全区域才会赋值”。...缺点:适配iPhone X时需要同时考虑其他iOS11机型下会不会受到影响。 以上只分析竖屏webview下的情况,横屏webview可以自行通过模拟器进行研究。接下来介绍一下模拟器的使用。...,然后调用Safari调试。...H5 调试 安装应用后,在应用里访问H5页面,然后打开Safari(需要开启Safari的开发工具),在菜单中选择开发-Simulator-页面地址 ,就可以用Safari的检查器对其作调试了。...(当有多个页面地址,将鼠标移至二级菜单的某一个页面地址时,模拟器页面屏幕会有蓝色遮罩出现时则是选中了本页面地址),有些时候Safari识别不到模拟器,只需退出Safari,点一下模拟器屏幕,再重新打开Safari

    3.3K80

    聊一聊关于加快网站加载时间相关的 JS 优化技术

    此方法允许仅通过单个 HTTP 请求加载许多图像,从而减少延迟并缩短加载时间。...通过将这些较小的图像组合成一个文件,浏览器只需要请求一个图像,减少了 HTTP 请求的数量。 05、延迟加载资源 延迟加载是一种将非关键资源的加载推迟到实际需要时才加载的技术。...01)、JavaScript 代码示例:实现延迟加载 为了说明延迟加载,让我们使用仅当图像在视口中可见时才加载图像的示例。这可以使用 IntersectionObserver API 来实现。...检测到图像时,会将其 data-src 属性分配给 src 属性,从而触发实际的图像下载。加载图像后,将删除延迟加载类,并且不会观察到图像。...01)、JavaScript 文件的异步加载 异步加载允许浏览器下载和执行 JavaScript 文件,而不会阻止页面其余部分的呈现。

    32220

    深入了解加快网站加载时间的 JavaScript 优化技术

    此方法允许仅通过单个 HTTP 请求加载许多图像,从而减少延迟并缩短加载时间。...通过将这些较小的图像组合成一个文件,浏览器只需要请求一个图像,减少了 HTTP 请求的数量。 05、延迟加载资源 延迟加载是一种将非关键资源的加载推迟到实际需要时才加载的技术。...01)、JavaScript 代码示例:实现延迟加载 为了说明延迟加载,让我们使用仅当图像在视口中可见时才加载图像的示例。这可以使用 IntersectionObserver API 来实现。...检测到图像时,会将其 src 属性分配给 src 属性,从而触发实际的图像下载。加载图像后,将删除延迟加载类,并且不会观察到图像。...01)、JavaScript 文件的异步加载 异步加载允许浏览器下载和执行 JavaScript 文件,而不会阻止页面其余部分的呈现。

    26630

    属性async和defer的区别

    表示应该立即下载脚本,但不应妨碍页面中的其他操作,比如下载其他资源或 等待加载其他脚本。只对外部脚本文件有效。 defer:可选。表示脚本可以延迟到文档完全被解析和显示之后再执行。...延迟脚本defer HTML 4.01 为标签定义了 defer 属性。这个属性的用途是表明脚本在执行时不会影响页面的构造。也就是说,脚本会被延迟到整个页面都解析完毕后再运行。...HTML5 规范要求脚本按照它们出现的先后顺序执行,因此第一个延迟脚本会先于第二个延迟脚本执行,而这两个脚本会先于 DOMContentLoaded 事件执行。...IE4、Firefox 3.5、Safari 5 和 Chrome 是最早支持 defer 属性的浏览器。其他浏览器会忽略这个属性,像平常一样处理脚本。为此,把延迟脚本放在页面底部仍然是最佳选择。...支持异步脚本的浏览器有 Firefox 3.6、Safari 5 和 Chrome。

    76020

    Safari 18.0 WebKit 新特性介绍

    一旦连接,设备将出现Safari 的开发菜单中。最后,要启用无线调试,前往 macOS Safari > 开发 > [你的设备] > 通过网络连接。...当他们退出图像时,Safari 窗口会返回。 让我们来看看如何使用全屏 API 在网页支持体验空间照片或全景图。首先,使用任何多年来使用的技术将图像包含在网页中。...空间图像的工作原理相同,尽管我们可能需要为不支持 HEIC 文件的浏览器提供回退。我们可以使用 picture 元素来实现。...在 Safari 中,当图像嵌入网页时,浏览器会显示左通道。而且不需要为 macOS、iOS 或 iPadOS Safari 提供任何形式的回退——立体 HEIC 文件效果很好。...当你使用 时,只有一个图像会被下载,浏览器会完成所有繁重的工作。 JavaScript Safari 18.0 的 WebKit 从全局对象中移除了 [[VarNames]] 。

    22810

    CSS和网络性能

    CSS对于呈现页面至关重要 - 在找到,下载和解析所有CSS之前,浏览器不会开始呈现 - 因此我们必须尽可能快地将其加载到用户的设备。...我们的@ import网址中缺少引号会破坏Chrome的预装扫描程序(N.B.在Opera和Safari中会出现相同的瀑布。)...在我们的@ import网址中添加引号可修复Chrome的Preload Scanner(N.B.在Opera和Safari中也会出现相同的瀑布。)...不要在Async 脚本之前放置 一节讨论了如何通过其他资源减慢CSS,本节将讨论CSS如何无意中延迟下载资源的下载,主要是使用异步加载代码段插入的JavaScript...答案是: 如果文件不相互依赖,那么您应该将阻塞脚本置于阻塞样式之上 - 没有必要将JavaScript执行延迟JavaScript实际不依赖的CSS。

    1.3K30

    使用CSS提高网站性能的30种方法

    6.使用fonts 使用OS字体可以保存数百KB,并避免出现诸如无样式文本闪烁(FOUT)或不可见文本闪烁(FOIT)等问题。您的用户可能根本不会注意到。...可选:与回退相同,只是在下载Web字体后不进行字体交换。它应该出现在下一个页面加载。...该确保在未启用JavaScript的情况下仍然加载: <!...JavaScript框架引入了这些概念,但它们的组件从未真正与其他CSS或JavaScript分离。原生组件提供了一个Shadow DOM,它隔离了元素,因此样式和功能不会泄漏。...至少,使用以下内容: 桌面:Firefox、Chrome(Chrome、Edge、Brave、Opera或Vivaldi)和Safari浏览器 移动的:Android的Chrome和iOSSafari

    3.4K20

    现代脚本的加载

    所以你应该针对现代浏览器提供包含更紧凑和优化的现代语法的Javascript包,同时又可以保持对旧浏览器的支持 现有的工具链的生态系统基本都是在module/nomodule模式整合的,它声明式加载现代和传统代码...另一种实现方式是检查浏览器是否支持nomodule, 这是方式可以避免上述的延迟加载问题, 只不过这意味着像Safari 10.1这些支持模块, 却不支持nomodule的浏览器也会被当做传统浏览器,这也许可能是好事...我们上面介绍的模块加载器是完全动态的,所以浏览器在没有运行我们的代码之前,是没办法发现我们要预加载现代还是传统的Javascript资源的。...不过性能上面可能欠点,因为传统的脚本预加载不会像modulepreload一样随着时间的推移而去展开解析工作(rel=preload只是下载,不会尝试去解析脚本)。...值得注意的是,占据移动端主要市场份额的用户代理不会有双重加载问题,所以这些流量不太可能来自于低速或者高昂流量费的手机。

    86620

    被忽略的缓存 -bfcache

    之前遇到过一个问题,整体表现形态是分成以下 3 种情况: 同一个项目同一个页面,部署在不同的环境中,浏览器回退时,有的环境不会重新请求页面的初始化接口,而有的环境却可以。...当用户在浏览器中执行后退或前进操作时,浏览器可以从 bfcache 中快速加载页面,而不是重新请求服务器并重新渲染页面。这意味着用户可以瞬间回到之前访问的页面,无需等待页面重新加载。...它不是 HTTP 意义的“缓存”,不是“磁盘缓存”意义的“缓存”,而是将解码资源保存在内存中,以便在多个网页之间共享。...缓存页面资源:除了保存页面的状态,浏览器还会将与页面相关的资源(如 JavaScript 文件、样式表、图像等)保存在内存中,以便在后续加载页面时可以快速访问这些资源,而无需重新请求服务器。...这样浏览器就可以安全地缓存页面,而不会影响其他打开的选项卡。

    84930
    领券