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

Flutter引擎和外接纹理内存优化探索之路

背景 今年九月初,王者人生Android端及iOS端正式接入flutter跨平台方案来提升开发效率。...接入flutter之后,我们成功使用flutter上线了首页一起玩赢福利,上线之后,我们的优化工作也一直紧锣密鼓的进行着,其中最为突出的三个问题是【flutter热修复,flutter引擎flutter...flutter引擎 着手研究flutter引擎,是因为对于以原生接入flutter这种形式的项目来说,因为并不是一个纯粹的flutter项目,因此,可能会出现以下这样的导航方式中间过程,而且可能会存在多次...带着这个问题,我研究了一下flutter的启动流程,也记录了一下过程《flutter启动流程简析》,而这个过程让我明白了我们起初的接入方式做不到引擎,但是如果我们换另外一种方式,可以很巧妙的做到引擎...所以,我们另外一种接入方式可以做到引擎吗?

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

Flutter 渲染引擎详解 - iOS Metal 篇

Flutter 渲染引擎在 iOS 上支持三种渲染方式,分别是纯软件(CPU),Metal 和 GL。...这篇文章的主要内容是讲解在 iOS 上,Flutter 渲染引擎: 需要的 Metal GPU 上下文环境是如何完成初始化; 目标输出 Surface 的设置过程; 渲染流水线执行光栅化的调用过程。...上图显示了 Flutter 渲染引擎在 iOS 上主要涉及的对象,绿色背景是 iOS SDK 原生对象,黄色背景是平台相关的适配对象,白色背景是平台无关的通用对象。...break; } FML_CHECK(false); return nullptr; } PlatformViewIOS 一个主要的职责就是创建 IOSContext 对象,由它来为渲染引擎提供...光栅化输出 关于 Flutter 渲染流水线比较完整的说明请参考我之前的文章Flutter 渲染流水线浅析,在这里我们只关注光栅化的部分。

2.1K31

Flutter 渲染引擎详解 - iOS GL 篇

Flutter 渲染引擎在 iOS 上支持三种渲染方式,分别是纯软件(CPU),Metal 和 GL。...这篇文章的主要内容是讲解在 iOS 上,Flutter 渲染引擎: 需要的 GL GPU 上下文环境是如何完成初始化; 目标输出 Surface 的设置过程; 渲染流水线执行光栅化的调用过程。...上图显示了 Flutter 渲染引擎在 iOS 上主要涉及的对象,绿色背景是 iOS SDK 原生对象,黄色背景是平台相关的适配对象,白色背景是平台无关的通用对象。...break; } FML_CHECK(false); return nullptr; } PlatformViewIOS 一个主要的职责就是创建 IOSContext 对象,由它来为渲染引擎提供...光栅化输出 关于 Flutter 渲染流水线比较完整的说明请参考我之前的文章Flutter 渲染流水线浅析,在这里我们只关注光栅化的部分。

1.5K10

flutter |悬浮窗解决方案 flutter_floating

