第二十一期 AMA 掘金团队请来了闲鱼客户端架构师,《Fish-Redux》作者--邬吉风做了为期三天的 Ask Me Anything (AMA) 活动(活动已结束)。 我们在此精选了一些来自用户的提问及邬吉风的回答。
阿里花名吉丰, 《Fish-Redux》作者。现任闲鱼客户端架构师,负责研发效能 & 高可用相关工作。
抛开场景直接做比较是不合理的,scoped_model和fish-redux,在各自的场景下有各自的优势。
相对而言,fish-redux 更适合有一定复杂度的中大型的项目。它核心解决了状态集中管理和组件分治管理的关系,所以一方面我们能享受到Redux集中管理的巨大好处,另一方面我们也能享受到组件化分治的能力。同时对移动应用中最常见的ListView场景对了做了上层抽象,得到最佳的性能和最佳的分治模型。
Dart会替代js吗?
我认为dart不会完全替代js,但是会作为一种对js的补充存在。同时dart语法上有非常多的对js的继承,对js的同学在语法上算是友好的。
你们是如何解决TextField Widget 的光标高度问题的? flutter环境Flutter (Channel beta, v1.3.8, on Mac OS X 10.14.3 18D109, locale zh-Hans-CN) 左边是咸鱼,右边是我做的
你截图里的闲鱼页面是用的native的输入法,不过我们目前已经在将它变成flutter的实现了(内部对flutter的patch)。
而你的右截图是flutter的实现,其实是一个flutter的bug,它将空格符的高度作为光标的高度和所有textfield文本内容的高度,这导致了一系列的问题。
github.com/flutter/flu… github.com/flutter/flu…
好消息是flutter团队正在处理这个问题,相信不久后,这个问题将得到彻底解决。
对Provide状态管理怎么看?可以直接在fish_redux里面用吗
Provide状态管理目前已经不再推荐了,它可以在fish_redux内使用,但并不推荐这样做。fish_redux更加强调的是单一数据源驱动。 当然如果有更加具体的case的话,欢迎去https://github.com/alibaba/fish-redux/issues 给我们issue。
widget嵌套太不方便阅读了,有什么解决的办法
可以通过IDE的重构能力,拆分成若干小的函数,一定程度上会让可读性提高。
你好,我也是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社区,做出更好的作品。
在当下,原生开发的优势依然存在,但从软件架构分层看,它更加适合往下层发展。 而对于广大的软件开发者而言,日常最多的往往是上层的具体业务需求,受效率和成本的驱动,将越来越趋向统一的跨端解决方案。
大前端是一种解决方案,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 下面交流技术哟,传送门。