掘金 AMA:听闲鱼客户端架构师--邬吉风聊 Flutter 和移动端开发那些事

栏目: 后端 · 发布时间: 6年前

内容简介:第二十一期 AMA 掘金团队请来了闲鱼客户端架构师,《Fish-Redux》作者--邬吉风做了为期三天的阿里花名吉丰, 《Fish-Redux》作者。现任闲鱼客户端架构师,负责研发效能 & 高可用相关工作。抛开场景直接做比较是不合理的,scoped_model和fish-redux,在各自的场景下有各自的优势。

第二十一期 AMA 掘金团队请来了闲鱼客户端架构师,《Fish-Redux》作者--邬吉风做了为期三天的 Ask Me Anything (AMA) 活动(活动已结束)。 我们在此精选了一些来自用户的提问及邬吉风的回答。

关于 邬吉风

阿里花名吉丰, 《Fish-Redux》作者。现任闲鱼客户端架构师,负责研发效能 & 高可用相关工作。

掘金 AMA:听闲鱼客户端架构师--邬吉风聊 Flutter 和移动端开发那些事

提问目录

社区小伙伴精选提问--技术相关

用 Flutter 的过程中遇到几点问题? -@恋猫de小郭

  1. 没找到普通意义上的文本行间距设置方式,基本上都是leadind和height等参数而不是两行之间间隔大小。
  2. 在Refresh控件刷新过程中,除了等待Future之外,貌似没有办法直接打断刷新状态。
  3. Flutter的热更新方案除了闲鱼提出的模板json外,对于ios还有其他可行方案吗?
  4. Flutter状态管理fish redux和google的provide优劣?
  1. flutter目前是没有line-space的选项,但是我们可以通过换算得到相同的结果。
  2. 自定义Refresh控件的原理和native基本相同,是可以完全控制的。Future是一个对异步的封装,在刷新过程中,使用Future是一种实现手段。
  3. Flutter的热更新方案除了闲鱼提出的模板json外,建议是跟随Google的官方方案。
  4. provide方案目前已经不再建议使用,它的替代者是 scoped_model。

抛开场景直接做比较是不合理的,scoped_model和fish-redux,在各自的场景下有各自的优势。

相对而言,fish-redux 更适合有一定复杂度的中大型的项目。它核心解决了状态集中管理和组件分治管理的关系,所以一方面我们能享受到Redux集中管理的巨大好处,另一方面我们也能享受到组件化分治的能力。同时对移动应用中最常见的ListView场景对了做了上层抽象,得到最佳的性能和最佳的分治模型。

Dart会替代js吗? ─ @A小恐龙

Dart会替代js吗?

我认为dart不会完全替代js,但是会作为一种对js的补充存在。同时dart语法上有非常多的对js的继承,对js的同学在语法上算是友好的。

你们是如何解决TextField Widget 的光标高度问题的? -@掘金社区首席装逼CTO

你们是如何解决TextField Widget 的光标高度问题的? flutter环境Flutter (Channel beta, v1.3.8, on Mac OS X 10.14.3 18D109, locale zh-Hans-CN) 左边是咸鱼,右边是我做的

掘金 AMA:听闲鱼客户端架构师--邬吉风聊 Flutter 和移动端开发那些事

你截图里的闲鱼页面是用的native的输入法,不过我们目前已经在将它变成flutter的实现了(内部对flutter的patch)。

而你的右截图是flutter的实现,其实是一个flutter的bug,它将空格符的高度作为光标的高度和所有textfield文本内容的高度,这导致了一系列的问题。

github.com/flutter/flu… github.com/flutter/flu…

好消息是flutter团队正在处理这个问题,相信不久后,这个问题将得到彻底解决。

对Provide状态管理怎么看?可以直接在fish_redux里面用吗? -@洺鱼

对Provide状态管理怎么看?可以直接在fish_redux里面用吗

Provide状态管理目前已经不再推荐了,它可以在fish_redux内使用,但并不推荐这样做。fish_redux更加强调的是单一数据源驱动。 当然如果有更加具体的case的话,欢迎去https://github.com/alibaba/fish-redux/issues 给我们issue。

widget嵌套太不方便阅读了,有什么解决的办法?-@caiweijian

widget嵌套太不方便阅读了,有什么解决的办法

可以通过IDE的重构能力,拆分成若干小的函数,一定程度上会让可读性提高。

非技术相关-- 技术观点

如何让我能够在redux的世界里能够杀出一条血路? -@正楷

你好,我也是redux爱好者,不过基于对redux的不满重新写了一个flux架构的实现:react-control-center, counter实例: stackblitz.com/edit/cc-cou… , cc-antd-pro: github.com/fantasticso… , 我自己认为这样的方式是最接近react的方式去管理react状态,但是苦于redux生态已经做大做强,不知道你cc有何看法,或者建议,让我能够在redux的世界里能够杀出一条血路。

redux爱好者和强烈的不满似乎是个矛盾体。 我简单看了你给的链接,看上去是个不错的设计。 开源本身是成就你我,普惠众人,没有那么强的对立性,建议是拥抱redux社区,做出更好的作品。

关于移动端和大前端的未来?-@hanliuxin5

  1. 在目前大前端浪潮越刮越涌的情况下,原生开发的优势和劣势何在。
  2. 小公司如何更有效的开展大前端技术的布道。
  3. 对移动端开发未来的展望。

在当下,原生开发的优势依然存在,但从软件架构分层看,它更加适合往下层发展。 而对于广大的软件开发者而言,日常最多的往往是上层的具体业务需求,受效率和成本的驱动,将越来越趋向统一的跨端解决方案。

