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

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

支持后续功能扩展后续浮动环绕文本框、图形等内容,可能拥有多个嵌套层级,且每个浮动元素有独立的overlay (高亮、底色)层级,例如下图的多个浮动文本框内容:图片原有canvas渲染引擎直接复用,还原渲染上图内容的效果如下图所示...主要体验两方面:canvas画布尺寸大,渲染耗时高渲染的内容多,遍历收集开销更高,特别对于一些嵌套层级可能较深的LayoutBox(如:表格)影响会更大3....(注:设置width和height为0进行回收的方式,chrome可以正常回收显存;且safari进行测试也是能正常回收,但safari devtools显示内存一直占用,此点尚且存疑)增加canvas...所以对canvas层级进行合并:图片文档主内容和overlay(高亮、底色、选区)全部合并到同一个canvas来进行渲染,不同内容层级可以统一管理,改造后,最终还原多个层级浮动文本框效果如下:图片4....总结经过分页渲染改造,解决了滚动时渲染空白的历史问题,对后续环绕元素的层级渲染提供了支持;最重要的是解决了canvas渲染引擎移动端的性能问题,使移动端的“分页视图”新功能可以正常使用,让用户可以直接在移动端浏览到和

4.6K130

初探富文本之基于虚拟滚动的大型文档性能优化方案

Slate是借助于React实现的视图层,这两对于视图层的实现方式有很大的不同,本文中是偏向于Slate的实现方式,也就是借助于React来构建块级别的虚拟滚动,当然实际上如果能够完全控制视图层的话...,但是为了用户滚动时尽量避免出现短暂白屏的现象,由此提前加载部分视图内容,通常这部分值可以取得口高度的一半大小;接下来是viewport部分,这部分是真实在口区域要渲染的内容;而在口区域下我们同样需要...虚拟滚动的实现方式本质上就是在用户滚动视图时,根据口的高度、滚动容器的滚动距离、行的高度等信息计算出当前口内需要渲染的行,然后视图层根据计算的状态来决定是否要渲染。...首先我们来看Scroll Event,这是最常见的滚动监听方式,通过监听滚动事件我们可以获取到滚动容器的滚动距离,然后通过计算口的高度与滚动距离来计算出当前口内需要渲染的行,然后视图层根据计算的状态来决定是否要渲染...状态管理 我们的文档编辑器中,虚拟滚动不仅仅是简单的滚动渲染,还需要考虑到各种状态的管理

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

iOS新闻类App内容页技术探索

WebView中组件的滚动复用 无需继承: ReusableNestingScrollview 中,为了兼容WebView、ScrollView等一切滚动视图中子View的复用回收,我们通过scrollView...delegate的扩展分发,扩展handler单独处理子View的复用回收,这样就在无需继承的前提下,支持所有滚动视图中子View的复用回收。...综上,通过 ReusableNestingScrollview 只需将模块对应Model扩展增加协议,滚动视图扩展Delegate,就可实现任何滚动视图中子View的回收复用功能。 3....除了基本的线程安全、复用状态管理等,进入回收池前要load特殊Url以维护整个backFowardList。...同时由于WKWebView支持复用回收,加载本地Html类型的WebView应该与加载H5的WebView不同的回收复用池分开管理

2.8K00

浅谈RecyclerView的性能优化

ViewCacheExtension:mViewCacheExtension又称拓展缓存,为开发预留的缓存池,开发可以自己拓展回收池,一般不会用到。...RecyclerView的回收原理 (1)如果是RecyclerView不滚动情况下缓存(比如删除item)、重新布局时。...(2)如果是RecyclerView滚动情况下缓存(比如滑动列表),滑动时填充布局。 先移除滑出屏幕的item,第一级缓存mCachedViews优先缓存这些ViewHolder。...因为Scrap缓存池不参与滚动回收复用,所以CacheView缓存池被称为一级缓存,又因为ViewCacheExtension缓存池是给开发定义的缓存池,一般不用到,所以RecycledViewPool...当程序走到onBindViewHolder方法时,数据应当是准备完备的,禁止onBindViewHolder方法里面进行数据获取的操作。 3.有大量图片时,滚动时停止加载图片,停止后再去加载图片。

1.7K10

RecyclerView必知必会

RecyclerView提供了notifyItemInserted(),notifyItemRemoved(),notifyItemChanged()等API更新单个或某个范围的Item视图。...这个问题的描述是:当Item视图中有图片和文字,当更新文字并调用notifyItemChanged()时,文字改变的同时图片会闪一下。...ArrayList[] mScrapViews;: 每个Item Type对应一个列表作为回收站,缓存由于滚动而消失的View,此处的View如果被复用,会以参数的形式传给getView()...mRecyclerPool: 缓存池,多个RecyclerView共用。...嵌套滑动机制 Android 5.0推出了嵌套滑动机制,之前,一旦子View处理了触摸事件,父View就没有机会再处理这次的触摸事件,而嵌套滑动机制解决了这个问题,能够实现如下效果: 为了支持嵌套滑动

