前端面试:异步加载和延迟加载的理解?

boyanx1个月前技术教程4

回答:

异步加载和延迟加载是前端优化网站性能的两种方法。

异步加载的方案:

动态插入script标签

通过ajax去获取js代码,然后通过eval执行

script标签上添加defer或者async属性创建并插入iframe,让它异步执行js

延迟加载:

有些 js 代码并不是页面初始化的时候就立刻需要的,而稍后的某些情况才需要的。

细说:

异步加载指的是在页面加载完成之后,通过JavaScript异步请求数据或资源,来避免阻塞页面的加载。常用的实现方式是使用XMLHttpRequest对象或fetch API发起异步请求,然后通过回调函数或Promise来处理请求结果。

异步加载可以提高页面的响应速度和用户体验,但也可能会增加页面的复杂度和维护成本。

延迟加载指的是将页面中不必要的资源(如图片、音频、视频等)的加载推迟到用户需要访问它们的时候再进行加载。

常用的实现方式是使用懒加载技术,即使用JavaScript来监听页面滚动或用户操作等事件,然后根据需要来动态加载资源。延迟加载可以减少页面的加载时间和带宽消耗,提高网站的性能和用户体验。

需要注意的是,异步加载和延迟加载并不是互斥的关系,它们可以结合使用来进一步优化网站的性能。

例如,在页面加载时可以先异步加载必要的脚本和样式文件,然后在用户需要访问资源时再进行延迟加载。

实例

异步加载:

使用XMLHttpRequest对象或fetch API发起异步请求,例如:

const xhr = new XMLHttpRequest();
xhr.open('GET', 'https://example.com/data.json');
xhr.onload = function() {
  if (xhr.status === 200) {
    const data = JSON.parse(xhr.responseText);
    // 处理请求结果
  } else {
    console.error('请求失败');
  }
};
xhr.send();

使用Promise来处理异步请求,例如:

fetch('https://example.com/data.json')
  .then(response => response.json())
  .then(data => {
    // 处理请求结果
  })
  .catch(error => {
    console.error('请求失败', error);
  });

使用async/await来处理异步请求,例如:

async function fetchData() {
  try {
    const response = await fetch('https://example.com/data.json');
    const data = await response.json();
    // 处理请求结果
  } catch (error) {
    console.error('请求失败', error);
  }
}
fetchData();

延迟加载:

使用Intersection Observer API来监听页面滚动事件,例如:

const images = document.querySelectorAll('img[data-src]');
const observer = new IntersectionObserver(entries => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      const image = entry.target;
      image.src = image.dataset.src;
      observer.unobserve(image);
    }
  });
});
images.forEach(image => {
  observer.observe(image);
});

使用图片占位符来减少页面的抖动,例如:

<img src="placeholder.jpg" data-src="image.jpg" width="300" height="200">

使用懒加载库来实现延迟加载,例如:

// 使用jQuery Lazy加载库
$("img.lazy").lazy({
  effect: "fadeIn",
  threshold: 200
});

以上是异步加载和延迟加载的一些具体实例,实际上还有很多其他的实现方式,需要根据具体情况来选择。

#挑战30天在头条写日记#

标签: jquery loading

相关文章

C#二次开发BIMFACE系列37 网页集成开发1审图系统中加载模型或图纸

在之前的《C#开发BIMFACE系列》中主要介绍了BIMFACE平台提供的服务端API接口的封装开发与测试过程。服务端API测试通过后,需要根据具体业务的需求集成到管理系统中,配合BIMFACE提供的...

使用vanilla-lazyload实现懒加载

使用vanilla-lazyload实现懒加载给主题配置一个全新的lazyload库,来自verlok的vanilla-lazyload开源js库,支持更多的特性和特效。vanilla-lazyloa...

加载后执行RunAfterImgLoaded.js

RunAfterImgLoaded.js故名思议是一款在图片加载完之后执行的一个js插件,但是这个还只是一个设想,有时间会再将它做出来。关于图片加载完之后执行的问题引申出一些新的发现。在最近一个切图项...

性能出色,纯CSS实现的loading动画——Loaders.css

介绍loaders.css是Github上一个使用纯粹的css实现的开源loading动画库,完全用CSS编写的加载动画的集合。每个动画仅限于CSS属性的一小部分,以避免复杂的绘画和布局计算。下面这张...

资源分享:炫酷的css3动画加载框架Loaders

页面加载动画在web应用中必不可少,加载动画效果也各有千秋。在web页面ajax请求,单页面应用页面切换时好的加载动画会让浏览者赏心悦目忘记加载的耗费时间,一个性能好的页面,必须有loading预加载...

伟景行 citymaker 从入门到精通(1)——js开发,最基本demo,加载cep工程文件

开发环境:citymaker 7(以下简称cm),jquery,easyui 1.4(界面),visual studio 2012(没有vs,部署到IIS也行,html在本地目录双击打开可用)以下演示...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。