面试官必问系列之性能优化中的防抖和节流

什么是防抖?什么是节流?

防抖:用户触发高频事件(比如说点击事件)后n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间,n秒后再执行。总之,就是等待用户触发完事件n秒内不再触发事件,再执行函数。

节流:用户触发高频事件(比如说点击事件)后n秒内函数只会执行一次。也就是说,不论用户在n秒内触发多少次事件,最终函数都会在n秒后执行一次。

防抖和节流的应用场景

防抖:

  1. 登录、发短信等按钮,避免发送多次请求
  2. 文本编辑器的自动保存
  3. input输入框,每隔特定时间发送请求(输入搜索)或者展开下拉列表(节流也可以)

节流:

  1. scroll滚动事件,每隔特定时间执行回调函数
  2. 浏览器窗口大小resize,避免次数过于频繁(防抖也可以)

手动实现防抖和节流

防抖

//debounce函数接收两个参数,第一个是要执行的函数,第二个是指定的时间间隔,也就是上述的n
function debounce(fn, delay) {
   
   
	//定时器
	let timer  = null;
	return function(...args) 
### 中高级前端开发面试中的项目难点及解决方案 中高级前端开发面试通常会更加注重实际项目经验以及解决题的能力。以下是一些常见的项目相关难点考察点,并提供相应的解决方案。 #### 1. **性能优化** - 面试官可能会到如何优化页面加载速度、减少重绘回流等题。 - 解决方案包括使用懒加载技术、图片压缩、代码分割等[^1]。例如,可以利用 Webpack 的 `splitChunks` 功能对第三方库进行单独打包,从而减少主文件的体积。 ```javascript optimization: { splitChunks: { chunks: 'all', }, } ``` #### 2. **前后端分离架构** - 面试官可能会关注你在前后端分离项目中的实践经验,例如如何处理跨域题、API 调用失败时的容错机制等。 - 可以通过配置 CORS(跨域资源共享)来解决跨域题,或者使用 JSONP 技术(虽然不推荐,但在某些情况下仍然适用)。此外,还可以在请求失败时设置重试机制。 ```javascript axios.interceptors.response.use( response => response, error => { if (error.response.status === 500) { // 自定义错误处理逻辑 console.error('服务器内部错误'); } return Promise.reject(error); } ); ``` #### 3. **模块化与构建工具** - 面试官可能会询你对 Grunt、Gulp、Webpack 等构建工具的理解,以及如何根据项目需求选择合适的工具。 - Webpack 是目前最流行的构建工具之一,可以通过插件 loader 实现复杂的构建需求。例如,使用 `html-webpack-plugin` 自动生成 HTML 文件。 ```javascript const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { plugins: [ new HtmlWebpackPlugin({ template: './src/index.html', }), ], }; ``` #### 4. **团队协作与沟通能力** - 在团队项目中,良好的沟通能力协作能力是不可少的。面试官可能会通过你的过往经历来评估这些软技能。 - 例如,在团队项目中,可以通过 Git 分支管理策略(如 Git Flow)确保代码质量,同时定期召开会议以同步进度[^3]。 #### 5. **防抖节流** - 面试官可能会要求你实现防抖节流函数,甚至要求结合实际场景进行优化。 - 下面是一个防抖函数的实现,且让函数在一开始立即执行一次,之后按照正常节流逻辑运行[^1]。 ```javascript function debounceThrottle(func, wait) { let timeout; let executedOnce = false; return function (...args) { if (!executedOnce) { executedOnce = true; func.apply(this, args); } clearTimeout(timeout); timeout = setTimeout(() => { executedOnce = false; func.apply(this, args); }, wait); }; } ``` #### 6. **面试心态调整** - 面试过程中保持良好心态非常重要,适当的紧张可以帮助你集中注意力,但过度紧张可能会影响表现。 - 可以通过多次模拟面试来缓解紧张情绪,并逐步适应面试环境[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值