博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
input处理函数
阅读量:4622 次
发布时间:2019-06-09

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

input处理函数是潜在的影响你app性能的问题,他们可以阻止帧的形成,并且可以造成多余的亦或不必要的layout的工作。

  • 避免长时间运行input handler:它们会阻塞scroll
  • 不要在input handler 中进行样式的改变 
  • Debounce 你的处理函数; 存储事件值并且在下一次requestAnimationFrame回调中处理样式改变 

避免长时间运行的input处理函数

在最迅速的运行情况的假设下,当一个用户和页面进行交互的时候,页面的合成器线程(a compositor thread)可以获取用户的输入且移动输入的内容。

页面合成器线程在进行相关操作的时候,要求主线程不在进行任何的工作(js,layout和style以及paint都在主线程中进行)

Lightweight scrolling; compositor only.

当你使用了输入处理函数,例如 touchstarttouchmove, 亦或 touchend,合成器线程必须等到处理函数执行完成,同样,用户的scroll也会被阻塞。

Heavy scrolling; compositor is blocked on JavaScript.

总之,你要确保用户输入处理函数尽快的被执行,且允许合成器来做这一项工作。

避免在输入处理函数中进行样式操作

输入处理函数,例如scroll和touch,在任何requestAnmationFrame回调函数之前被计划运行。

如果你在一个inout handler里面进行了一个样式的改变,那么在requestAnimationFrame开始的时候将会进行样式计算,然后会读取元素的样式属性在requestAnimationFrame回调函数执行的刚开始,这将触发一个同步的layout!

Heavy scrolling; compositor is blocked on JavaScript.

scroll处理函数去抖动(debounce)

所以你要做的是,在下一个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);

 上面代码的好处是在使用input handler的同时不会阻塞scroll亦或touch。

 

转载于:https://www.cnblogs.com/RachelChen/p/5456202.html

你可能感兴趣的文章
【单调队列】滑动窗口
查看>>
HDMI转MIPI CSI芯片方案TC358749XBG
查看>>
如何从Apache官网下载windows版apache服务器
查看>>
war包
查看>>
Queue模块详解
查看>>
如何成为一名 Google 软件工程师?【Google招聘信息】作者: 丁鑫哲
查看>>
Nginx搭建反向代理服务器过程详解
查看>>
Send Meeting By SMTP
查看>>
【Hive学习之六】Hive Lateral View &视图&索引
查看>>
【搜索】POJ-3050 基础DFS
查看>>
3.Arm机器码
查看>>
PHP防止Xss攻击
查看>>
Red and Black(DFS深搜实现)
查看>>
linux清除文件内容
查看>>
python 学习笔记 多进程
查看>>
刚 安装 Oracle时,登录会出现的问题, ora-28000: the account is locked
查看>>
redis
查看>>
Lua与C++ 第三篇(简单解析Lua的堆栈)
查看>>
[置顶] HMM Tutorial 隐马尔科夫模型
查看>>
Android二维码功能实现,在程序内嵌入ZXing项目
查看>>