首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

腾讯文档Doc Canvas渲染引擎流程改造

解决历史问题Doc文档滚动过程中偶现渲染空白(safari浏览器出现频率较高):图片1.2....API drawImage将对应区域直接绘制到离屏canvas(在内存中创建的canvas元素,未dom挂载面上展示);针对新渲染区域(滚动产生的新出现在可视范围的区域),则在离屏canvas中执行基础渲染...由上述(1)可知,当canvas画布尺寸超过浏览器限制,会导致canvas绘制失效,safari会在控制台弹出警告:图片chrome和safari绘制失败的canvas画布尺寸上限比较一致,但chrome...canvas画布尺寸,drawImage的失败概率会大大增加导致渲染出现空白(width:4600px ,height:1600px失败概率50%以上)对照实验结果说明渲染空白问题确实和drawImage...总结经过分页渲染改造,解决滚动渲染空白的历史问题,对后续环绕元素的层级渲染提供支持;最重要的是解决canvas渲染引擎移动端的性能问题,使移动端的“分页视图”新功能可以正常使用,让用户可以直接在移动端浏览到和

4.6K130

渐进式Web应用清单(翻译转载)

页面跨浏览器兼容性 测试 Chrome, Edge, Firefox和Safari中测试页面 修复 修复应用跨浏览器运行时的问题 页面过渡不要表现得像网络阻塞 当你四处触碰过渡应该表现顺畅点,哪怕弱网络下...图片加载前,你可以展示一个灰色的方块或者模糊/小的版本(如果可能的话)来作为占位符。 从详情回退到之前的列表页面,列表保持滚动距离 测试 应用中找一个列表区域。向下滚动。触碰项目进入详情。...详情上下滚动。点击返回,确保列表区域滚动到详情链接/按钮触碰前的位置。 修复 用户点击返回,恢复列表的滚动位置。一些路由库会有帮你做这个的特性。...触碰,输入框不会被屏幕键盘遮挡 测试 找到一个有文本输入框的页面。把文本输入框滚动到刚好在屏幕底部。点击输入框,验证键盘出现时其没有被遮住。...测试 检查浏览没有不恰当的时候展示添加到主屏,例如当用户正在进行某项操作,或者另外一个提示已经屏幕上显示

1.6K20
您找到你想要的搜索结果了吗?
是的
没有找到

!原来浏览器的秘密藏在这31张图里!

image 这几乎就是单核 CPU 的工作方式:同一刻只能做一个工作。...单进程和多进程的架构方式 现在已经很难看到单进程的架构方式,因为单进程的浏览器需要处理的事情太多(网络、渲染、管理插件等),极不稳定和安全。因此市面上主流的浏览器都已经升级为多进程的方式。...比如当你打开了三个标签,其中一个崩溃,你可以关掉它而不会影响其他两个标签: ? image 并且由于进程的数据是私有的,所以一定程度上能够保证安全性。 但缺点也显而易见。...image 渲染进程内部包含主线程、工作线程、合成线程和光栅线程。 详细说明之前,请先想象一个这样的场景:您站在一副简单绘画的面前,如何通过打电话来让您的朋友知道这幅画究竟什么样子呢? ?...如何进行交互 浏览器眼中,用户的一切行为都是输入。不单单是滚动鼠标滑轮,或是点击屏幕、按下按键等。 ?

50320

关于如何做一个“优秀网站”的清单——规范篇

为了帮助开发团队创造最好的用户体验,我们拆解出了这一份清单,其中包括我们所能想到的一个基准版PWA该有的所有点,以及如何进一步做出一个体验更完美的模范版PWA的重要细节。...改善方法:确保所有内容,特别是图片和广告,都用CSS或内嵌样式设定固定的大小。加载图片前,最好展示一个展位符或者一个小版的图片。...从详细信息页面返回,保留上一个列表页面上滚动位置 确认方法:应用程序中查找列表视图。向下滚动点击一个项目进入详细页面。详细页面上滚动。...下面是天狗网的页面,列表中点击详情后,再后退返回列表,列表仍然能滚到上次进入的位置 点击,输入框不会被屏幕键盘遮蔽 确认方法:找到一个包含文本输入的页面。...滚动页面,将文本输入框放在屏幕上尽可能低的位置。点击输入并确认键盘出现时没有覆盖输入。

3.2K70

Native和H5分久必合,Weex会带来移动端的巨变吗?