4.6K20

RecyclerView 必知必会

RecyclerView提供了notifyItemInserted(),notifyItemRemoved(),notifyItemChanged()等API更新单个或某个范围的Item视图。...这个问题的描述是:当Item视图中有图片和文字,当更新文字并调用notifyItemChanged()时,文字改变的同时图片会闪一下。...ArrayList[] mScrapViews;: 每个Item Type对应一个列表作为回收站,缓存由于滚动而消失的View,此处的View如果被复用,会以参数的形式传给getView()...mRecyclerPool: 缓存池,多个RecyclerView共用。...嵌套滑动机制 Android 5.0推出了嵌套滑动机制,之前,一旦子View处理了触摸事件,父View就没有机会再处理这次的触摸事件,而嵌套滑动机制解决了这个问题,能够实现如下效果: ?

4.1K90

《Flutter》-- 6.高级组件

如果一个可滚动组件支持Sliver模型,那么该滚动可以将子组件分成多个部分,只有当子组件出现在口中时才会去构建它。...如果一个可滚动组件支持Sliver,那么该可滚动组件可以将子组件分成多个Sliver,只有当Sliver出现在视图窗口时才会去构建它,从而提高渲染的性能。...: () { controller.jumpTo(0); } ) ) ); } } 示例效果: 在有多个组件嵌套的组件树中...bool addAutomaticKeepAlives = true,//是否将列表项包裹在AutomaticKeepAlive组件中,默认值为true,表示列表项滑出视图窗口时不会被垃圾回收,会保存之前的状态...childrenDelegate: SliverChildListDelegate(_items), ) ) ); } } 示例效果: 如果滚动视图中出现列表嵌套的场景

10.5K20

RecyclerView 必知必会

RecyclerView提供了notifyItemInserted(),notifyItemRemoved(),notifyItemChanged()等API更新单个或某个范围的Item视图。...这个问题的描述是:当Item视图中有图片和文字,当更新文字并调用notifyItemChanged()时,文字改变的同时图片会闪一下。...ArrayList[] mScrapViews;: 每个Item Type对应一个列表作为回收站,缓存由于滚动而消失的View,此处的View如果被复用,会以参数的形式传给getView()...mRecyclerPool: 缓存池,多个RecyclerView共用。...嵌套滑动机制 Android 5.0推出了嵌套滑动机制,之前,一旦子View处理了触摸事件,父View就没有机会再处理这次的触摸事件,而嵌套滑动机制解决了这个问题,能够实现如下效果: ?

2.5K70

提高效率 |ArcGIS Pro 中所有快捷键一网打尽

Ctrl + 单击 选择多个行。 选择多个行。 Shift+下箭头 添加下一折点。 将下一折点添加到选择中并使其图中闪烁。在按住 Shift 键的同时切换方向键将取消选择行。... 2D 中,视图将沿所指示的方向平移。指针距离视图中心越远,平移的速度越快。 3D 中,当视图沿指针所指示的远离视图中心的方向平移时,将保留照相机的方位角和高度角。...V + 方向键围绕视图中心旋转。按 V 并按上箭头键、下箭头键、左箭头键或右箭头键来围绕视图中心旋转。B + 拖动 3D 场景中环视。... 2D 中,视图将沿所指示的方向平移。指针距离视图中心越远,平移的速度越快。 3D 中,当视图沿指针所指示的远离视图中心的方向平移时,将保留照相机的方位角和高度角。Shift+Q降低漫游速度。...该操作仅适用于单个字段。要一次隐藏表格中的多个字段列,请按住 Shift 键并单击以选择多个字段。然后,右键单击字段名称,并单击隐藏字段。

70420

Android开发笔记(一百零一)滑出式菜单

