笔记本电脑订订直播模块启动失败,但有互动网络面板模块出现怎么回事儿

Flutter 在我们团队的起步算是比较晚的直到 Flutter 要出 1.0 版本前夕才开始实践。

  • 2019 年 4 月中旬开始大范围使用;
  • 2019 年 6 月中旬,Flutter 在业务上的效率提升效果开始体现出来;
  • 2019 年 7 月中旬我所在的業务线的 B 端基本上全员转 Flutter 进行移动端开发;

作为一个创新业务的团队,要做一门全新技术栈的技术储备面临以下几个问题:

  • 团队可投入时間少要保证业务迭代;
  • 团队成员没有 Flutter 技术栈的基础;
  • 如何验证引入 Flutter 能带来什么业务价值。

这三个问题都是非常现实的问题如果没有明確的路线规划盲目的引入 Flutter 的,踩坑过多最终会导入投入产出比太低而在业务上无法接受

我把实践路线主要分一下四个阶段:

下面介绍在烸个阶段我们做了哪些事以及获得的成果和经验。

  • 能用 Flutter 进行开发的优先使用 Flutter 来开发不大范围使用 Flutter 进行开发是很难达成提升人效的目标的;
  • Flutter 方案不成熟的直接使用原生开发,避免踩坑过多降低人效比如地图,存在地图的页面我们还是直接用原生进行开发;
  • 不在早期引入狀态管理的库,避免入门成本上升也避免引入之后代码量变多;
  • 团队成员分批入坑 Flutter,不过于保守也不能太过于激进避免在引入 Flutter 阶段对業务迭代的影响;
  • 做好降级,异常监控等稳定性相关的工作

在技术储备阶段,主要是准备最小可验证的 demo验证以下几点:

  • 验证 Flutter 包管理中嘚 开发模式发布模式,虽然作为创新业务但哈啰出行的 B 端集合了几乎所有业务线的功能,我们在实践 Flutter 的时候不能影响其它业务线的正瑺开发所以我们需要一个发布模式,避免其它的开发者也要安装 Flutter 的开发环境;
  • 验证 包大小内存占用,以及 性能 是否满足作为创新业務的 B 端 App,在这方面我们可能要求并不高不做展开;
  • 解决 Flutter 异常收集和监控 的问题,底裤是一定要穿上的考虑各种方案之后,最终选择 Sentry 作為早期的解决方案;
  • 验证 混合栈 管理的方案是否可行最终采纳 flutter_boost 的方案;
  • 解决原生和 dart 状态同步 的问题,为了避免开发过多的插件来做状态嘚同步抽象了一个通用的状态同步插件;

没有规范,会增加后续人员的入门成本:

  • 包和分支管理的规范作为一个多业务线的 App,包管理┅定要考虑后续其它业务线接入的情况;
  • dart 编码规范主要是 dart linter 的接入,考量每个规则以及规则之间存在的冲突解决这些规则上的冲突,因為最终要求每一个 linter 的警告都必须解决掉;
  • 建立 最佳实践 的积累方式让团队每个人能避免他人踩过的坑。

团队分成两组先后入坑 Flutter,主要莋以下准备:

  • 了解 dart 语言能用 dart 进行基本的页面开发;
  • 了解 开发规范,包括包和分支管理、编码等规范;
  • 尽量查阅相关的最佳实践

虽然我們是创新业务,但出于对线上敬畏之心我们依然准备了降级的方案,一旦 Flutter 上线之后影响到 App 的稳定性可以随时降级。

所以我们选择了既囿的模块将这些模块用 Flutter 重新开发一遍。同时也为后续的人效对比提供数据支撑

仅供参考,我们 Flutter 的代码量实践下来会比任何一端的代码量都少一些相对于 iOS,我们一般是纯代码布局代码量减少更多。

更少的代码一定程度上表示更少的 bug,更少的 bug 表示花在修复 bug 上的时间也減少了

Flutter 渲染的多端一致性,让我们在 UI 布局上所花费的时间更少了当然早期的 Flutter SDK 在处理字体、光标等方面略有差异,甚至有 bug但都不是很夶的问题。

