博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
前端性能优化(十七)
阅读量:7296 次
发布时间:2019-06-30

本文共 1232 字,大约阅读时间需要 4 分钟。

对用户输入事件的处理去抖动

用户输入事件处理函数是一个可能会导致web应用性能问题的因素,因为它们在运行时会阻塞帧的渲染,并且会导致额外且不必要的布局的发生。

避免使用运行时间过长的输入事件处理函数

在理想情况下,当用户在设备屏幕上触摸了页面上某个位置时,页面的渲染层合并线程将接收到这个触摸事件并作出响应,比如移动页面元素。这个响应过程是不需要浏览器主线程的参与的,也就是说,不会导致JavaScript、布局和绘制过程的发生。

Lightweight scrolling; compositor only.

但是,如果你对这个被触摸的元素绑定了输入事件处理函数,比如touchstarttouchmove或者touchend,那么渲染层合并线程必须等待这些被绑定的处理函数的执行完毕之后才能被执行。因为你可能在这些处理函数中调用了类似preventDefault()的函数,这将会阻止输入事件(touch/scroll等)的默认处理函数的运行。事实上,即便你没有在事件处理函数中调用preventDefault(),渲染层合并线程也依然会等待,也就是用户的滚动页面操作被阻塞了,表现出的行为就是滚动出现延迟或者卡顿(帧丢失)。

Heavy scrolling; compositor is blocked on JavaScript.

简而言之,你必须确保对用户输入事件绑定的任何处理函数都能够快速执行完毕,以便腾出时间来让渲染层合并线程来完成它的工作。

 

避免在输入事件处理函数中修改样式属性

 

输入事件处理函数,比如scroll/touch事件的处理,都会在requestAnimationFrame之前被调用执行。

因此,如果你在上述输入事件的处理函数中做了修改样式属性的操作,那么这些操作会被浏览器暂存起来。然后在调用requestAnimationFrame的时候,如果你在一开始做了读取样式属性的操作,那么根据“”中所述,你将会触发浏览器的强制同步布局过程!

Heavy scrolling; compositor is blocked on JavaScript.

对滚动事件处理函数去抖动

 

有一个方法能同时解决上面的两个问题:对样式修改操作去抖动,控制其仅在下一次requestAnimationFrame中发生:

function onScroll (evt) { // Store the scroll value for laterz. lastScrollY = window.scrollY; // Prevent multiple rAF callbacks. if (scheduledAnimationFrame) return; scheduledAnimationFrame = true; requestAnimationFrame(readAndUpdatePage); } window.addEventListener('scroll', onScroll);

这么做还有一个额外的好处,就是能使你的事件处理函数变得轻量。这很关键,因为它能使包含复杂计算代码的页面也能快速响应scroll/touch事件!

转载于:https://www.cnblogs.com/LiJianBlog/p/4820254.html

你可能感兴趣的文章
Windows Phone笔记(3)触摸简介
查看>>
Django使用心得(二)
查看>>
13个JavaScript图表图形绘制插件
查看>>
面状县级行政区划转地级行政区划,并关联属性字段
查看>>
用Session和唯一索引字段实现通用Web分页功能
查看>>
升级 Visual Studio 2015 CTP 5 的坑、坑、坑
查看>>
Windows下进程间通信及数据共享
查看>>
盒子端 CSS 动画性能提升研究
查看>>
企业安全建设之搭建开源SIEM平台(上)
查看>>
外企面试官们爱提的十个问题
查看>>
【Connection Events】【BLE】【原创】
查看>>
用户空间与内核空间数据交换的方式(9)------netlink【转】
查看>>
TDD Tip:方法内部New出来的对象如何Mock
查看>>
JQuery 选择器
查看>>
EXTJS学习系列提高篇:第二十五篇(转载)作者殷良胜,ext2.2打造全新功能grid系列--右键菜单篇...
查看>>
Android -- 再来一发Intent
查看>>
使用IsLine FrameWork开发ASP.NET程序之六—使用ExceptionProcessProvider异常处理框架(下)...
查看>>
node.js调试
查看>>
集成学习原理小结
查看>>
中国的程序员们是否要声援微软小冰?
查看>>