它传达这样的想法:移动端崛起的大环境下,移动端人机交互体验(如触屏)和物理条件(如屏幕尺寸)的巨变下,应该考虑将业务核心关注点(因为屏幕小)优先(因为移动端崛起)移动端上实现。...一个滚动的流畅性,技术指标上表现为帧率;另一个是所谓的“黏手感”差,也就是屏幕响应手指操作的变化速度较慢。 • H5大区块的动画流畅性差,典型如Banner和侧边栏等组件。...以2016年双11主会场(可用淘宝扫描下图二维码观看对比视频)为例,H5的问题非常明显: • H5滚动过程中图片加载缓慢,滚动过程中系统阻止JS执行,导致图片懒加载被延迟。...(3) 2015年,大部分页面使用H5,主会场使用了Weex的最初版本, 单个页面上实现高性能和高发布效率。...(4) 2016年,Weex不只单个页面上做到了预期的目标,同时覆盖了99.6%(1747/1754)的2016阿里双11会场,会场页面无论是打开的速度、滚动的流畅性都保证较好的用户体验。

1.8K00

打造H5动感影集的爱恨情仇(动画性能篇) - 腾讯ISUX

同时注意到这里勾选Screenshots面板,这个面板记录了过程间的屏幕截图,更方便定位有性能问题的操作区间,发现问题所在。...可以通过功能面板的paint选项卡开启渲染截图。 该功能开启后,再次录制操作,结束后可以详细数据面板看到每一个柱形图的即时渲染截图,通过移动和查找可以看出哪些块是不应该出现的,从而把它解决掉。...说明是painting(渲染)引起的性能问题,因此毫无疑问是动画原因。同时我还看了下Paint面板: 发现一个十分大的层绘制(绿色部分),发现是bg-border这个结点的问题。...3.安卓逐帧渲染bug 更多的性能问题都不会产生严重的表现,最多是一点卡顿。但是安卓4.0的渲染异常却是常会出现,为此我再找一个例子。...以下是我做万圣节活动的时候发现的一个问题,具体表现直接上图: 这是魅族比较好的一台机器,但依然会产生逐帧渲染问题。 根据之前的例子,我第一间会想到是否别的动画在影响?

1.3K40

打造H5动感影集的爱恨情仇【动画性能篇】

同时注意到这里勾选Screenshots面板,这个面板记录了过程间的屏幕截图,更方便定位有性能问题的操作区间,发现问题所在。 ?...可以通过功能面板的paint选项卡开启渲染截图。 ? 该功能开启后,再次录制操作,结束后可以详细数据面板看到每一个柱形图的即时渲染截图,通过移动和查找可以看出哪些块是不应该出现的,从而把它解决掉。...1.封尾扩散动画 动感影集的封尾会用到一个通用的尾,动画很简单,是一个圈圈由中间向两边扩散。...说明是painting(渲染)引起的性能问题,因此毫无疑问是动画原因。同时我还看了下Paint面板: ? 发现一个十分大的层绘制(绿色部分),发现是bg-border这个结点的问题。...但是安卓4.0的渲染异常却是常会出现,为此我再找一个例子。以下是我做万圣节活动的时候发现的一个问题,具体表现直接上图: ? 这是魅族比较好的一台机器,但依然会产生逐帧渲染问题

1.6K121

记一次 「 无限滚动 」列表优化