大前端是一种解决方案,flutter也是,它们有各自适合的场景,在这个基础上,我相信它们都会成为下一代的主流的跨平台解决方案。

而在这个过程中,小公司反而是更加容易拥抱变化,成为这个技术领域的先驱。

关于 Flutter 的几个问题 -@Vadaski

  1. 客户端新手直接学习Flutter来入门可以吗,对于新手来讲学习Flutter难点有哪些呢,在了解Flutter之后如果想要进一步拓展,下一步的技术学习方向定哪些会比较好呢。
  • 现在Fish Redux的学习成本相对还比较高,未来有没有计划对这个进行优化呢,例如详细教程等。
  1. Flutter目前生态中有没有硬伤的部分,前两天在图文混排上遇到了坑,文字自动填充图片右边和下面空间这样的排版,暂时还没有踩过去,闲鱼有相关解决方案么。还有其他哪些不太好踩的坑需要注意呢。
  2. 目前看到有在用TensorFlow自动生成UI代码,三端一体化,组件化,确实很有吸引力,您认为客户端开发的理想状态是什么。 问题比较多,嘿嘿。 期待吉丰老师答复。
  1. Flutter,就上层应用开发而言,对于新同学是非常友好的一个框架。我建议在有实践的场景学以致用,是比较有效的学习方式。选择技术方向也是类似,只有在对的场景才有用。
  2. Fish Redux 是通过大量实践检验的项目,但在文档方面仅仅是满足最基础的要求,后面我们会对文档整理和细化,也非常欢迎更多的社区同学加入进来,一起让它变得更好,让它慢慢演进成一个有影响力的flutter应用框架。
  3. 从闲鱼的实践来看,flutter的问题已经很少了,目前在键盘、输入法相关场景下,flutter比native稍差些。图文混排可以自定义,一般是将图片转化为一个宽度为0字符,然后给它设置宽高。
  4. Ui2code也是闲鱼技术团队在做的一个技术项目,我自己也曾参与其中, 我相信它是未来终端技术的一部分,并且在不远的将来,就会变为一种通用的能力。

我是一名安卓研发,现在在考虑接下来学习rn还是flutter,能给个建议么? -@啃手指的大笨熊

现在闲鱼ios版本也使用了flutter么?选用flutter而不是rn的考虑是什么?混合开发的情况下,为了部分页面而引入flutter的sdk,导致安装包大小变大,会不会得不偿失? 我是一名安卓研发,现在在考虑接下来学习rn还是flutter,能给个建议么?

是的,目前闲鱼的Flutter是运行在两个平台上的。 引入Flutter,在Android端大致增加了6M大小,并不是特别大,是可接受的范围。

RN和Flutter之间的比较,应该有非常多的文章。以我浅见看,RN是一种中间妥协方案,它会被浏览器技术的进步而取代,而Flutter是更加面向未来的一种彻底的跨平台渲染框架。

对使用flutter与其他语言混合开发比较感兴趣(比如用flutter构建用户界面,用rust/kotlin写业务逻辑),能否讲讲? -@VitalyR

对使用flutter与其他语言混合开发比较感兴趣(比如用flutter构建用户界面,用rust/kotlin写业务逻辑),能否讲讲?想这样做是因为不太喜欢dart的语法,以及希望用rust可以提高性能。

选择任何技术都有它对应的场景,抛开具体场景谈技术是不合适的。

比如使用rust来编写业务逻辑,它适合什么场景,解决了什么问题?

如果比较性能,dart 代码AOT下会被编译成机器码,它的性能不可能会比rust低。

如果是语法问题的话,我建议是更加开发的姿态去接受新鲜技术的挑战。

我自己过去对dart也会存在疑问,但是随着深入使用,会渐渐喜欢上dart。它使用友好,产物小,性能高,同时拥有AOT和JIT,支持毫秒级的hot-reload等等特性,这样你也能更加深入的理解为什么Google选择dart作为flutter的开发语言,它几乎就是最佳的终端语言选择。

福利篇-闲鱼招人

闲鱼作为阿里巴巴在闲置流通领域的战略产品,是业内第一的闲置交易社区。

闲鱼技术团队推行打破技术栈分工限制(Android/iOS/HTML5/Server 编程模型和语言的统一), 以及计算机视觉技术在移动终端上的前沿实践工作。致力于利用先进技术推动业务发展。 特别的是,我们在 Flutter 和 Tensorflow Lite 等新技术的研发及应用处于行业领先位置,加入我们,一起用技术让生活变得更加美好!

闲鱼团队现面向各大高校诚招 客户端/服务端Java/前端/测试 实习生,base杭州阿里巴巴西溪园区 特别的我们非常欢迎有算法经验的工程同学加入我们的团队,一起完成深度学习在UI识别、商品内容理解、视频图片分类和质量检测等领域的应用落地,让算法的价值普惠闲鱼亿级用户。 欢迎各位投递简历,详询tino.wjf@alibaba-inc.com

由于篇幅原因,本期只摘录了部分问题,邬吉风 也回答了很多其他的技术、非技术问题,欢迎去他的 AMA 下面交流技术哟,传送门。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Learn Python the Hard Way

Learn Python the Hard Way

Zed A. Shaw / Addison-Wesley Professional / 2013-10-11 / USD 39.99

Master Python and become a programmer-even if you never thought you could! This breakthrough book and CD can help practically anyone get started in programming. It's called "The Hard Way," but it's re......一起来看看 《Learn Python the Hard Way》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具