前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实践 | Layer管理遇到Bug怎么办?

实践 | Layer管理遇到Bug怎么办?

作者头像
用户1097444
发布2022-06-29 15:34:07
4220
发布2022-06-29 15:34:07
举报
文章被收录于专栏:腾讯IMWeb前端团队

作者|DeepKolos 

链接 | http://imweb.io/topic/595e0bfef6476c7715208a2f

背景

横线是本来应该和跟随页面一并滚动的, 

之前通过Udacity的浏览器渲染优化课程了解到其中有讲到一个Layer管理 , 但是课程并没有细讲 , 今天遇到一个Layer层导致的Bug , 刚好用上了。

还原Bug现场

横线是本来应该和跟随页面一并滚动的, 但是这里并没有:

此时看看Layer:

因为横线是使用::after + position:absolute; + margin偏移 来画的, 所以会导致浏览器会绘制单独一层的Layer

那么课程里面有说的可以通过will-changetransform: translate 来告诉浏览器这里需要创建Layer(只是可选 , 浏览器在一定情况会不创建, 忽略该参数 ,课程说)

那么尝试通过添加will-change 或者 transform

虽然问题解决了 , 但是奇怪的是Layer并没有创建 , 而是合并了。

继续细看上图的Paint count 是随着滚动而变化的 ,但是内存占用0B , 其理由理由是layerForVerticalScrollBar , 等等 , 你再看看 , 页面是不是没有出现滚动条?

对啊 , 我已经通过下面这个来禁用了

这就是说明即便禁用滚动条还是会发生paint还有compsitie

虽然通过添加will-change或者transform可以解决问题 , 但是还发现了其他的一些问题:

这里可以看到.main的layer的高度是会随着滚动而变化的 , 还有同时触发paint , 那么滚动默认会触发paint 不是仅仅是composite ??

所以随便找一个网页对比测试看看

可以看到这里的滚动还是在root的layer上面的 , 没有触发paint , 这就奇怪了~

这个我的页面的paint是什么导致的捏?

未解问题1:

transform在Blink是只有composite的呀~那么会是什么原因 ?

等等 , 我还有其他页面带有滚动的 , 不过会把问题变得更加奇怪了!

未解问题2

这里可以看到 , 开头一些的::after生成的横线并没有合并起来 , 但是后面的确合并了...还有当点击右边滚动条会发现后面会出现一部分的layer又合并了....但是这个页面却没有触发整个页面的重回....奇怪...

先写到这里~有遇到相关问题的同学 ,或者有相关知识点的好文章也可以在评论推荐~~

其实是感觉自己掌握的不够好~~逃~~

那个你会疑问为什么不通过border来实现那条横线 , 因为结构上添加一个DIV会导致很多的工作量 , 就是前面话的时候的漏画了...不然不需要这样来实现这条横线了~~

因为用的是padding , 如果使用border需要再div.name和big-notification再套一层div , 这里就很好的体现有view model的好处了......

扫码下方二维码,

随时关注更多前端干货文章!

微信:IMWebTech

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-07-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯IMWeb前端团队 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 还原Bug现场
  • 此时看看Layer:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档