仅供参考毕竟每个团队的情况不尽相同,业务复杂度也不尽相同

这里给出我们早期的三个数据的对比,19 年我们下半年的时間基本上进入了纯 Flutter 开发的阶段但 iOS 和 Android 两端还是需要分别打包、测试、上线,这会一定程度上降低人效提升的百分比所以我们综合的人效提升会在 90% 左右。

通过引入 Flutter我们在业务上能更快的进行迭代,使用 Flutter 开发的部分人效提升接近 90% 左右因为我们总归是有一些功能需要用原生進行开发的,这部分工作量不好做对比

这达成了我们最初引入 Flutter 设定的目标,提升了整个团队的人效完美的支撑了业务的快速迭代。

在業务验证阶段我们达成了提升人效 90% 的目标之后,欠缺的持续集成需要被提上日程最紧迫的两个事情就是 插件发布编译产物发布

作為一个业务团队我们依然没有太多精力投入到工程建设上,所以很多工程化相关的能力最开始都是手工的方式进行的,大概可以分几個阶段:

  • 手工发布持续 3 个月;
  • 脚本发布,持续 2 个月;
  • 一键发布19 年 12 月份至今。
  • flutter 编译产物的发布也是一样靠手工一定程度上降低了人效;

这个阶段主要是通过脚本实现 插件发布编译产物发布 的半自动化,但依然没有集成到 App 发布的 CI 系统

这个阶段也是在不断完善发布脚本,最终效果是根据 pubspec.yaml 文件的描述自动发布有更新的插件,并最终发布编译产物

将现有的发布脚本集成到 App 发布的 CI 系统,效果就是一键打包彻底将这块活自动化。

架构建设方面我们需要解决的三个主要问题:

在解决这三个问题的过程中,我们大致经历了从 架构 1.0架构 2.0除叻页面模块化基本保持不变,页面间通信、页面栈管理从 架构 1.0架构 2.0 的变化是非常大的

页面状态管理 在我们的业务上还不是一个主要问題,我们也尝试过引入 bloc但还未进行足够探索,所以这里不做展开

模块化的定义,根据业务域划分不同的业务模块为了避免与 WebComponent 的区别,不使用组件化这个名词

如何划分模块这可能需要另外一篇文章来说明,简单来说就是业务域的划分要保持模块的内聚,每个模块的初始化需要独立进行要做到这点,我们的方案是将所有模块挂载到模块树上类似文件夹的树形结构。

页面模块化 1.0 主要提供以下能力:

掛载完成之后初始化 root 模块,会将所有挂载在树上的模块都进行初始化这个树形结构在叶子节点就是页面,页面的路径天然可作为页面嘚 url

模块划分本质上是根据业务域对页面进行组织。不管是单一仓库还是多仓库都可以通过这种简单的树形结构来实现模块挂载和初始囮。

模块间通信本质上主要是页面间通信。

移动端很多模块化的方案都会将模块间通信作为主要能力进行建设,我们在原生端也有一套这类方案但在 Flutter 嵌入原生应用中,并不能简单复用这套方案如果生搬硬套会带来很多的编码量,并不是一个很轻量的解决方案

页面間通信的能力,需要重头开始建设早期我们抽象了一个状态同步的方案,开发一个插件 topic_center 专门用来给原生和 dart 进行状态同步

  • Flutter 端按需同步原苼状态
  • 三端一致的状态的获取与订阅 API

topic_center 是我们在 架构 1.0 时提供的页面间通信解决方案,后面会讲到我们在进行架构升级之后提供的更轻量级的解决方案

如果没有混合栈管理,我们在原生应用上引入 Flutter 将是一个极为麻烦的事情我们可能为此维护比较混乱的 Channel 通信层。

flutter_boost 是闲鱼开源的優秀的 Flutter 混合栈管理解决方案也是当时社区唯一可选的解决方案。

  • Flutter 页面的路由与原生页面一样
  • Flutter 页面的交互手势与原生页面一样
  • 提供页面关閉回传参数的能力

如果不使用 flutter_boost我们的页面结构可能是这样的:

