上周五去参加了 QCon 大会,上一次去好像是两年前了。人没有想象的多,会场也没有当年的气派了,难道是规模缩水了?
在”后移动互联网时代的技术思考与实践“这个主题的教室听了一天,主要是关注目前国内比较领先的大厂在移动端的发展方向。
顾名思义,移动互联网已经进入下半场,技术发展趋于稳定,从快速更新百花齐放过渡到了相对稳定的阶段,一些范式,解决方案在业内达成共识,所以本届QCon在移动端的关注度有了很明显的下降:只有一个分会场,且坐不满。
腾讯的微短视频技术挑战及应对
1、微视建立了完善的监控系统,对用户行为、播放质量等数据进行收集、聚合。以及开发了配套的报警、日志的运营平台。
这也是大厂技术资源人力有余力后领先的地方:在业务之外,有大量的基础架构来支撑运营、产品和质量的管理。
2、介绍了提升视频播放性能的一些方案:移动端对音视频相关的技术需求很大,需要对音视频底层有很深的耕耘。
具体的方案,无非是提前下载、视频数据格式优化这类。令人印象深刻的还是他们对用户数据腿毛级的收集,每个视频看了多久,播放质量如何,成功率,各阶段耗时,这些有用没用的数据都有好好收集上报。
据说腾讯在音视频这块的技术实力落后头条(抖音)一大截,想挖大牛又不舍得给钱,被业内诟病,不知道是不是真的。
3、讲了下实时音量均衡:同样通过对音频底层编码的研究,做到各个短视频响度的均衡,提升体验。现场有人问怎么处理电影里突然的枪声这种情况,回答是顾左右言他,估计没有考虑这么多。
4、最后提了下移动端的ML,也就机器学习、智能分析这块,看的出来腾讯对这块的研究没有阿里强。
阿里的移动端智能落地
阿里整块就讲了一个东西:移动端的智能。
主要是解决后端智能的一些痛点:实时性、数据隐私、离线问题等等。
关于端智能:
- 端智能已成为趋势,各⼤大公司积极布局 AI 芯⽚片和 AI 框架
- 端智能已在⼿手机和 App 中发挥巨⼤大价值,未来可期
- 手机摄像,短视频特效,端计算,IOT 智能硬件是重点应用⽅方向
阿里这块的技术做的非常深,解决了很多痛点:
- 算法模型的选择
- 模型文件压缩,体积轻量化
- 部署和更新
- 安全问题
- 移动端计算性能问题
针对移动端打造了一整套的自研方案,现场图标各项指标吊打业内主流。虽然对这块一窍不通,但是个人感觉牛逼闪闪,要献上膝盖。
至于具体的应用场景,目前还只是一些商品推送、运营互动中会使用,感觉潜力没有被开发。
这套方案叫ALiNN(难听又难记),大佬表示会开源,不知道什么时候。
携程的无线技术平台化
携程讲的东西很传统,就是大厂自己的平台建设,没有啥出彩的地方。
1、持续交付平台:就是携程的自动化集成、打包、发布平台,解决夸团队开发的许多痛点。这个东西开源的收费的大厂内部自研的一大堆了。当然还包括崩溃收集(演讲人吐槽了下 bugly 很难用,确实很难用)、配置中心、灰度这些基本功能。
App Size 管理算是个比较有特点的东西,打包时计算各个组件模块的占用比。
另外崩溃收集会根据调用栈中的函数名等符号自动在平台上分配给对应的团队,但是没有解决多团队公用轮子的坑。
2、性能监控平台:提供了精细化运营、多维度查看数据、App运行状态实时反馈等功能。
3、日志排障平台:又是对用户数据腿毛级别收集了,做到了全链路打通,H5,Native,Hybrid,我全都要。
4、无线技术平台:相当于公司代码资源的公共平台吧,解决了轮子去哪找,谁来维护这些坑。
总而言之,如果团队规模很大,这些平台的建设是必须要走的路,大厂考虑安全问题往往要投入大量精力去自己研发。小团队小公司的话有一大推现成的可以用。
令我震惊的是携程光移动端的开发团队就有一千号人,查了一下,也就几款 App,体验在一线厂商中也算稀烂,总觉得发力错了方向啊……
腾讯的代码混淆与安全攻防
看名字本来以为会比较水,结果是最硬核的演讲了,涉及到很多算法的细节,emmmmmm……所以我基本没听懂。
简单总结就是:
- 黑产有规模有组织有技术,所以 App 安全要求很高
- 基于代码文本的混淆太 low 了,破解没难度
- 混淆安全性:汇编>字节码>代码,总之越底层越安全
- 混淆有很多技巧,拆分、拉长、分散等等等等。
- 做混淆,需要对编译器系统有很深刻的理解。大部分的混淆都是对 llvm 编译周期的IR做的。
腾讯做的是编译器级别的混淆,也就是说不需要对代码做任何处理,编译完成后出来的就是混淆后的 App 包了。
被大佬这么一讲,就觉得我们的还是在裸奔状态,不过也没有余力去研究这么深啦。
阿里的基于 Flutter 和 Dart 的全栈开发
阿里在咸鱼 App 试水 Flutter 做吃螃蟹的大厂,还是很有创新勇气的,不过大厂就是大厂,google 那边亲自派人来对接指导接受反馈,爸爸级待遇。小团队要是尝试没有成熟的 Flutter 踩了坑只能自己哭了。
总之就是夸了下 Flutter 的性能不错,体验也不错,应用过程也是经历了一系列的迭代,慢慢将原生替换为Flutter。
也有踩坑,解决了一些问题:
- 工程管理和混合栈管理
- 外接纹理播放视频
- 图片缓存优化
- 无反射JSON序列化
- 私有PUB库、阿里⽣态适配
最后将 Flutter 框架导致的闪退率降到了 0.01%,很厉害了。羡慕大团队有精力去扣这种细节。
然后介绍了一个三端开发的新模式:震惊!App 程序员竟然可以自己开发服务端接口!
总而言之,就是接入网关使用 Dart Server,平台那边提供了一个胶水层服务,然后 App 程序员就可以在一个技术栈内同时开发前端和服务接口了,目前闲⻥详情页所有流量由 Dart Server 服务的,所以性能是满足需求的。
这样做的好处是能优化开发体验,部署方便,可以本地无冲突的调试,而且避免了前端和后端相互甩锅,后端同学的那句”你行你上啊“,终于成真了。
个人感觉会是未来发展的一个小趋势,服务器端接口本身也是业务的一部分,让调用端按照自己的需求开发很合理;而后台同学,则专注于提供平台级服务。
爱奇艺的界面动态化方案和美团的动态化方案
最后两个主题演讲居然撞车了,都是介绍了各自的动态化方案,那就是谁丑谁尴尬了。
所谓动态化方案:
- 后端提供一个平台给运营方使用
- 运营配置到页面的组件布局,要展示的内容
- 这些内容组成一个描述文件
- 通过下发平台下发给 app
- app 根据描述文件渲染出页面
这样就做到页面配置的动态化啦。
其实仔细想想,这不就是一个 App 级别的浏览器渲染框架嘛,或者就是运营内容级别的 React Native。
最后感觉美团好像略微专业点,也有可能是讲师形象的问题,美团的讲师虽然照片很嘚,但真人挺帅,身材不错,爱奇艺那位感觉像是买假药的,讲出来的东西就没那么有说服力了。
总之,动态化一直是移动端的一个痛点,大家也还在探索最好的解决方案了。
最后
总结一下:
- 移动端开发的低门槛时代过去了,对开发人员的要求高了很多。
- 技术发展从快速更新百花齐放过渡到了相对稳定的阶段,一些范式,解决方案在业内达成共识。
- 目前的跨平台方案没有一个可以达到支持复杂客户端建设标准的。
- 动态性是目前移动端的最大痛点,特别是体量大的大厂,大家都在做自己的解决方案。
- 多团队,跨部门的开发效率低下是被关注和正在解决的问题。
- 前端一体化,后台去业务,平台化是最近的一个小热点。
- 人工智能,机器学习在移动端落地也算是个热点
个人觉得目前国内移动开发的品味不足,大家都在推进一些技术上,运营上的变革,但是 app 的交互、审美、品味仍然停留在几年前,创新的交互和设计是移动端产品在现阶段能脱颖而出的重要因素。好的公司产品设计地位一定要比开发高,开发主导的公司产品体验真的是一言难尽(再次点名批评携程)。