Android 工程师眼里的大前端:GMTC 2018 参会总结
本文由
玉刚说写作平台
提供写作赞助原作者:
两位低调的 Android 高手
版权声明:本文版权归微信公众号
玉刚说
所有,未经许可,不得以任何形式转载
概述
2018年的GMTC大会于6月22号在北京刚刚拉下帷幕,GMTC会议是由极客邦科技和InfoQ中国主办的顶级技术盛会,主要涉猎前端、移动端、终端AI等多个技术领域,从16年到目前总共举办了3届,从今年的火爆程度也能看出GMTC全球大前端开发者技术大会算是大前端的最重要的垂直会议之一了。
有幸参加了这届GMTC大会,会议的14个专场基本覆盖了大前端的方方面面,满满的日程对于体力也是消耗非常大,不过也收获颇多,除了能够了解到各大公司面临的技术难题与解决思路,还能了解到当前最前沿的技术热点与未来方向。趁热打铁谈谈个人的一些收获与感想,这次会议的专题包括Android新技术专场、iOS新技术专场、Node专场、Web框架专场、UI与动画、PWA专场、终端AI、工程化、跨平台专场、性能优化与监控等14个专题。由于专题比较多,多个专题都是并行演讲,分身乏术,这里主要聊聊个人比较关心的2个专题。
1)Android新技术专场
2)性能优化与监控专场
Android新技术专场
新技术代表着当前的技术热点与未来方向,作为一个大前端的RD,不得不时刻关注着大前端技术的方向。Android新技术专场主要有三个主题分享,分别是《Android 研发的昨天今天明天》、《当插件化遇上Android P》与《快应用开发与实现指南》。
《Android 研发的昨天、今天、明天》
作者具有丰富的软件研发经验,推动了App组件化、动态部署、热补丁等技术的发展和制定相关的机制,改善了Android设备的体验,包括绿色联盟(Greenify)应用公约、Android6.0-Doze&App Standby/Android7.0-部分限制静态广播注册/Android8.0-全面限制静态广播注册和后台服务等。
首先,作者认为Android发展的昨天是属于一种流量圈地的时代,起初由简单的WebApp的流量入口,到最后大多数都转到NativeApp的入口;因为流量是互联网的基础概念,有了流量,有了用户,才有更加深入的转换,所以说流量是关键的第一步,因此昨天属于抢占流量入口的时代。
其次,作者认为Android发展的今天是流量攻守的时代,随着各大应用功能越来越复杂,规模越来越大,获得了流量的入口,那么就需要攻守兼备,对于攻采用从大型应用到免安装应用的过度,例如像PWA、Google Play Instant、小程序等,对于守采用启动图标+推送的方式,例如Shortcut、Contextual Push、Rich Notification等。
最后,作者认为Android发展的明天是心智渗透的时代,需要针对不同的群体塑造差异化的认知。作者认为将到来的根本性变更是移动互联网的范式转移和移动应用的技术栈跃迁。
总结,作者认为从技术层面简单来说:昨天是从Web到Native,今天是跨平台,明天是跨终端。
《当插件化遇上Android P》
首先,作者介绍了Android P的时间表,今天3月谷歌发布了Android P的预览版,预计今年Q3会发布最终的release版本;Android P中发布了禁令:禁止调用非SDK的接口,各种访问非SDK接口的方式都会产生错误或者其他不希望的后果,如果下表中详细说明了各种访问方式及相应的结果。
针对上述的后果,对于开发者来说是相当糟糕了,幸好在Android P中有三个名单来帮助开发者进行相关工作,具体如下表所示。
其次,作者介绍了实现插件化的黑科技,主要包括Hook App运行时的一些关键点,通过反射将插件的dex加入到BaseDexClassLoader中的pathList中,资源加载这块通过反射调用AssertManager中的addAssertPaths方法加载插件中的资源,如下图所示。
再次,作者介绍了下为什么京东业务要实现插件化,以及他们业务的需求和未来的方向:
作者对插件化、Android App Bundles、组件化和前端进行了对比:
最后,作者针对京东的插件化框架Aura,进行了升级,原来单纯的插件化框架升级后由插件化和组件化共同组成Aura Plus。京东重构后的架构图如下,包括了业务组件和业务插件两部分。
《快应用开发与实现指南》
快应用是九大手机厂商基于硬件平台共同推出的新型应用生态,用户无需下载安装,即点即用,享受原生应用的性能体验。
首先,作者用2段小视频展示了快应用的使用场景和多场景融入的一个示例。快应用与H5均由脚手架生成项目,作者进行了对比和分析,如下图。
项目脚手架的整个工程结构如下图所示。
通过简单的例子展示了静态页面的编写和布局的调整。
其次,作者讲解了下开发过程中的模板渲染、事件响应、整个页面的生命周期、组件化的使用和导入和动画的使用等,通过一段视频展示了快应用开发过程中debug调试的使用方式。以上主要是快应用开发过程中需要掌握的一些基础知识,作者进行了详细的介绍。作者聊了下快应用的整个架构思路,主要包括编译时和运行时两部分,编译时由输入的html+style+script、ux页面等转为json+js、js页面和rpk压缩文件,运行时由编译时的产物生成DOM树、UI页面和最终的应用程序。
快应用编译时的主要架构如下图,可以看到从下层到上层主要包括:hap-toolkit工具->脚手架+编译器+调试器+服务器->模块化+数据模块等->ux页面文件+其他类型文件->手机运行平台:
快应用运行时的主要架构为:
快应用JS层的架构为:
快应用样式计算引擎为:
快应用页面渲染结构为:
最后作者总结了下整个快应用的架构:数据驱动+DOM模型+应用管理。
性能优化与监控专场
尤其是这两年,性能优化与监控方向越来越受到各大公司的重视,从现场的火爆程度也能反应出来,一整个下午的演讲,会场坐满了人,还有不少是直接坐在地上的,讲台边的,甚至门口还有一大波实在是挤不进来了在门外听的。性能优化与监控专场主要有4个主题的分享,对于这4个主题的最终目标是一致的,所用手段不尽相同,但是整体思路差不多,限于篇幅的关系,这里主要分享一下《LinkedIn移动应用的性能优化之道》。
《LinkedIn移动应用的性能优化之道》
首先介绍了为什么要做性能优化,作者的观点是用户第一,接着展示了当前LinkedIn注册用户超5亿,20多个业务线,团队开发人员200多人,代码行数累积400万;然后作者引出性能问题往往是项目规模太大引起的,因此认为合理的架构设计可以将问题化繁为简,要解决好性能问题,首先就需要好的架构设计;如下图所示,项目组件化应该算是任何项目架构变更的必经之路,将不同的模块分离出来,拆成独立的组件,可以独立的运行。
其次,作者介绍了合理的架构下也要有一个针对性能的监控方案,作者认为线上性能监控主要包括:发现问题、分析问题、解决问题和验证效果四大模块。Crash率、业务异常属于一个App是否可用的重要指标;启动时间和包大小作为App的基础性能;页面FPS、页面渲染度是页面流畅性的重要指标;CUP使用率、内存占用情况以及流量消耗等是资源消耗监控的关键点。
下图是监控的地方和监控的链路,作者提到他们会在关键链路中的每个地方都会打点,从网络初始化,到网络握手,到发送第一个字节,接收到第一个字节,以及数据的解析,到UI的展示,都进行了打点计时,为此做了一个专用的网络库。
在数据采集方面,作者也提出一些较好的见解:
1)面向切面编程,尽量避免侵入业务,做到业务层面无感知;
2)数据采集不仅仅是包括性能指标的数据,有时候需要采集发生性能问题的上下文数据,同时需要划分业务线和责任人;
3)数据采集完成后最终都是要上传到服务器上,在上传的过程中,如果速度太快就会对服务器造成太大的压力,而且可能会把主业务的流量淹没掉,太慢又可能对问题不能及时修复,因此在数据上传的过程中需要权衡服务器压力与实效性;
4)由于采集的日志量非常大,我们不可能去分析所有的日志,因此需要对日志做优先级的选择。对实效性要求比较高的数据,例如Crash日志、实时下发的一些自定义事件,希望很快的上传到服务器,不重要的日志先暂存在客户端,最后经过压缩批量上传;
再次,作者展示了领英从数据采集、存储、上报到数据可视化的整个方案。如下图所示:首先是客户端进行数据采集,经过后台提供的数据上传Api接口把数据上传到后台,后台服务把数据写入到Kafka,接着把数据分发到下游的订阅者:Samza实时任务和HDFS,Samza实时任务主要是流式处理,具有较高的实时性;HDFS是每天或者每个小时的一个定时任务处理,主要是对离线数据进行批量操作,处理大量的数据,但是实时性就差一些了;当处理完成之后,会把实时数据和定时数据写到数据库里,通过数据可视化工具,就能看到不同数据对应的表格;最后通过设置数据的性能报警阈值,可以对性能问题进行实时监控。
有了性能日志,那么接下来就是对日志进行分析。首先我们看下是否能够对当前问题进行重现;然后检测当前网络、数据开关等是否正常;最后再通过一些分析工具对当前获取的日志进行分析并定位问题。问题定位到后,就需要对问题进行修复,常用的解决方式主要有:后台服务进行降级处理、客户端发补丁进行热修复、发布新的小版本。问题修复完成后,最后一步就是对刚刚修复的问题进行验证,验证线上是否已经完全进行修复并且不会对其他功能模块产生影响。
最后,作者介绍了下性能优化在LinkedIn中的具体实践;如下图所示,主要包括:
1)网络优化
2)数据简化
3)布局优化
1)网络优化主要是从Mux转为HTTP/2,同时作者也在尝试Google的QUIC;
2)数据优化使用了采用数据精简工具Frontend Deco,删除无用字段,精简数据的模型等;
3)布局优化作者首先分析了下Auto Layout的性能问题,针对布局优化,作者开发了一套LayoutKit框架,通过对比统计要比AotoLayout性能高出很多。LayoutKit的思路主要借鉴于Flexbox,把布局的计算局限于在一个轴上,使布局计算的复杂度能够大大下降,LayoutKit的开源地址:https://github.com/linkedin/LayoutKit。
最后作者进行了一个总结,就不多描述了,附图一张。
总结
GMTC从16年第一届的移动端发展到现在第三届的大前端,知名度也越来越高,专题数也扩大至当前的14个。个人感觉大方向主要有3个:
第一个是端上的深根细作
,比如性能优化与监控等;第二个是端上的跨界融合
,比如端上AI与音视频等的结合;第三个是大前端的一统江湖
,国外从FaceBook推出的RN到现在Google发布的Flutter,国内从微信的小程序到现在的九大厂商联合推出的快应用,国内外厂商在大前端一统的路上百花齐放,充分说明未来一定是前端、Android与iOS大统一的趋势。
以上内容仅代表个人观点,有什么问题欢迎探讨指正。
Android 工程师眼里的大前端:GMTC 2018 参会总结的更多相关文章
- 006_饿了么大前端总监sofish帮你理清前端工程师及大前端团队的成长问题!
作者|Sofish编辑|小智 & 尾尾本文是前端之巅向 sofish 的约稿<什么样的人可以称为架构师?>.采访< 饿了么大前端团队究竟是如何落地和管理的?>以及 so ...
- [web建站] 极客WEB大前端专家级开发工程师培训视频教程
极客WEB大前端专家级开发工程师培训视频教程 教程下载地址: http://www.fu83.cn/thread-355-1-1.html 课程目录:1.走进前端工程师的世界HTML51.HTML5 ...
- 一统江湖的大前端(7)React.js-从开发者到工程师
目录 一. 前端打怪升级指南 1.1 我应该从哪个框架开始学? 1.2 一次转职 1.3 二次转职 1.4 转职-其他 二. 为什么你应该学习React 2.1 技术栈的延伸 2.2 组件化开发 2. ...
- 2018年末--积极拥抱h5.转载 大前端时代来临,我们何去何从?
1.大前端时代是什么? 大前端时代是WEB统一的时代,利用html5或者6甚至7,不但可以开发传统的网站,做炫酷的网页动态效果,更可以采用BS架构应用程序.开发手机端web应用.移动端Native应用 ...
- 写给想成为前端工程师的同学们 ―前端工程师是做什么的?a
前端工程师是做什么的? 前端工程师是互联网时代软件产品研发中不可缺少的一种专业研发角色.从狭义上讲,前端工程师使用 HTML.CSS.JavaScript 等专业技能和工具将产品UI设计稿实现成网站产 ...
- Android 工程师
转发:https://zhuanlan.zhihu.com/p/30429725 这句话我真的憋了好久.Android 工程师只要关注我,我就能让你达到大师级水平,不是面试时的吹牛逼水平,不是自我欺骗 ...
- 2019年一半已过,这些大前端技术你都GET了吗?- 上篇
一晃眼2019年已过大半,年初信誓旦旦要学习新技能的小伙伴们立的flag都完成的怎样了?2019年对于大前端技术领域而言变化不算太大,目前三大技术框架日趋成熟,短期内不大可能出现颠覆性的前端框架(内心 ...
- #w30 2019年大前端技术周刊
本周是2019年第30周 会议 2019年ArchSummit全球架构师峰会 2019年7月在深圳举行了ArchSummit全球架构师峰会,里面有不少关于大前端的主题可以关注. 从0到1,移动政务应用 ...
- 【一统江湖的大前端(9)】TensorFlow.js 开箱即用的深度学习工具
示例代码托管在:http://www.github.com/dashnowords/blogs 博客园地址:<大史住在大前端>原创博文目录 目录 一. 上手TensorFlow.js 二. ...
随机推荐
- ECMAScript 6,es6 get和set的区别
前言:ECMAScript 6是什么 一个常见的问题是,ECMAScript 和 JavaScript 到底是什么关系? 要讲清楚这个问题,需要回顾历史.1996 年 11 月,JavaScript ...
- Linux网络安全篇,进入SELinux的世界(四)
SELinux的策略与规则管理set 1.安装SELInux工具 yum install setools-console 2.基本的命令 seinfo [-Atrub] -A ===> 列出SE ...
- javascript入门 之 zTree(十四 增删查改)(一)
<!DOCTYPE html> <HTML> <HEAD> <TITLE> ZTREE DEMO - beforeEditName / beforeRe ...
- Linux网络篇,ssh原理及应用
一.对称加密与非对称加密 对称加密: 加密和解密的秘钥使用的是同一个. 非对称加密: 非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥:简称公钥和私钥 对称加密 对称加密的密 ...
- DevEco Toolkit使用指南--平行视界
高效开发和创新业务是开发者一直追求的目标,当接到开发需求时,如果可以找到现成的API调用,能为开发者节省大把时间,将会留有更多的时间进行业务的创新.华为DevEcoToolkit聚合了华为丰富的开 ...
- jvm入门及理解(三)——运行时数据区(程序计数器+本地方法栈)
一.内存与线程 内存: 内存是非常重要的系统资源,是硬盘和cpu的中间仓库及桥梁,承载着操作系统和应用程序的实时运行.JVM内存布局规定了JAVA在运行过程中内存申请.分配.管理的策略,保证了JVM的 ...
- vue项目中使用bpmn-流程图预览篇
前情提要 上文已经实现了节点操作的前进.后退.导入.导出等操作,今日来实现“流程图预览”,以及视图的放大缩小 前提:项目安装过bpmn,安装可见上篇文章 实现要点 bpmn提供了两个神器:Modele ...
- scrapy版本爬取某网站,加入了ua池,ip池,不限速不封号,100个线程爬崩网站
目录 scrapy版本爬取妹子图 关键所在下载图片 前期准备 代理ip池 UserAgent池 middlewares中间件(破解反爬) settings配置 正题 爬虫 保存下载图片 scrapy版 ...
- 使用SVG内置API计算图形或点经过transform之后的新坐标
一个应用场景是,点击一条路径,显示该路径的控制点.因为有transform变形( 平移.缩放.倾斜.旋转等变换),所以获取变形后的新坐标需要计算. 纯数学的方法,就是用2D变换矩阵的一些公式去运算,过 ...
- 基于Python的Webservice开发(四)-泛微OA的SOAP接口
一.功能需求 泛微e-cology可以在流程中调用Webservice接口实现与其他系统的联动等复杂功能.但是目前泛微文档中仅提供了调用的方法,但是没有关于接口的相关开发信息. 本次案例是用Pytho ...