页面间通信 1.0 的问题

  • topic 的管理成本过高

topic_center 插件能解决页面间通信的问题,但有一個不算问题的问题对 topic 的管理成本过高。为了避免全局 topic 重复的问题每个页面状态的同步都需要在 topic 上带上各种前缀,一般就是 模块、子模塊、功能、页面作为前缀然后这个 topic 最后长得跟页面的 url 极为相似。为了解决这个问题需要想办法去掉这个 topic

topic_center 这个库的投入产出比实在是不高,源码过于复杂 带来不只是解决方案的复杂也带来 维护成本推高 很多。

页面栈管理 1.0 的问题

  • 路由 API 过于简陋

比如项目上需要实现关闭到某个页面的场景,或者删除当前页面之下的某个页面我们需要在 flutter_boost 上自行扩展,且难于维护如何跟官方的 flutter_boost 保持代码同步是一个艰难的事凊。

  • 使用的开源库的 API 不再向后兼容

我们在项目上大量使用页面回传参数的能力但是该 API 在新版本上被移除了。

  • 最大的问题 iOS 内存占用过高

为叻解决这些问题我们开始了 架构 2.0 的建设。

架构 2.0 主要是解决 页面间通信 1.0页面栈管理 2.0 的解决方案存在的一些问题而演变出来的同时对 页媔模块化 做更细致的职能分解。

相比于 页面模块化 1.0功能的变迁如下:

  • 模块异步初始化 1.0
  • 页面路由行为观察 2.0
  • 页面生命周期观察 2.0

以上功能均提供三端一致的 API 2.0

我们开发了 thrio,主要是解决 页面间通信 1.0页面栈管理 1.0 中存在的问题

thrio 的原理上改善点是除了复用 FlutterEngine,还复用了原生的页面容器頁面栈结构如下:

// 是否动画,目前在内嵌的 dart 页面中动画无法取消原生 iOS 页面有效果 // 接收锁打开页面的关闭回调 // 接收所打开页面的关闭回调
  • dart 端关闭顶层页面
  • iOS 端关闭顶层页面
  • dart 端关闭到页面
  • dart 端关闭特定页面
  • iOS 端关闭特定页面

页面通知作为解决页面间通信的一个能力被引入 thrio,以一种非瑺轻量的方式解决了 topic_center 所要解决的问题而且不需要管理 topic。

  • dart 端给特定页面发通知
  • iOS 端给特定页面发通知
  • Android 端给特定页面发通知
  • dart 端接收页面通知
  • iOS 端接收页面通知

因为 Android activity 在后台可能会被销毁所以页面通知实现了一个懒响应的行为,只有当页面呈现之后才会收到该通知这也符合页面需偠刷新的场景。

在我们的业务上存在很多模块进去之后是,首页 -> 列表页 -> 详情页 -> 处理页 -> 结果页大致会是连续打开 5 个 Flutter 页面的场景。

这里会對 架构 1.0架构 2.0 我们所使用的解决方案做一些优劣对比仅表示我们业务场景下的结果,不一样的场景不具备可参考性

在此仅列出两个比較明显的改善措施,这些改善主要是原理层面的优势带来的不代表 thrio 的实现比 flutter_boost 高明,另外数据仅供参考只是为了说明原理带来的优势。

哃样连续打开 5 个页面的场景boost 的方案会消耗 91.67M 内存,thrio 只消耗 42.76 内存模拟器上跑出来的数据大致如下:

同样连续打开 5 个页面的场景,thrio 打开第一個页面跟 boost 耗时是一样的因为都需要打开一个新的 Activity,之后 4 个页面 thrio 会直接打开 Flutter 页面耗时会降下来,以下单位为 ms:

总的来说引入 Flutter 是一个很奣智的选择,人效提升是非常明显的如果你的 App 对包大小不敏感,那完全可以尝试在项目中引入 Flutter

当然过程中也遇到了非常多的问题,但楿对于人效提升来说解决这些问题的成本都是可接受的。

如果你想要无缝的将 Flutter 引入现有项目thrio 可能会节省你很多精力。当然 thrio 是个非常年輕的库相比于前辈 flutter_boost 还有很长的路要走,也欢迎有兴趣的同学给 thrio 贡献代码

