注册 / 登录

搜狗输入法iOS平台动态化能力演进之路

分会场:  爆款架构/数据平台/工程实践

 

案例来源 :

案例讲师

李贝

搜狗 输入法技术总监

12年互联网从业经验,2006年加入搜狗输入法团队,伴随搜狗输入法第一个版本成长至今。曾任职研发、产品等岗位。现任搜狗输入法技术总监,负责搜狗输入法的架构设计,技术团队管理。

扫描二维码分享案例

 

案例简述

 

动态化是每个应用都希望具备的技术能力,在iOS平台因为苹果系统的限制,应用无法通过加载动态库的方式实现热更新。本例讲述了搜狗输入法在动态化道路上的演进过程,提供了一种解决方案,通过支持C/OC使动态化模块开发更高效,实现了对内存使用周期的完全控制,并达到与原生代码接近的执行效率。

 

案例目标

 

分析了基于JSCore实现的动态化在性能、稳定性上的缺陷。提出了前端基于clang扩展,后端自主研发目标程序格式,执行侧基于栈机的动态化执行方案。

 

成功(或教训)要点

 

首先,找到与问题匹配的技术模型。基于LLVM、Clang和栈机体系实现OCPack,这是解决问题的关键


其次,根据实际问题划定解决方案的能力边界。缩减在Clang中需要实现的指令节点集,使投入资源最小化,这是大项目可以快速落地的保证


最后,每个问题解决后,有必要回归分析问题的原因和解决方案的关系,确认是否解决了最本质的问题。OCPack在优化空间性能时,不断探究开销的本源,最终使空间性能优化到极致

 

案例ROI分析

 

完全消除了动态下发JS并执行的情况,避免iOS审核被拒;在执行效率上比JSCore提升1倍;在空间性能上从JSCore的3M内存占用,缩减到小于1K。

 

案例启示

 

找到与问题匹配的技术模型,而不是从头思考自己造轮子,这是决定成败的关键。根据问题划定解决方案的能力边界,把握2/8法则,在解决一个实际问题时,这种思路能大幅缩减投入成本。在性能优化时,回归分析问题的原因和解决方案之间的关系,有助于找到问题的本源并从根本上解决问题。