备案 控制台
学习
实践
活动
专区
工具
TVP
写文章

JavaScript中常用的方法汇总

; var obj = null; for (var i = 0; i < js .length; i++) { if ( js [i].tagName.toLowerCase 原理: 在 事件 被 触发 n秒后再 执行 回调,如果在这n秒内又被 触发 ,则重新计时。 适用场景: 1. 按钮提交场景:防止 多次 提交按钮, 只 执行 最后提交的 一次 ; 服务端验证场景:表单验证需要服务端配合, 只 执行 一段连续的输入 事件 的最后 一次 ; 只能 触发 一次 函数。如果这个单位时间内 触发 多次 函数,只有 一次 生效。 适用场景: 1. 拖拽场景:固定时间 只 执行 一次 ,防止超高频次 触发 位置变动; 2. 缩放场景:监控浏览器resize; 动画场景:避免短时间内 多次 触发 动画引起的性能问题。

418 2 0

前端性能优化

+=' hello '; 改造( JS 只读取 一次 DOM元素,但是,依旧 多次 更改DOM元素): // 只 获取 一次 container let container = document.getElementById 只读取 一次 DOM元素, 只 操作DOM元素): let container = document.getElementById('container'); let content = ''; for(let 事件 节流(throttle)和防抖(debounce) 比如窗口的scroll和resize 事件 ,一旦激活,会频繁 触发 相应的 事件 函数。频繁 触发 回掉函数导致的大量计算有可能引发页面抖动甚至卡顿。 为了规避这些风险,我们会采用 事件 节流或者防抖,来降低函数的 触发 频率。 节流:当 事件 第 一次 被 触发 时,在指定时间内,无论再次 触发 多少次,都会被忽略。也就是说,以第 一次 事件 为准。 防抖: 事件 触发 后,会延迟 执行 ,在延迟时间内,如果 事件 再次 被 触发 ,上 一次 的 事件 被 取消,以当次为准,重新延迟 执行 。也就是说,以最后 一次 事件 为准。

336 3 0
  • 广告
    关闭

    有奖征文丨玩转 Cloud Studio

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    javascript函数防抖节流,适用于搜索 多次 触发 请求等场景。

    document.getElementById('unDebounce'); function fn(e){ ajax(e.target.value) } //防抖函数,处理 多次 被 触发 的 事件 inputa = document.getElementById('unDebounce'); function fn(e){ ajax(e.target.value) } //防抖函数,处理 多次 被 触发 的 事件 函数节流(throttle) 规定在一个单位时间内,只能 触发 一次 函数。如果这个单位时间内 触发 多次 函数,只有 一次 生效。 函数防抖和函数节流都是防止某一时间频繁 触发 ,但是这两兄弟之间的原理却不一样。 函数防抖是某一段时间内 只 执行 一次 ,而函数节流是间隔时间 执行 。 window 触发 resize的时候,不断的调整浏览器窗口大小会不断的 触发 这个 事件 ,用防抖来让其 只 触发 一次 throttle 鼠标不断点击 触发 ,mousedown(单位时间内 只 触发 一次 ) 拖拽 事件 ,每拖动

    213 3 0

    构建工具Gulp-lesson3

    什么 事件 可以 被 监控: 在默认的情况下,文件的创建、更改、删除会 触发 关联任务的 执行 。 // body omitted cb(); 注:上面的代码来自 gulp 官网; 立即 执行 : 在调用 watch 后所关联的任务默认不会立即 触发 执行 ,而是需要等第 一次 触发 文件变化的 事件 后才 执行 ,如果有需要在启动后就立即 执行 一次 ,watch 函数提供的参数 2 中支持选项 ignoreInitial 配置为 false 来支持。 function(cb) { // body omitted cb(); 注:上面的代码来自 gulp 官网; 队列应用: gulp 默认在每次文件变化后都将 触发 关联任务的 执行 ,短时间内的 多次 文件变化会将每个任务排队等待依次 执行 const { watch } = require('gulp'); // 文件第 一次 修改之后要等待 500 毫秒才 执行 关联的任务 watch('src/*. js ', { delay: 500 },

    84 3 0

    Vue v-on的 事件 修饰符

    ) 触发 时 触发 回调 .once 事件 只 触发 一次 事件 修饰符的串联使用,例如:@click.prevent.once,只会 执行 一次 阻止默认行为,第二次则不会阻止。 那么为了阻止冒泡 事件 ,可以使用.stop 事件 修饰符,如下: 再次在浏览器点击按钮,查看 触发 事件 如下: 可以看到div的click 事件 没有 被 触发 ,已经阻止 事件 冒泡了。 此时点击a标签则阻止了默认行为, 只 执行 监听 事件 。 示例: .capture 添加 事件 侦听器时使用 事件 捕获模式 事件 捕获模式其实是冒泡 事件 的相反 事件 传递模式,也就是由外而内的 事件 触发 模式。 点击div,查看 触发 事件 ,如下: 示例:.once 事件 只 触发 一次 多次 点击btn按钮,查看 触发 事件 ,如下: 示例: 事件 修饰符的串联使用,例如:@click.prevent.once,只会 执行 一次 阻止默认行为,第二次则不会阻止。另外,两个 事件 修饰符的先后效果一致。 ?

    513 1 0

    Vue v-on 事件 修饰符

    ) 触发 时 触发 回调 .once 事件 只 触发 一次 事件 修饰符的串联使用,例如:@click.prevent.once,只会 执行 一次 阻止默认行为,第二次则不会阻止。 「阻止冒泡 事件 」,可以使用「stop」 事件 修饰符,如下: 再次在浏览器点击按钮,查看 触发 事件 如下: 可以看到div的click 事件 没有 被 触发 ,已经阻止 事件 冒泡了。 但是很多时候,其实是不需要a标签的默认行为的,这时候就需要阻止默认行为了,如下: 此时点击a标签则阻止了默认行为, 只 执行 监听 事件 。 点击div,查看 触发 事件 ,如下: 示例:.once 事件 只 触发 一次 多次 点击btn按钮,查看 触发 事件 ,如下: 示例: 事件 修饰符的串联使用,例如:@click.prevent.once, 只会 执行 一次 阻止默认行为,第二次则不会阻止。

    128 3 0

    【说站】面试准备:快速学习 JS 防抖与节流

    一、速识防抖: 在这之前,比如我们先定义一个按钮,并绑定一个点击 事件 , 执行 要 触发 的 事件 :     console.log(e); </script> 可以发现,一直点击会一直 触发 事件 ,如果这个 事件 为发送一个请求,那么这对与服务器来说是很不友好的。 同样的请求因为用户的 多次 点击而 多次 发送请求,返回的结果和 只 点击 一次 是一样的,大大加重服务器压力和影响性能。 所以,我们引入防抖的概念,简单来说,防抖就是通过setTimeout 的方式,在一定的时间间隔内,将 多次 触发 变成 一次 触发 。 二、速识节流: 节流其实就很好理解了,减少一段时间的 触发 频率。 简单来说,就是你一直狂点不停的话,它会每隔一定时间就 执行 一次 。它与防抖区别就是,无论 事件 触发 多么频繁,都可以保证在规定时间内可以 执行 一次 执行 函数。

    103 3 0

    JavaScript网页性能优化(函数防抖与函数节流)

    防抖 :如果用户鼠标轻微晃动,在某一个元素上停留时间很短,则认为是用户误 触发 ,则不 执行 本次 事件 处理函数 一句话总结:用户连续 多次 触发 某个 事件 ,则 只 执行 最后 一次 由于函数防抖 属于 前端中的 网页性能优化技术 此时并没有彻底解决函数防抖,因为用户 多次 触发 事件 时,每一个定时器都会在0.5s之后,依次 执行 2.每 一次 移入元素时 : 先清除上 一次 的定时器 保证用户 多次 触发 事件 时,以最后 一次 触发 为准 注意点:定时器中的 函数防抖 : 用户连续 多次 触发 某个 事件 ,则 只 执行 最后 一次 * 如果用户鼠标轻微晃动,在某一个元素上停留时间很短,则认为是用户误 触发 ,则不 执行 本次 事件 处理函数 例如:鼠标点击 事件 ,限制0.5s内只能 被 触发 一次 。 无论你点击有多快,0.5s也只会 执行 一次 。 p1.innerText = '点击 事件 被 触发 ' + k + '次'; }, 1000); 03-函数防抖和函数节流区别总结: 1.函数防抖:用户 多次 触发 事件 ,以最后 一次 触发 为准

    879 1 0

    百度前端必会手写面试题及答案

    在指定时间内 只 执行 一次 回调函数,如果在指定的时间内又 触发 了该 事件 ,则回调函数的 执行 时间会基于此刻重新开始计算图片防抖动和节流本质是不一样的。 , 只 执行 最后提交的 一次 服务端验证场景:表单验证需要服务端配合, 只 执行 一段连续的输入 事件 的最后 一次 ,还有搜索联想词功能类似实现节流函数(throttle)节流函数原理:指频繁 触发 事件 时,只会在指定的时间段内 执行 事件 回调 图片像dom的拖拽,如果用消抖的话,就会出现卡顿的感觉,因为 只 在停止的时候 执行 了 一次 ,这个时候就应该用节流,在一定时间内 多次 执行 ,会流畅很多手写简版使用时间戳的节流函数会在第 一次 触发 事件 时立即 执行 ,以后每过 :固定时间内 只 执行 一次 ,防止超高频次 触发 位置变动缩放场景:监控浏览器resize动画场景:避免短时间内 多次 触发 动画引起性能问题总结函数防抖 :将几次操作合并为 一次 操作进行。 原理是维护一个计时器,规定在delay时间后 触发 函数,但是在delay时间内再次 触发 的话,就会取消之前的计时器而重新设置。这样一来,只有最后 一次 操作能 被 触发 。函数节流 :使得一定时间内 只 触发 一次 函数。

    127 5 0

    医疗数字阅片-医学影像-Lodash 是一个一致性、模块化、高性能的 JavaScript 实用工具库。_.throttle(func, , [option

    在顶部按钮上点击或移动鼠标试一下: 你可以看到连续快速的 事件 是如何 被 一个 debounce 事件 替代的。但是如果 事件 触发 的时间间隔过长,debounce 则不会生效。 前缘(或者“immediate”) 你会发现,直到 事件 停止快速 执行 以后,debounce 事件 才会 触发 相应功能。为何不立即 触发 呢?那样的话就跟原本的非 debounce 处理无异了。 Debounce 实例 调整大小的例子 调整桌面浏览器窗口大小的时候,会 触发 很 多次 resize 事件 。 看下面 demo: 如你所见,我们为 resize 事件 使用了默认的 trailing 选项,因为我们 只 关心用户停止调整大小后的最终值。 debounce:把 触发 非常频繁的 事件 (比如按键)合并成 一次 执行 。 throttle:保证每 X 毫秒恒定的 执行 次数,比如每200ms检查下滚动位置,并 触发 CSS 动画。

    381 2 0

    【 JS 实用技巧篇】01-函数防抖|节流

    * @param {Number} delay 函数fn延迟 执行 的时间 * @returns 返回一个函数,在delay时间过后 执行 该函数; 如果某 事件 再次 被 触发 ,清除前一个计时器,即前 一次 在delay 时间过后要 执行 的函数 被 清除,然后再次返回该函数;即每 触发 防抖函数,都会重新返回一个新的在delay时间过后要 执行 的函数 function debounce(fn, delay = 1000) { ,如果在推迟期间 执行 函数,会将函数进一步推迟 当用户 多次 触发 某 事件 时,会造成频繁向后端服务器发送请求 为了避免这种情况,函数防抖保证 只 在最后 一次 触发 后 执行 函数,也就是 只 向后台发送最后 一次 的请求 debounce ,随后每隔2s 触发 一次 ,函数节流与函数防抖的区别就很明显了,对函数节流而言,在设定的时间内一定会 执行 一次 ,而函数防抖是在最后 一次 触发 后才 执行 。 实现代码: 函数防抖和节流: 目的:都是为了节约计算机资源,提升用户体验 节流:在指定时间间隔内只会 执行 一次 任务 防抖:当任务频繁 触发 的情况下,只有任务 触发 的间隔超过指定时间间隔的时候(即最后 一次 触发 任务后

    148 3 0

    小前端读源码 - React16.7.0(深入了解setState)

    为什么在短时间内连续setState两次甚至 多次 只会 触发 一次 render? 为什么setState是异步的? 当我们点击button按钮 触发 onClick 事件 的时候,会通过合成 事件 分发对应的回调函数, 执行 onClick中的内容。在onClick函数中,我们进行了 一次 setState。 连续setState 多次 只 触发 一次 render就是因为经过了合成 事件 的关系,合成 事件 先 执行 了onClick函数中的setState,修改了Fiber的updateQueue对象的任务, 执行 完onClick 所以无论你在一个 事件 内 触发 无数次setState,也只会 触发 一次 render。 这也是因为刚刚说到的,合成 事件 会先 执行 onClick中的setState,但是并不会马上进行渲染,所以新的state 只 存在于Fiber节点的updateQueue中,并不会马上赋值到组件的state中。

    143 2 0

    JavaScript手写防抖和节流函数

    防抖 函数防抖是指在 事件 被 触发 n秒后再 执行 回调,如果在这n秒内 事件 又被 触发 ,则重新计时。这可以使用在一些点击请求的 事件 ,避免因用户的 多次 点击向后端发送 多次 请求。 按钮提交场景:防止 多次 提交按钮, 只 执行 最后提交的 一次 服务端验证场景:表单验证需要服务端配合, 只 执行 一段连续的输入 事件 的最后 一次 还有搜索联想词功能类似生存环境请用lodash.debounce timer=setTimeout(()=>{ fn.apply(context,args); },wait) 节流是规定一个单位时间,在这个单位时间内,只能有 一次 触发 事件 的回调函数 执行 ,如果在同一个单位时间内某 事件 被 触发 多次 ,只有 一次 能生效。 拖拽场景:固定时间内 只 执行 一次 ,防止超高频次 触发 位置变动 缩放场景:监控浏览器resize 动画场景:避免短时间 多次 触发 动画引起性能问题 //时间戳版 function throttle

    147 2 0

    $nextTick 源码解析

    如果已经有 timerFunc 被 推送到任务队列中去则不再推送 let pending = false // 执行 事件 队列中的 事件 function flushCallbacks () { pending $nextTick(cb); 1. nextTick 的实现原理** 简单的概括,nextTick 只 做了两件事情: 将回调函数 cb 包装处理为箭头函数添加到 事件 队列中 事件 队列异步 执行 ( 执行 的优先顺序为 如果我们在对所有数据的操作 执行 完之后才 执行 计算、渲染就可以 只 执行 一次 ,而 event loop 刚好具有这个特性。 对所有数据的同步操作完成之后再进行渲染,可以减少不必要的计算、渲染 只要观察到数据变化,Vue 将开启一个队列,并缓冲在同一 事件 循环中发生的所有数据改变。 如果同一个 watcher 被 多次 触发 ,只会被推入到队列中 一次 。 至此,for 循环 多次 为什么 只 渲染 一次 也就有答案了: update 的时候只会添加一个 watcher 到 事件 队列中,而且 事件 队列会通过调用 nextTick 异步 执行 4. nextTick历史版本问题

    440 3 0

    JS 温故知新

    队列、堆、栈、 事件 循环构成了 js 的并发模型, 事件 循环 是 JavaScript 的 执行 机制。 为什么 js 是一门单线程语言呢? 2、内存泄漏优化   在 JS 中,常见的内存泄露主要有 4 种,全局变量、闭包、DOM 元素的引用、定时器 # 节流防抖 节流: 事件 触发 后,规定时间内, 事件 处理函数不能再次 被 调用。 也就是说在规定的时间内,函数只能 被 调用 一次 ,且是最先 被 触发 调用的那次。 防抖: 多次 触发 事件 , 事件 处理函数只能 执行 一次 ,并且是在 触发 操作结束时 执行 。 也就是说,当一个 事件 被 触发 准备 执行 事件 函数前,会等待一定的时间(这时间是码农自己去定义的,比如 1 秒),如果没有再次 被 触发 ,那么就 执行 ,如果 被 触发 了,那就本次作废,重新从新 触发 的时间开始计算,并再次等待 * 节流函数 一个函数 执行 一次 后,只有大于设定的 执行 周期才会 执行 第二次。有个需要频繁 触发 的函数,出于优化性能的角度,在规定时间内, 只 让函数 触发 的第 一次 生效,后面的不生效。

    108 6 0

    精读《React 18》

    Automatic batching batching 是指,React 可以将回调函数中多个 setState 事件 合并为 一次 渲染。 也就是说,setState 并不是实时修改 State 的,而将 多次 setState 调用合并起来仅 触发 一次 渲染,既可以减少程序数据状态存在中间值导致的不稳定性,也可以提升渲染性能。 // 仅 触发 一次 渲染 但可惜的是,React 18 以前,如果在回调函数的异步调用中 执行 setState,由于丢失了上下文,无法做合并处理,所以每次 setState 调用都会立即 触发 一次 重渲染 startTransition 回调包裹的 setState 触发 的渲染 被 标记为不紧急的渲染,这些渲染可能 被 其他紧急渲染所抢占。 selective hydration 表示选择性水合,水合指的是后端内容打到前端后, JS 需要将 事件 绑定其上,才能响应用户交互或者 DOM 更新行为,而在 React 18 之前,这个操作必须是整体性的

    273 3 0

    浅曦 Vue 源码 - 43-patch 阶段 - 异步队列更新 & 性能优化

    在一个 tick 中 多次 修改同一个 被 渲染 watcher 依赖的响应式数据(或者修改多个不同的响应式数据)那么渲染 watcher 会被 多次 添加到 queue 队列中吗? 很多人在看 Vue 面试题的时候都看到过一句话:Vue 会合并当前 事件 循环中的所有更新, 只 触发 一次 依赖它的 watcher; 所以答案很显然:是不会 多次 添加的,今天我们就来掰扯掰扯为什么不会? imgFlag 被 重新赋值,就会 触发 imgFlag 这个响应式数据的 setter,进而 触发 dep.notify(),notify() 执行 会 触发 watcher.update(),调用流程如下: ,this.forProp.a 第 一次 被 ++ 时, this.forProp.a++ -> forProp.a 的 setter() -> dep.notify() -> 渲染 watcher.update 3.2 一个 tick 修改多个不同数据 这个原理同样 被 应用到在一个 tick 中 一次 性修改多个响应式数据,比如 this.forProp.a++ 然后 this.imgFlag = !

    176 5 0

    React基础(7)-React中的 事件 处理

    如何传递参数给 事件 处理器回调? 怎样阻止函数 被 调用太快或者太 多次 ? : 不管 事件 触发 有多频繁,都会保证在规定的间隔时间内真正的 执行 一次 事件 处理函数 应用场景: 常用于鼠标连续 多次 点击click 事件 ,鼠标移动mousemove,拖拽,窗口尺寸改动(resize),鼠标滚轮页面上拉 ,推荐使用第二种函数节流的方式 定义:防止抖动,重复的 触发 ,频繁操作,核心在于,延迟 事件 处理函数的 执行 ,一定时间间隔内 只 执行 最后 一次 操作,例如:表单 多次 提交,推荐使用防抖 换句话说,也就是当连续 触发 事件 时并没有 执行 事件 处理函数 ,只有在某一阶段连续 触发 的最后 一次 才 执行 ,它遵循两个条件 必须要等待一段时间 上 一次 触发 的时间间隔要大于设定值才 执行 特点: 某段时间内 只 执行 一次 在生活中,你可以想象公交司机等人上车后,才出站一样 都是解决频繁操作 触发 事件 处理函数,引起页面卡顿,不流畅等性能问题,都是通过设置延时计时器逻辑来提升性能,以减少http请求次数,节约请求资源 不同点:函数节流,间隔时间内 执行 事件 处理函数,而函数防抖,一定时间间隔内 只 执行 最后 一次 操作

    917 4 1

    Resize Observer 介绍及原理浅析

    方案 resize 事件 只有当 viewport 的大小发生变化时会被 触发 ,元素大小的变化不会 触发 resize 事件 ;并且也只有注册在 window 对象上的回调会在 resize 事件 发生时 被 调用 调用 getBoundingClientRect 等函数时,浏览器为了保证我们拿到的元素参数是准确的,会 触发 一次 reflow 来重新布局。 有三种限制策略可以考虑: 执行 次数限制 允许 执行 最 多次 数 N 次循环,当超过次数 N 时,循环终止 优点是实现简单,并且具有一致性,当这个算法在不同的机器上运行时都能有相同的表现 缺点是 N 的定义太过随意 ,也可能因此导致不同机器上最终展示的内容不一致 执行 深度限制 执行 深度限制 设定 一次 渲染流程中需要通知的元素(指的是和上次通知时的大小 lastReportedSize 相比发生了变化)为集合 N,设定上次迭代的元素最小深度 通过以上说明,我们也可以意识到在 一次 循环中,只有满足以下两个条件的元素才会被通知: 上次迭代/Layout过后,元素的大小 被 改变了 元素的深度比上次迭代的最浅深度更低 「那么深度限制就不存在问题了吗?」

    260 4 0