可移动页面MoveActivity 滑出式菜单从界面上看,像极了一个水平滚动视图HorizontalScrollView,当然也可以使用HorizontalScrollView来实现侧滑菜单。...现在有个开源的HorizontalListView,它是水平滚动的列表视图,如果该视图只有两列,左边一列作为菜单页面,右边一列作为内容页面,这就很类似侧滑菜单的功能。...2、菜单默认左边页,内容默认右边页,所以首次加载视图时,页面要自动滑到右边的内容页(调用scrollTo方法滚动到内容页)。...不知道这个情况算不算Fragment的一个bug,不管怎样,系统没有自动回收嵌套的Fragment,就得我们自己手动回收了。...下面就是一个回收嵌套Fragment的代码例子,先执行detach操作,再执行remove操作: public void cleanFragments() { for (Fragment fragment

1.1K70

Material Design — 菜单(Menus)

每个菜单项都包含不关联的选项或操作,可影响app,页面或视图中已选定的元素。 菜单不应该被用作app内导航的主要方法。 ?...情景菜单 菜单是可滚动的 如果菜单高度阻止其显示所有菜单项目,菜单可以在内部滚动。 一个例子是横向上查看手机上的菜单。 ?...级联菜单 ---- 菜单项 单行展示 每个菜单项限于一行文本(单个单词或短语),用于描述选定时执行的操作。...菜单项还可包含: ·图标和提示文本(如下图中展示的键盘快捷键); ·如复选标记之类的控件(已选择的打勾),表明多个已选的项目或状态。 菜单排序 带有静态内容的菜单应该在菜单的顶部放置最常用的菜单项。...菜单嵌套 菜单项可以显示嵌套的子菜单。 理想情况下,嵌套的层级都需要做显示,因为很难用嵌套多层的子菜单进行导航。 ?

5.8K100

RenderingNG中关键数据结构及其角色

", 0) 这个数据结构有「很多消费」:可访问性API和几何API,如getClientRects,和contenteditable。每个消费都有不同的要求。...(从上到下依次排列) 绘制视图view背景 :drawRect命令绘制大小为800x600(视图大小),颜色为白色的区块 绘制#「blue」 背景: drawRect命令「以视图为参照物」的位置为(0...最后的示例中,我们得知,浏览器和渲染进程管理内容的「光栅化」,然后将「合成器帧」提交给Viz进程以呈现给屏幕。...❝一个「单独」的GPU纹理瓦片为每个瓦片提供了口部分的光栅化像素 ❞ 然后,渲染器可以更新单个瓦片,甚至只是改变现有瓦片在屏幕上的位置。...每个通道必须在GPU上「按顺序执行」,分为多个 "阶段",而单个阶段可以单个大规模并行的GPU计算」中完成。 合成Aggregation ❝多个合成器帧被提交给Viz,它们需要被一起绘制到屏幕上。

1.9K10

Vs Code 2020年6月(1.47版)

新的JavaScript调试器 -终端中进行调试,支持配置文件。 源代码管理统一视图 -所有存储库显示单个视图中。 查看和排序挂起的更改 -以树或列表的形式查看文件,按名称,路径或状态排序。...现在,您可以从“设置”编辑器中编辑非嵌套对象设置。扩展作者可以使用此功能来增加此类设置的可见性. ? 设置的这个地方 ? 现在 settings.json: ?...如果您想从列表中选择多个文件(例如文件资源管理器)而不关注文件编辑器,这将很有帮助。...源代码控制 单一检视 源代码管理视图已合并为一个视图: ? 所有存储库都在单个视图中呈现,因此您可以更好地了解整个工作区状态。...此外,现在可以将“源代码管理视图移动到面板,而其他视图可以移动到“源代码管理视图容器 ? 查看和排序 我们增加了对使用列表视图选项时按名称,路径(默认)和状态对源控件视图中的更改进行排序的支持。

4.5K30

为虚幻引擎开发准备的Unity指南

2.1 Scene 视图口) Scene 视图是 Unity 的口,可用于直观导航和编辑场景。... Unreal 中,当在编辑器中启动游戏时,将在活动口中播放游戏。Unreal 拥有玩家 Pawn,口充当实际的游戏视图。Unpossessing 让你可以游戏运行期间编辑关卡。...当在编辑器中工作时,你通常是在编辑某种 .scene 文件(除非你预制件模式下编辑单个预制件,相关说明请参阅“使用预制件模式”部分)。与 Unreal 一样,你可以同时加载多个场景。...预制件可以直接从 Project 窗口拖放到 Scene 视图中,也可以脚本中通过引用生成。更新预制件资源后,所有场景中的该预制件的全部实例都会更新。...UMG 是一种保留模式 UI 系统,使用 UMG 时,你层级视图中创建 UI 对象,每个对象处理自己的数据和事件。

18810

如何深入理解 JavaScript 中的懒加载

对于可能不会向下滚动查看整个页面的访问来说,这将变得有益,因为它可以帮助防止他们超出每月限额。 提高页面速度得分和增强SEO性能:搜索引擎将页面速度视为排名因素之一。...它跟踪目标元素的可见性,并在元素进入或离开视图时通知开发人员。它非常适用于延迟加载图像,因为它在图像进入或离开口时通知我们,从而允许我们根据需要加载图像。...多个Intersection Observers可以同时观察同一页上的不同元素。例如,假设您有一个页面上有多个图像,并且希望在用户向下滚动页面时延迟加载这些图像。...与Intersection Observer API最适合图像和特定元素不同,基于滚动事件的懒加载提供了更多的灵活性。您可以将其应用于任何内容或复杂组件,这些内容可能不适合“视图中”的概念。...复杂的实现:实现延迟加载可能变得复杂,特别是具有复杂结构和各种类型资源的网站上。管理多个延迟加载元素,确保它们正确的时间加载,并处理交互可能具有挑战性。

29430

赶紧看看!2023年即将推出的CSS特性对你影响大不大?

Web 开发人员今天面临的一个常见问题是准确且一致的全口大小调整,尤其是移动设备上。...作为开发人员,希望 100vh (口高度的 100%)表示“与口一样高”,但该 vh 单元不考虑移动设备上缩回导航栏之类的事情,因此有时它最终会太长并导致滚动。...支持 嵌套 Sass等框架的嵌套功能,是最受css开发人员追捧的功能之一,但是要想使用样式嵌套的功能只能安装各种框架,现在Web平台也同样支持了嵌套功能,允许开发人员以更简洁的分组格式编写,从而减少冗余...,它允许您根据滚动容器的滚动位置控制动画的播放。...即将推出新功能有20多个,这里只介绍了最有影响力最重要的八个,如果您想了解更多的,可以查看下面的谷歌开发文章 https://developer.chrome.com/blog/whats-new-css-ui

17430

CAD常见问题解决

4、按CTRl+V,按提示定位插入点,图纸就会复制到当前图中。 如果有特殊要求,希望将图形转帖到与原始图纸相同的坐标,可以“编辑”菜单里选择“粘贴到原坐标”命令。...列表显示 measure(ME) 定距等分 mirror(MI) 镜像 mocoro 移动、复制、旋转 move(M) 移动 mslide 生成快照 mtext(MT) 多行文本标注 mview 创建多个浮动口...因此当图形中对象较多时,如果要对局部区域进行填充,效率最高的方式就是将填充区域尽量放大,使视图中显示的对象越少越好,另外,如果能将填充边界外的其他对象隐藏,无疑更好。...然后输入bh执行填充命令,点“添加:拾取点”按钮,缩放视图,使视图中显示较多的矩形(有3000以上就可以了),在任意一个矩形中点一下,此时AutoCAD会弹出一个提示对话框,如下: AutoCAD显示对象多时填充计算速度同样会变慢...因此如果当图面复杂的时候想提高填充速度,有两种方法:一是尽量放大视图,让当前视图中显示的对象越少越好,如果放大后填充,缩放+填充会比不放大直接填充花费的时间更少,反而能提高效率;二是如果填充区域是一个封闭的多段线或其他图形

2.7K40

干货 | 携程APP NativeRN内嵌Flutter UI混合开发实践和探索

各种技术栈各有优劣和特点,技术选型需团队自身情况而定,没有绝对好坏之分。然而在实际开发中,并不是只选用一种技术栈,那么研究多种技术栈融合和嵌套使用的就有了迫切的必要性。...本文我们从实际业务场景出发,初步实践了RN里面嵌套flutter view、native里面嵌套flutter view,探索其可行性,并回顾这个过程中遇到的一些问题和解决方案。...RN启动流程 程序启动完成的时候创建了根视图RCTRootView,负责展示所见内容的根容器 创建管理native和js的交互的桥接对象RCTBridge 创建RCTBatchedBridge批量桥对象...这样的方案可以实现一个native容器中同时嵌套native、RN、flutter组件,并由native容器管理生命周期。 那flutter-RN组件嵌套时,如何实现不同组件生命周期相关联?...后续会在此基础上做进一步的优化,比如flutter view的滚动事件如何很平滑地传输到native,使得双列表嵌套滚动的时候没有顿挫感。

2.3K10

Android界面性能优化必读

1.4 垃圾回收 垃圾回收器是一个应用运行期间自动释放那些不再引用的内存的机制,常称 GC 。频繁的 GC 也是导致严重性能问题的罪魁祸首之一。...会动态提升垃圾回收的效率, ART 中的中断,通常在 2 – 3 ms 间。...但是输入、滚动和动画仍然 UI thread,因为 Thread 必须能够响应操作。...布局越复杂就越臃肿,就越容易出现性能问题,寻找最节省资源的方式去展示嵌套的内容; 尽量避免视图层级的顶层使用相对布局 RelativeLayout 。...如果应用多个地方的 UI 用到某个布局,就将其写成一个布局部件,便于各个 UI 重用。官方详解 「 戳我 」 使用 merge 标签减少布局的嵌套层次,官方详解 「 戳我 」; 去掉多余的不可见背景。

4.6K10
领券