相关文章推荐
曾经爱过的蜡烛  ·  Error in nextTick: ...·  22 小时前    · 
长情的回锅肉  ·  前台服务·  1 年前    · 
孤独的铁链  ·  详尽的Spring ...·  1 年前    · 
备案 控制台
学习
实践
活动
专区
工具
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