首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

函数的防抖与节流

,当键盘的某个按键被按下,需要执行某个函数 当用户频繁的与UI界面操作交互,例如:窗口调整(触发resize),页面滚动,上拉加载(触发scroll),表单的按钮提交,商城抢购疯狂的点击(触发mousedown...特点: 不管事件触发有多频繁,都会保证规定的间隔时间内真正的执行一次事件处理函数,只会一个函数某个时间窗口内执行一次,若在时间窗口内再次触发,则重新计算时间 应用场景: 常用于鼠标连续多次点击click...事件,鼠标移动mousemove,拖拽,窗口尺寸改动(resize),鼠标滚轮页面上拉(onScroll),上拉刷新懒加载 原理: 通过判断是否达到一定的时间来触发函数,若没有规定时间则使用计时器进行延迟...,而下一次事件则会重新设定计时器,它是间隔时间执行 通常与用户界面高频的操作有: 鼠标滚轮页面上拉(onScroll),下拉刷新懒加载 窗口尺寸改动(onresize) 拖拽 若是高频操作,若不进行一定的处理...(函数节流,两种方式)或者太多次(函数防抖),分别用原生JS以第三方库实现 对于函数的节流与防抖是前端提升性能的手段,虽然就几行代码,但是面试,常问不衰,你手写,很多时候,拍拍胸脯,不借助搜索,你还真不一定能写得出来

22220

网速敏感的视频延迟加载方案

但是,首页添加一个视频并不仅仅是随便找个人,然后加个 25mb 的视频,那会你的所有的性能优化都付之一炬。 我参加过一些团队,他们希望给首页加上类似的全屏视频背景。...上次有人我这么做的时候,我很好奇应如何将背景视频的加载作为渐进增强(Progressive Enhancement),来提升网络连接状况比较好的用户的体验。...因为在这个例子中,视频是作为渐进增强的对象,默认情况下我们不用真的加载视频。事实上唯一需要加载的,是我们为这个页面设置的预览图片。...当用户开启了减少动态偏好(preference for reduced motion)设置,我们同样不会加载这样的视频。为了不让某些低网速或低图形处理能力的手机用户担心,小屏幕手机上也会直接返回。...如果我们这么做,这个视频元素将会在后台保持加载状态,即使我们都没将它显示出来。 /** * 通过移除所有的 来取消视频加载 * 然后触发 video.load().

1.3K40

网速敏感的视频延迟加载方案

上次有人我这么做的时候,我很好奇应如何将背景视频的加载作为渐进增强(Progressive Enhancement),来提升网络连接状况比较好的用户的体验。...因为在这个例子中,视频是作为渐进增强的对象,默认情况下我们不用真的加载视频。事实上唯一需要加载的,是我们为这个页面设置的预览图片。...当用户开启了减少动态偏好(preference for reduced motion)设置,我们同样不会加载这样的视频。为了不让某些低网速或低图形处理能力的手机用户担心,小屏幕手机上也会直接返回。...load() 方法是 HTMLMediaElement API 的一部分,它可以重置媒体元素并且重启加载过程。 checkLoadTime 接下来是见证奇迹的时刻。...如果我们这么做,这个视频元素将会在后台保持加载状态,即使我们都没将它显示出来。

2.4K30

前端秘法进阶篇之事件循环

网络进程 负责加载网络资源。网络进程内部会启动多个线程来处理不同的网络任务。 3. 渲染进程 渲染进程启动后,会开启一个**渲染主线程**,主线程负责执行 HTML、CSS、JS 代码。...添加新任务,如果主线程是休眠状态,则会将其唤醒以继续循环拿取任务 这样一来,就可以每个任务有条紊的、持续的进行下去了。...因此,浏览器选择异步来解决这个问题 如何理解 JS 的异步? S是一门单线程的语言,这是因为它运行在浏览器的渲染主线程中,而渲染主线程只有一个。... Chrome 的源码中,它开启一个 会结束的 for 循环,每次循环从消息队列中取出第一个任务执行,而其他线程只需要在合适的时间 将任务加入到队列末尾即可。...按照 W3C 的标准,浏览器实现计时器,如果嵌套层级超过 5 层,则会带有 4 毫秒的最少时间,这样计时时间少于 4 毫秒又带来了偏差 4.

13510

JS DOM学习笔记

):网页加载完毕触发,浏览器是一边下载文档、一边解析执行,可能会出现JavaScript执行时需要操作某个元素,这个元素还没有加载,如果这样就要把操作的代码放到body的onload事件中,或者可以把...元素的onload事件是元素自己加载完毕触发,body onload才是全部加载完成。...window.onload = function () { //...... }  //动态注册事件,窗体加载完成后执行,和body onload效果差不多 7、window.控件Id(建议使用),推荐...‘右键菜单’触发) 9、window.location对象: window.location.href = "*.html"; //重新导航到新页面,可以取值,也可以赋值     window.location.reload...();  //刷新当前页 10、window.event是IE下非常重要的属性,用来获得发生事件的信息,事件局限于window对象的事件,所有元素的事件都可以通过event属性取得相关信息。

4K40

setTimeout的那些事

很厉害,页面上指点江山,呼风唤雨。...不使用其它新员工(webworker等)的情况下,JS如何在单线程上处理复杂的操作和逻辑,以至于在用户看来可以同时响应不同的操作的呢? 我们还是以Boss来称呼javascript的主线程吧。...:JS从现在开始,经过指定的时间后,执行相应的函数。...最惨的是,即使天时地利人和,到了定时的时间JS主线程空闲,异步任务队列中只有setTimeout执行的方法,这个方法的执行时间也并不是精确的delay时间(精确到毫秒),因为浏览器上的计时器精确度有限...产品要求页面加载动画播放一次。后续用户只要鼠标hover到动画上,动画就重新播放一次。

1.6K10

setTimeout的那些事

很厉害,页面上指点江山,呼风唤雨。...不使用其它新员工(webworker等)的情况下,JS如何在单线程上处理复杂的操作和逻辑,以至于在用户看来可以同时响应不同的操作的呢? 我们还是以Boss来称呼javascript的主线程吧。...:JS从现在开始,经过指定的时间后,执行相应的函数。...最惨的是,即使天时地利人和,到了定时的时间JS主线程空闲,异步任务队列中只有setTimeout执行的方法,这个方法的执行时间也并不是精确的delay时间(精确到毫秒),因为浏览器上的计时器精确度有限...产品要求页面加载动画播放一次。后续用户只要鼠标hover到动画上,动画就重新播放一次。

2K00

浏览器原理 - 事件循环

渲染主线程是浏览器中最繁忙的线程,需要它处理的任务包括但不限于: 解析 HTML 解析 CSS 计算样式 布局 处理图层 每秒把页面画 60 次 执行全局 JS 代码 执行事件处理函数 执行计时器的回调函数...添加新任务,如果主线程是休眠状态,则会将其唤醒以继续循环拿取任务 这样一来,就可以每个任务有条紊的、持续的进行下去了。整个过程,被称之为事件循环(消息循环)。 若干解释 何为异步?...– addEventListener 如果渲染主线程等待这些任务的时机达到,就会导致主线程长期处于「阻塞」的状态,从而导致浏览器「卡死」 同步策略 渲染主线程承担着极其重要的工作,无论如何都不能阻塞...参考答案: 不行,因为: 计算机硬件没有原子钟,无法做到精确计时 操作系统的计时函数本身就有少量偏差,由于 JS计时器最终调用的是操作系统的函数,也就携带了这些偏差 按照 W3C 的标准,浏览器实现计时器...,如果嵌套层级超过 5 层,则会带有 4 毫秒的最少时间,这样计时时间少于 4 毫秒又带来了偏差 受事件循环的影响,计时器的回调函数只能在主线程空闲时运行,因此又带来了偏差

1.7K30

浏览器事件循环

渲染主线程是浏览器中最繁忙的线程,需要它处理的任务包括但不限于: 解析 HTML 解析 CSS 计算样式 布局 处理图层 每秒把页面画 60 次 执行全局 JS 代码 执行事件处理函数 执行计时器的回调函数...添加新任务,如果主线程是休眠状态,则会将其唤醒以继续循环拿取任务 这样一来,就可以每个任务有条紊的、持续的进行下去了。 整个过程,被称之为事件循环(消息循环) 若干解释 何为异步?...-- addEventListener 如果渲染主线程等待这些任务的时机达到,就会导致主线程长期处于「阻塞」的状态,从而导致浏览器「卡死」 渲染主线程承担着极其重要的工作,无论如何都不能阻塞!...参考答案: 不行,因为: 计算机硬件没有原子钟,无法做到精确计时 操作系统的计时函数本身就有少量偏差,由于 JS计时器最终调用的是操作系统的函数,也就携带了这些偏差 按照 W3C 的标准,浏览器实现计时器...,如果嵌套层级超过 5 层,则会带有 4 毫秒的最少时间,这样计时时间少于 4 毫秒又带来了偏差 受事件循环的影响,计时器的回调函数只能在主线程空闲时运行,因此又带来了偏差

18520

Web内容如何影响电池的使用

在这篇文章里,我们将讨论影响电池寿命的因素,以及作为一个web开发者,我们如何网页耗电更少,以便用户有更多时间来关注我们的内容。 是什么耗电?...大多数场景中,减少首次渲染时间也会降低功耗。不过,初始页面加载后继续加载资源和运行脚本要小心。我们要尽快让系统返回空闲状态。总的来说,浏览器已经完成了布局和渲染,js执行的越少,耗电越少。...空闲状态耗电趋向于零 当用户没有和页面交互,尽可能的使页面耗电,例如: 尽量少用定时器以避免唤醒CPU,可以把基于定时器的任务合并,使用尽可能少的定时器。...页面加载期间CPU要做一连串工作包括加载、解析、渲染资源,并且执行js大多数现代web页面上,执行js花费的时间远远高出浏览器用在其余加载过程中花费的时间。...例如,以下屏幕截图显示了滚动具有复杂渲染和视频播放的页面的线程: ? 寻找优化点,应关注主线程,因为js运行在主线程上(除非您正在使用Workers)。

2.1K20

Cocos Creator 源码解读:引擎启动与主循环

前言 预备 不知道你有没有想过,假如把游戏世界比作一辆汽车,那么这辆“汽车”是如何启动,又是如何持续运转的呢? 如题,本文的内容主要为 Cocos Creator 引擎的启动流程和主循环。...默认的 index.html 文件中,定义了游戏启动页面的布局,并且还有一段立即执行的代码。 这里截取文件中一部分比较关键的代码: // 加载引擎脚本 loadScript(debug ?...压缩代码可以节省代码文件所占用的空间,加快文件加载速度,减少流量消耗,但同时也代码失去了可阅读性,不利于调试。 所以开启调试模式后会直接使用未经过压缩的代码文件,便于开发调试和定位错误。...说人话,cc.game 对象就是管理引擎生命周期的模块,启动、暂停和重启等操作都需要用到它。...#L472 对于快速编译的细节,可以项目预览打开浏览器的开发者工具, Sources 栏中搜索(Ctrl + P) __quick_compile_project__ 即可找到 __quick_compile_project

3.3K21

如何优化前端页面 如何优化网页

HTML5学堂:如何优化前端页面 / 如何优化网页。作为前端开发人员来说,不但要开发出能兼容各大主流浏览器的页面,而且还需要懂得去优化前端页面。本文主要给大家讲解如何去优化页面。...行为代码,实现结构、样式和行为的相分离,降低模块间的耦合度 2.1.5 合理控制JS文件的引入位置,提升网站的加载速度 2.1.6 根据具体情况合并CSS、JS文件,降低服务器请求次数 2.2 标签选用与书写规范...4.4.3 DOM节点相关操作上进行优化,如利用变量存储查找到的元素,从而防止每次查找进行页面重绘、利用文档碎片等。 4.4.4 尽可能减少页面中dom元素样式的修改,防止页面回流与重绘。...4.4.5 合理使用计时器,防止setInterval造成的内存泄露。 4.4.6 设置计时器之后需要考虑计时器的清除,以防止计时器的叠加造成的影响。...具体设置方法此处不讲解了,可以参见文章《网络字体@font-face 如何处理网页中的特殊字体》。 5.4 合理使用图片预加载和图片懒加载

2.5K80

美团前端常见面试题整理_2023-02-23

Webpack 扫描该文件,这种方式对于大型的类库很有帮助 如何减少 Webpack 打包体积 (1)按需加载 开发 SPA 项目的时候,项目中都会存在很多路由页面。...懒加载也叫延迟加载,指的是长网页中延迟加载图片的时机,当用户需要访问,再去加载,这样可以提高网站的首屏加载速度,提升用户的体验,并且可以减少服务器的压力。...,还会不断重新渲染 重新渲染需要重复之前的第四步(重新生成布局)+第五步(重新绘制)或者只有第五个步(重新绘制) 构建 CSSOM 树,会阻塞渲染,直至 CSSOM树构建完成。...几种方式是: 将 js 脚本放在文档的底部,来使 js 脚本尽可能的最后来加载执行 给 js 脚本添加 defer 属性,这个属性会脚本的加载与文档的解析同步解析,然后文档解析完成后再执行这个脚本文件...js 脚本 图片 怎么判断页面是否加载完成 Load 事件触发代表页面中的 DOM,CSS,JS,图片已经全部加载完毕。

1.8K10

2016.05 第三周 群问题分享

如果想具体了解关于this指向的问题,可以HTML5学堂官网搜索“this详解”,进一步深入了解关于this指向的问题。 如何优化JS性能?...2.3 追加字符串,采用 str += "独行冰海"; 而不是str = str + "独行冰海"; 3 页面基本数据交互 3.1 获取标签使用最为快捷的方法,PC端原生方法当中,速度比较如下:通过...3.4 可以通过事件委托,减少页面中类似事件的数量。 3.5 删除dom节点之前,需要先移除掉该节点上的事件。...4.3 DOM节点相关操作上进行优化,如利用变量存储查找到的元素,从而防止每次查找进行页面重绘、利用文档碎片等。 4.4 尽可能减少页面中dom元素样式的修改,防止页面回流与重绘。...4.5 合理使用计时器,防止setInterval造成的内存泄露。 4.6 设置计时器之后需要考虑计时器的清除,以防止计时器的叠加造成的影响。

1.1K130

-- react版的倒计时实现

因为它们不管它们开发、生产环境是什么样的形式,落实到页面dom中,全都是dom节点了。所以开始的时候,可以反着来理解一下。 就说这个倒计时应用吧,开发它的时候,你可以按着先页面,后js的顺序。...也就是先用react来把页面结构生成出来,然后再相应的页面组件中添加各种js程序。 //============== 首先把页面的结构先搭出来,新建一个目录,。。。... ; } }); 接下来,把,分,秒的都如此写出来,好了,到此时,页面结构搭完,就类似于静态页面切完了,该往里写js了。...//=================== 按照一般的js开发思路,js之前 应该先搞一些初始值,然后开始加载 dom, 再搞一些function方法来修改操作这些值 当dom都加载好了,开始绑定事件...这样就是整个组件初始化的时候给一个值,然后当dom加载完成之后给了另一个值,然后触发了render方法。 接下来我们就要使用setInterval方法,这个过程不断的重复。这样计时器就Ok了。

1.9K70
领券