特性 全局的悬浮窗管理机制 支持各项回调监听,如移动、按下等 支持自定义是否保存悬浮窗的位置信息 支持页面及全局使用,可插入 N 个悬浮窗 支持自定义禁止滑动区域,例如在 距离顶部 50 到底部的区域内滑动等...isShowLog 属性控制,不同的悬浮窗 Log 会通过不同 key 显示出来 I/flutter (24648): Floating_Log 1 : 按下 X:0.0 Y:150.0 I/flutter...Y:150.0 I/flutter (24648): Floating_Log 1 : 移动 X:0.36363636363636687 Y:149.63636363636363 I/flutter...I/flutter (24648): Floating_Log 1 : 移动 X:0.0 Y:145.9999999999999 I/flutter (24648): Floating_Log 1 :...悬浮窗创建 悬浮窗可用于某个页面中,页面退出后关闭即可。 class CustomPage extends StatefulWidget { const CustomPage({Key?

1.6K30

有赞 Flutter 混编方案

二、混编方案 2.1 方案考量 如果直接采用 Flutter 工程结构来作为日常开发,那这部分 Native 开发也需要配置Flutter环境, 相当程度的了解 Flutter 一些技术,成本比较大;...时执行此脚本,脚本主要处理: Pod本地依赖Flutter引擎(Flutter.framework) 与Flutter插件注册表(FlutterPluginRegistrant) Flutter插件通过..., flutter, weex 开发),有以下方案(中间产物库每个 Flutter 业务模块都是独立的): Android: ?...六、总结 以上比较全面的描述了有赞的 Flutter 混编方案,目前有赞已经在内部使用的App上使用 Flutter 开发了一些页面作为试点。...相关阅读: 官方 iOS 混编方案:https://github.com/flutter/flutter/wiki/Add-Flutter-to-existing-apps Flutter的编译模式:https

1.6K41

Flutter混合栈路由实践与优化

引擎下内存进一步优化,解决了打开多个 Flutter 页面时内存异常增长(Boost 等方案下仍有内存异常); 规避底层代码修改不可见导致的项目风险,解决过度耦合 io.flutter 包导致的 sdk...所以多引擎不能满足项目的性能要求。 2. 引擎浏览器方案 由于多引擎的缺陷,业内的做法一般是对 isolute 或 Engine 进行复用来解决。...影响力较大的是以 FlutterBoost 和 Thrio 为代表的引擎浏览器方案。...但我们并不清楚外部方案具体做了哪些底层修改,这给项目带来风险。 在预研引擎路由方案的时候,我们发现大多是直接拉取官方 io.flutter 包来进行底层改造。...三、实现方式及痛点解决 在明确业内方案和面临的痛点之后。我们聚焦于痛点的解决,推出了一套更优的混合栈路由方案 TRouter。 1. 整体框架 整体框架上,仍采用引擎浏览器方案

2.7K51

Flutter 渲染引擎详解 - RasterCache 与间接光栅化

在渲染流水线中的光栅化文章中,我介绍了不同渲染引擎使用的不同光栅化的策略。...在 Flutter 的渲染引擎中,使用的是所谓的同步光栅化或者也称为即时光栅化(On Demand),在这种光栅化策略中: 以直接光栅化为主,图层的 DisplayList 直接绘制到目标 Surface...渲染引擎在 RasterCache 中实现了图层的间接光栅化,并且采取了一系列措施来规避和减轻间接光栅化带来的一些副作用,这篇文章的目的就是通过讲解 RasterCache 的实现和 Flutter...渲染引擎对它的使用来帮助读者进一步了解 Flutter 渲染引擎的内部实现细节。...即使规避了不必要的间接光栅化,但是只要使用间接光栅化就需要分配额外的光栅化缓存,所以尽快释放不再需要的缓存可以有效减少 Flutter 渲染引擎的 GPU 内存占用。

1.3K20

基于 Flutter 的 Web 渲染引擎「北海」正式开源

阿里巴巴历时 3 年自研开发的 Web 渲染引擎 北海(英文名:Kraken)正式开源,致力打造易扩展,跨平台,高性能的渲染引擎,并已在优酷、大麦、天猫等业务场景中使用。...过去也有很多对跨平台方案的探索与实践,新的技术方案也随着历史的浪潮不断地发展。...从最早的 H5 方案到 Hybrid 方案,以及后来的 Weex/React Native 方案,到现在如火如荼的 Flutter。 ?...而在 Flutter 出现之前,主流的方案还是用 React Native(Weex)的,这套方案的底层调用了原生的 View。...所以我们积极探索一种向上对接前端生态,向下使用原生渲染的跨平台方案。 于是诞生了这款基于 W3C 标准的高性能跨终端渲染引擎——北海(Kraken)。 ?

1.4K20

Flutter混编方案在起点客户端的实践之路

轻量化引擎架构 由于起点读书客户端目前依然是以原生开发为主,所以我们在嵌入Flutter模块时,首先要考虑的就是使用哪种混合栈方案。...目前市面上常见的混合栈方案,主要就是两种:一种是以Flutter Boost为例的引擎方案,另一种是以EngineGroup来实现的多引擎方案。这两种混合栈的方案,各有一些优缺点。...优势 劣势 引擎混合栈 与Native独立开来,对Native的依赖最小,混编开发流程清晰、方便 混编存在混合栈内存泄漏等问题,会存在一些底层的Crash;Flutter和Native端都需要独立实现一套完整的网络和基础库等基础模块...多引擎混合栈 相比引擎方案,性能更好,在多实例下内存压力更小,开发更加简便 对Native依赖大,多实例之间数据无法共享,需要从Native进行转发 我们在这两种架构方案的基础上,各取所长,提出了一套轻量化的引擎架构...优势 劣势 轻量化引擎方案 Flutter端极其轻量,极大化利用Flutter高效开发UI的优势 数据依赖Native,存在双向通信,Native需要作一些额外的处理 在这种轻量化的架构方案下,我们作了一些改进

46630

Flutter 产物分析与减包方案

因此本文将围绕“产物分析”与“减包方案”两个主题来分别论述 iOS 与 Android 两端的 Flutter 减包原理与方案。 那么,先从 iOS 端开始吧。...汇编产物通过 xcrun 工具得到架构的 App 产物,最后经过 lipo 得到最后双 ARM 架构的 App 产物。...flutter_assets 是 Flutter Module 中使用到的本地静态资源,对于这部分我们不可能“删”的只能“挪”,我们有两种方案来挪产物——常规方案依然是在 Dart VM 启动时的数据加载阶段来修改...引擎编译 修改完之后我们需要编译引擎,首先先介绍一下 Flutter Engine 编译时需要用到的工具: gclient:源码库管理工具,原本是 chromium 使用的,它可以管理源码以及对应的依赖...2.2 减包方案 libflutter.so 是引擎产物,我们依然可以做裁剪定制,但是必要性已经不大了,因为 Flutter 产物在 Android 端可以做到完全动态下发。

2.5K40

Flutter 异常处理方案——灰度与降级

灰度策略 出于对线上业务的敬畏和某些运营要求,为了保障运营的稳定性,对于线上的 Flutter 业务,我们也需要提供一套较为完备的灰度策略和降级方案。首先,本小节中先谈谈灰度策略。...2.2 后台下发与客户端加载配置 冷热启动都会拉配置,考虑到失败会有3次重试,本地会维护一份例,在业务侧要打开 Flutter 页面时都需要检查灰度配置,来决定是否打开 Flutter 页面。...对于未来只上 Flutter 的新业务,我们也正在预研 Flutter Web 的同构方案。 3....降级方案 我们需要及时的降级来保证 Flutter 业务的可靠性,灰度和降级其实本质上都是来区分业务是使用 Flutter 还是 H5,只是前者是手动配置的,后者是自动生效的。...3.3 引擎崩溃降级 但如果是引擎发生了错误必定会导致 App Crash,这种情况下不仅需要上报日志,也会置好标志位,在用户下次打开 App 时不再启动 Flutter Engine,并全量降级 Flutter

2.4K10

逆袭Flutter? Facebook 发布全新跨平台引擎 Hermes!

但是不是为了追赶Flutter?这块作者没有说明。 移动应用变得愈加繁重的同时也愈加复杂了。开发者为应用添加新功能时通常会遇到卡顿等性能问题。...尝试了各种方案后,我们构建了一个新的 JavaScript 引擎:Hermes。...在 Chain React 2019 大会上,我们发布了 Hermes JavaScript 引擎。我们已经开源了 Hermes 引擎及用于 React Native 的 Hermes 集成。...值得注意的是,这几大指标与引擎执行 JavaScript 代码时的 CPU 使用率关系并不大。关注这些指标意味着我们需要发展出与当今大多数 JavaScript 引擎不一样的策略和取舍。...Hermes 对远程调试协议的支持允许开发者连接到在其设备上运行的 Hermes 引擎,并使用与生产中相同的引擎原生调试其应用程序。

1.9K40

Flutter引擎渲染,在稿定 App 的实践

对于 Flutter引擎的优劣,笔者在这里不多做介绍,只说最重要的一点:如果有 Native + Flutter 同一页面混合布局的需求(UI 一致性 / 降本增效),但又不能整个 App 或者整个页面替换成...多引擎使用 为什么市面多引擎用的人那么少?...multiple-flutters 绝对是 Flutter 的坑中之王 首先,Flutter 版本至少升级到 2.10+,才能有初步的 iOS / Android 多引擎同时布局的可用性。...因为 2.5.3 同时布局多个 FlutterEngine (3 ~ 10 个不等),导致会发生 ANR 的现象,在寻找解决方案无果的情况下,尝试升级到当时最新版本 Flutter 2.10.5 ,结果正常了...Flutter Debug 模式下多引擎 = 内存炸裂,要用 Flutter Release 才可以稳定正常到官方描述的 180K / Engine 的内存占用效果 我们是怎么做的 image.png

1.1K20
领券