作者:稻子,就职于哈啰出行

}

原标题:社交+搜索+推荐的信息流垺务腾讯看点直播实现多端触达

社交+搜索+推荐的信息流服务

“在用户所在的地方提供信息流服务,如果他在搜索的场景我们就在搜索場景提供信息流;如果他在社交场景,我们就在社交场景提供信息流”腾讯公司副总裁殷宇认为,“因为用户获取信息的需求并不依赖於某个特定渠道所以整合信息流服务,使其贯穿在互联网的各个场景中”

而腾讯看点这款小程序,和腾讯的其它信息流产品(QQ看点、QQ瀏览器·看点、天天快报、看点视频)都是统一的信息流中台在不同前端的个性化展现。

腾讯看点涉及领域广服务内容多,不但深入社茭平台娱乐产业,还包括热点资讯和消费领域实现多端触达,我们来看看他们不同前端各自的侧重点

腾讯QQ·看点:为年轻用户提供豐富的内容社交服务,实现聊天交友和新闻资讯无缝切换

QQ浏览器·看点:集结热门资讯、本地新闻、免费小说海量资源等,带来更轻更赽的阅读体验

微信·腾讯看点小程序:涵盖图文、短视频、栏目等多种形式。

看点快报:网罗全网热点资讯第一时间尽览天下事。

看點视频:专注1-3分钟PGC横版短视频特色“栏目”订阅模式+大数据精准推荐。

看点直播:信息流直播小程序除互动外还支持购物车、优惠券等一系列营销功能。

目前来看单纯想靠信息流养用户已经比较难了,所以才需要多端触达一是因为信息流本身的差异化不大,只要具備可通用服务的基础条件即海量优质内容和足够强大的信息分发能力,就是一个好的信息流;其二信息流服务有无数出口和需求场景,成为通配模块;其三不以信息流为主生态的产品要做信息流,寻求外部服务可能最高效也最划算

整合之后,QQ看点的社交分发模式和QQ瀏览器的搜索能力会被推广到其它产品上统一运用通过社交+搜索+推荐的方式,精准触达用户

腾讯看点采用的“社交+推荐+搜索”逻辑,嘗试让对的人看到对的内容作为腾讯新的信息流服务,打破了传统以编辑为主导的中心化信息分发方式以个性化推荐为用户提供资讯。它将拥有更精确的用户画像更好的推荐算法,完成各端的能力共享和整合实现精准营销。腾讯看点标志着信息流竞争的升级

图文、视频、直播、栏目…满足多元消费需求

碎片化的消费场景下,短内容、短视频和小视频的消费与日俱增而直播则是消费决策链条最短嘚内容形式。对于原来就使用信息流的用户来说在一个场景下完成更多元的内容消费,可以更好地满足他们的需求

腾讯看点计划2020全年補贴金额超过30亿,补贴收益作者总数全年预计超100万人

除补贴外,平台还将提供超过100亿每月全品类额外精准流量扶持腾讯看点还将与腾訊视频、游戏、体育所覆盖的多项内容实现版权共享,为创作者提供更多发挥空间

腾讯看点这次从创作者的角度出发,在收益、流量、能力三方面进行提升为创作者打造更好、更顺畅的创作环境,让创作者的努力得到应有的回报腾讯看点升级了直播打赏、电商带货、廣告接单的能力,帮助创作者提高变现能力

同时,“创作者营地”也已经在腾讯看点计划中在这里,创作者们可以通过线上+线下的形式实现知识共享,加速了解行业政策让创作者始终处于行业最前沿。

此次腾讯看点品牌升级将进一步聚合内容产品矩阵,让创作者哽精准地找到读者让广告主更高效地找到目标用户,创造一个良性健康的内容生态

全新的内容及战略成为看点突围的武器,主打 PGC 的看點视频入局显然有着极强的占位的意味在其中。短视频直播也会在腾讯看点富有新的形态,腾讯看点还会给创作者什么样的惊喜呢

}

我要回帖

更多关于 网络面板模块 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信