- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
43-剖析使App具有动态化和热更新能力的方案
你好,我是今天,我来和你聊聊iOS开发中的动态化和热更新方案。
热更新能力的初衷是,能够及时修复线上问题,减少Bug对用户的。而动态化的目的,除了修复线上问题
外,还要能够灵活更新App版本。
要实现动态化,就需要具备在运行时动态执行程序的能力。同时,实现了动态化,也就具备了热更新能力。
通常情况下,实现动态化的方案有三种,分别是JavaScriptCore解释器方案、代码转译方案、自建解释器方
案。接下来,我就和你详细说说这三种方案。
JavaScriptCore解释器方案
iOS系统内置的JavaScriptCore,是能够在App运行过程中解释执行的解释器。
JavaScriptCore了易用的原生语言接口,配合iOS运行时的方法替换能力,出现了使用JavaScript
语言修复线上问题的JSPatch,以及把JavaScriptCore作为前端和原生桥梁的ReactNative和Weex开发框
架。这些库,让App具有了动态化能力。
但是,对于原生开发者来说,只能解释执行JavaScript语言的解释器JSPatch、ReactNative等,我们用起
来不是很顺手,还是更用原生语言来开发。那么,有没有办法能够解决语言栈的问题呢?
代码转译方案
DynamicCocoa方案将Objective-C转换成JavaScript代码,然后下发动态执行。这样一来,原生开发者只
要使用原生语言去开发调试即可,避免了使用JavaScript开发不畅的问题,也就解决了语言栈的问题。
当然,语言之间的转译过程需要解决语言差异的问题,比如Objective-C是强类型,而JavaScript是弱类
型,这两种语言间的差异点就很多。但,好在JavaScriptCore解释执行完后,还会对应到原生代码上,所以
我们只要做好各种情况的规则匹配,就可以解决这个问题。
上,语言转译可以使用现有的成熟工具,比如类C语言的转译,可以使用LLVM套件中Clang的
LibTooling,通过重载HandleTranslationUnit()函数,使用RecursiveASTVistor来遍历AST,获取代码的完
整信息,然后转换成新语言的代码。
在这里,我无法穷尽两种编程语言间的转译,但是如果你想要快速了解转译过程的话,方法就是看一
个实现的雏形。
比如,我以前用Swift写过一个Lisp语言到C语言转译的雏形。你可以点击这个,查看具体的代码。通
过这个代码,你能够了解到完成转译依次需要用到词法分析器、语法分析器、遍历器、转换器和代码生成
器。它们的实现分别对应LispToC里的JTokenizer.swif、JParser.swift、JTraverser.swift、
JTransformer.swift和CodeGenerator.swift。
再比如,你可以查看SwiftRewrite项目的完整转译实现。SwiftRewriter使用Swift开发,可以完成
Objective-C到Swift的转换。
自建解释器方案
可以发现,我面提到的JSPatch、ReactNative等库,到最后能够具有动态性,用的都是系统内置的
JavaScriptCore来解释执行JavaScript语言。
虽然直接使用内置的JavaScriptCore非常方便,但却限制了对性能的优化。比如,系统限制了第App对
JavaScriptCoreJIT(即时编译)的使用。再比如,由于JavaScript使用的是弱类型,而类型推断只能在
LLInt这一层进行,无法得到足够的优化。
再加上JSContext多线程的处理也没有原生多线程处理得高效、频繁的JavaScriptCore和原生间的切换、内
存管理方式不一致带来的风险、线程管理不一致的风险、消息转发时的解析转换效率低下等等,使得
JavaScriptCore作为解释器的方案,始终无法比拟原生。
虽然通过引入前端技术栈和利用转译技术能够满足大部分动态化和热修复的需求,但一些对性能要求高的团
队,还是会考虑使用性能更好的解释器。
如果想要不依赖系统解释器实现动态化和热修复,我们可以集成一个新的解释器,毕竟解释器也是用代码写
您可能关注的文档
- 高温加速度传感器安装与故障排除指南.pdf
- 初中地理教学设计:地图应用与新型地图发展.pdf
- 企业内训师培养与团队建设体系优化.pdf
- 调节阀维护操作.pdf
- 科幻佳作背后时代反思与音乐产业隐喻.pdf
- 高三一轮学案历史(统编版)板块四第十四单元第58讲社会主义国家和新兴国家的发展与变化.docx
- 新课标人教高中英语选修八教师用书UnitUsingLanguage教案.docx
- 动量课件-高二上学期物理人教版选择性_2.pptx
- 高二英语(人教版)学案选择性必修二UNIT4SectionⅣUsingLanguage新知学习一课过.docx
- Unit4NaturaldisastersReadingforWriting课件-高中英语人教版(1).pptx
最近下载
- 埋弧焊用氟碱型烧结焊剂征求意见稿.pdf
- 医疗器械独立软件(符合ISO 13485、MDR、FDA 21 CFR Part 820)软件风险管理控制程序2025年.docx
- 2022海上风电施工新技术.docx VIP
- 固碱工艺_教程.ppt VIP
- 九年级语文多文本阅读技巧 教学课件.pptx VIP
- 人教版三年级音乐上册:《森林水车》教案2[精品].doc VIP
- 浪潮 InCloud OpenStack 解决方案.pdf VIP
- 《肺结核患者的护理》课件.ppt VIP
- 常见临床研究设计要点及统计方法题库及答案-2025年华医网继续教育.docx VIP
- 食材配送操作规范流程明细.docx VIP
原创力文档


文档评论(0)