如图所示: 快速滚动出现空白 作为对比,看一下优化后的效果: 优化之后 问题定位 chrome调试工具下,边拖动列表边观察dom的变化。...定位到渲染性能有问题的dom身上,即每一个 Item(renderFakeTable)。 使用普通文本代替Item,同样多数量的列表情况下,简单的dom明显会顺畅很多,但是,仍然会出现空白问题。...用户往下滚动,observer-dom元素“出现”在用户视野。 每次多加载一屏的数据,循环如此,直到整个列表都渲染到页面上。...虚拟长列表 优点:可以保证渲染在页面上的dom元素尽可能少 缺点:如果没有特殊处理(比如rc或锁定滚动区域),快速滚动,基本都会有闪动的情况(也就是本次的空白问题) 2....再通过加一个loading效果,帮助优化体验 缺点:当用户把列表拉到底,整个列表都会被渲染到页面上 选择虚拟长列表or下拉懒加载之间的取舍,可以参考: 如果闪动问题可以接受(组件渲染没有太大性能问题

3.1K20

现代图片性能优化及体验优化指南

: 可以看到滚动向下滚动不断的抽搐,这是由于下面不在可视区域内的内容,一开始是没有被渲染的,每次滚动的过程中,才逐渐渲染,以此来提升性能。...上文其实也提及,浏览器进行图片渲染展示的过程中,是需要对图片文件进行解码的,这一个过程快慢与图片格式有关。...有一个非常基础的知识,简单过一下,也就是图片元素中,alt 与 title 的差异: 图片中的 alt 属性是图片不能正常显示出现的文本提示。...图片的异常处理 当图片链接挂了,加载失败,我们比较好的处理方式应该是怎么样呢? 处理的方式有很多种。张鑫旭老师的这篇文章中 -- 图片加载失败后CSS样式处理最佳实践 有一个不错的实践。...早年间, 等替换元素是没有伪元素的,后面 Chrome/Firefox 浏览器逐渐支持了当, 的 src 拉取失败,支持 元素的伪元素展示,这才有上述的方案,但是,目前

1.4K30

一文看懂Chrome浏览器工作原理

Chrome将浏览器相关的服务放在同一个进程里面运行和放在不同的进程运行的区别 单帧渲染进程 - 网站隔离(Site Isolation) 网站隔离(Site Isolation)是最近Chrome浏览器启动的功能...因为这个样式表的存在,页面上的h1标签一定会比h2标签大,而且不同的标签会有不同的magin和padding。如果你想知道Chrome的默认样式是什么样的,你可以直接查看代码。...一个人拿着画笔站在画布前面,思考着是先画一个圆还是先画一个正方形 举个例子,如果页面上的某些元素设置z-index属性,绘制元素的顺序就会影响到页面的正确性。...当用户滚动页面,由于页面各个层都已经被光栅化了,浏览器需要做的只是合成一个新的帧来展示滚动后的效果罢了。页面的动画效果实现也是类似,将页面上的层进行移动并构建出一个新的帧即可。...由于知道这些信息,当用户事件发生在这些区域,合成线程会将输入事件发送给主线程来处理。如果输入事件不是发生在非快速滚动区域,合成线程就无须主线程的参与来合成一个新的帧。

1.6K31

Chromium 最新渲染引擎--RenderingNG

所以总而言之,最近更文懈怠。 但是,但是,但是,转折来了。今天给大家带来了一个关于Chromium最新「渲染架构」 RenderNG的译文。...所以,针对Chromium的研究其实就是对Chrome后续最新技术方向的尝鲜。毕竟,Chrome在当前浏览器份额中一家独大。掌握它,就相当于掌握,浏览器最新技术的发展脉络。...这也解释渲染流程图中动画(animate)/滚动(scroll)阶段存在两个颜色(绿色/黄色)。...「每个渲染进程只有一个主线程」,即使同一网站的多个标签或frame可能最终出现在同一进程中。然而,各种浏览器API中执行的工作是有性能隔离的。...一般来说,只有一个并不是问题,因为合成器线程上所有「真正昂贵的操作」都被委托给合成器工作线程或Viz进程,而且这些工作可以与输入路由、滚动或动画「并行进行」。

1.4K10

《Life of a Pixel》——浏览器渲染流程概要

静态渲染过程 ? 这一的内容对于广大前端从业者来说应该都比较熟悉。...以上过程揭示静态渲染,也就是从 web content 到内存中的像素的整个流程。但是实际过程中页面是不断更新的,包括滚动、动画、js 等都会改变页面内容。...涉及到时间,每一帧是当前 Web 内容的完整呈现,通常,如果每秒低于 60 帧,滚动和动画就会显得有些卡顿。 ? 第一个优化方向最容易想到,即跟踪改变的部分,复用没有改变的部分。...但是当合成线程无法处理某个输入事件,还是会由主线程来处理。layer 的存储依然是通过树形结构实现。合成更新是新出现的生命周期,出现在 layout 之后 paint 之前。...一个 quad 类似于屏幕上绘制一个图块的指令,其引用在内存中生成的栅格图块,然后被封装,由渲染进程提交到浏览器进程,这些就是每个动画帧。 ?

1.5K20

WebRender:让网页渲染如丝顺滑

即便页面并未发生变化(如页面滚动,或某些文本高亮),浏览器仍需进行第二部分中的某些步骤,接着屏幕上绘制新的内容。 ? 想要滚动、动画等操作看起来流畅,必须以 60 帧每秒的速度进行渲染。...丢帧就像是从手翻书中撕掉一个页面。这样一来,动画看上去就像消失或跳跃一样,因为上一和下一之间的转换页面丢失。 ? 因此要确保显示器再次检查前将所有像素放入帧缓冲区。...某些情况下,上述优化能够加速页面渲染。当页面上没有太多变化时(如只有光标闪烁),浏览器将进行尽量少的工作。 ? 将页面分成图层,增加了这种优化的收益(扩大最佳情形数)。...填充像素, 我们正需要这样。每个像素可以由不同的内核填充。一次能够操作数百个像素,GPU 像素处理方面上比 CPU 要快很多...当所有内核都在工作确实如此。...它会识别哪些项目将真正出现屏幕上。为此,它将查看一些东西,如每个滚动盒的滚动距离。 如果形状的某些部分在盒子内,则该形状将被包括需要绘制的列表中。否则将被删除。这个过程叫做早期剔除。 ?

2.9K30

现代浏览器内部机制(四): 换个角度看事件

当用户的交互行为发生(比如触摸点击屏幕),浏览器进程会第一个感知到这个用户行为,但也仅仅是感知而已,因为浏览器 tab 下的内容都是由渲染进程全盘掌控着。...于是浏览器进程第一间将用户事件的类型和坐标发送给渲染进程。渲染进程通过查找并调用对应的事件处理函数来处理这个用户输入事件。 ?...合成器接收到输入事件 在上一篇文章中,我们研究合成器如何通过光栅化图层来平滑的处理滚动。如果页面上没有事件监听器,合成器线程会创建一个完全独立于主线程的新的合成帧。...非快速滚动区域 因为运行 JavaScript 是主线程的任务,当一个页面被合成,合成器线程将页面上挂在了事件处理器的区域标记为“非快速滚动区域”。...如果一个持续不断的事件(比如 touchmove)一秒内被传递给主线程 120 次,这就会触发大量的 hit test 和 JavaScript 的执行,这么一对比,每秒 60 次的屏幕刷新速率就显得太慢了

96920

解决Android软键盘弹出覆盖h5面输入框问题

之前我们使用vue进行 h5 表单录入的过程中,遇到了Android软键盘弹出,覆盖 h5面 输入框 问题,在此进行回顾并分享给大家: 系统:Android 条件:当输入框在可视区底部或者偏下的位置...触发条件:输入框获取焦点,弹出软键盘 表现:软键盘 覆盖 h5面中的输入框 问题分析: 1.发现问题:当前页面中box为flex布局,内容为上下固定高,中间自适应(中间区域内容过多会出现滚动条,input...的chrome://inspect,(如下图所示),发现键盘未弹出html高度为512px,键盘弹出后html的高度为288px(减少区域的为软键盘区域),怀疑是否是因为html、body设置height...解决方案: 方案1 页面渲染完成后,通过JS动态获取屏幕可视区高度(注:屏幕旋转后,需重新获取屏幕高度并赋值),并将其赋值到body的height,这样body的高度一直都是屏幕的高度,当软键盘弹出后,...+'px'; 方案2 我们可以借助元素的 scrollIntoViewIfNeeded() 方法,这个方法执行后如果当前元素可视区中不可见,则会滚动浏览器窗口或容器元素,最终让它可见,如果当前元素可视区中

5.2K30

Chrome 121 发布,新特性一览!

最近 Chrome 发布 121 版本,我们一起来看看有哪些值得关注的更新吧~ Element Capture API 开始实验 Element Capture API 可以让你捕获并记录一个特定的...Element Capture API 通过让你锁定要捕获的元素来解决这种问题。 具体怎么使用呢,大概的思路如下: captureTarget 是你页面上包含用户希望捕获的内容的元素。...同样,出现、消失或移动的遮盖内容也无需特殊处理。 我们来看看代码怎么写,首先,允许用户捕获当前标签。 // 请求用户授权,开始捕获当前的标签。... Chrome 121 版本中 Speculation Rules API 支持 document rules(文档规则)。...文档规可以让我们配置哪些链接可以使用预渲染的一些条件,配合新增的 "eagerness" 字段,可以让我们立即,悬停或点击鼠标自动预取或预渲染面上的链接。

32810

安卓Chrome使用技巧合辑

"标签列表"视图中,上划收起所有标签,然后顶部的标签上上划五次即可使所有标签视图上下旋转360º(严格来说这应该是一个彩蛋而不是一个特性)   6....双击屏幕第二次点击屏幕按住屏幕不放,以双击屏幕的位置定为原点,把手指向三象限或者四象限方向滑动,即可以原点为中心,快速放大页面,如果想要缩小页面,只需要双击屏幕第二次点击屏幕把手指向一象限或者二象限方向滑动...  中自行体验,值得说明的是,一些实验性特性可能导致浏览器不稳定,所以更改实验室特性之前## 请仔细阅读实验室特性页面上方的警告并提前备份好数据## 。...下拉刷新效果设置:   chrome://flags/#disable-pull-to-refresh-effect   此项可定义当页面垂直滚动至最顶端,继续下拉网页是否触发自动刷新。...停用(disable)此项后,最常访问的网址/最近使用过的书签/推荐内容将会被隐藏,还你一个简洁的起始(有兴趣的话你可以试试这个特性中的其他选项)。   4.

9.5K30

关于如何做一个“优秀网站”的清单——基础篇

他以Chrome插件的形式存在,可以谷歌应用商店中添加该应用,也可以下载最新版的Chrome浏览器,它会出现在Audits面板中。 ? 下面是利用Lighthouse工具对京东网站的测试结果。...网站可以跨浏览器正常工作 确认方法:分别在Chrome、Edge、Firefox和Safari浏览器上测试网站的表现。 改善方法:修复所有跨浏览器运行时出现问题。 ?...方式如下: 等待网络中的内容,立即转换到下一个屏幕并显示占位符加载屏幕(或加载动画)。 当应用程序等待来自网络的响应时,显示加载指示符(或加载动画)。...改善方法:如果使用的是单应用(客户端渲染),页面转换应该立即完成并且在下一显示页面骨架图,并且在内容加载使用诸如标题或缩略图之类的任何内容。...每一个页面都有一个URL 确认方法:确保单个页面可以通过URL进行深度链接,并且将当前页面的链接复制,然后一个新的标签中打开该链接,观察渲染内容是否与原来页面保持一致,这样做可以做到社交网站中分享当前页面

96750

干货|小程序性能优化的几点实践技巧

本文首先论述下如何评判一个小程序页面的性能情况,之后通过具体的案例重点讲解下几点实践技巧,最后再讲讲key值渲染一个列表发挥了一个怎么样的作用,以此来论述为啥key值对性能提升有帮助。...,一开始的处理方式都是这样的,如果数据不多,只有几页可能不会太暴露问题,如果页数过多,几十甚至上百的情况,list的数据会越来越大,每次setData的数据就会越来越多,因而每次页面重新渲染的节点就会越来越多...实践技巧二 1 存在短时间内发起太多图片请求 这个应该好理解,就是渲染页面,一次性发送了过多的图片请求,导致同一间发起了过多的http请求,http连接是非常耗时的,尤其是一次性发起这么多,并且一次性发起的...所以渲染页面,不在视图范围内的图片我们不加载,只有元素出现在视图范围内,再渲染。...实践技巧三 1 存在图片太大而显示区域过小 这个问题就是指图片尺寸太大,而页面上我们显示的尺寸又太小了,图片尺寸大,请求图片就越慢,导致页面渲染速度下降。

1.4K20

前端高频面试题汇总(二)

环路等待条件:发生死锁,必然存在一个进程——资源的环形链。...懒加载的实现重点在于确定用户需要加载哪张图片,浏览器中,可视区域内的资源就是用户需要的资源。所以当图片出现在可视区域,获取图片的真实地址并赋值给图片即可。...滚动屏幕之前,可视化区域之外的图片不会进行加载,滚动屏幕才加载。这样使得网页的加载速度更快,减少了服务器的负载。懒加载适用于图片较多,页面列表较长(长列表)的场景中。...懒加载也叫延迟加载,指的是网页中延迟加载图片的时机,当用户需要访问,再去加载,这样可以提高网站的首屏加载速度,提升用户的体验,并且可以减少服务器的压力。...懒加载的实现原理是,将页面上的图片的 src 属性设置为空字符串,将图片的真实路径保存在一个自定义属性中,当页面滚动的时候,进行判断,如果图片进入页面可视区域内,则从自定义属性中取出真实路径赋值给图片的

55020
领券