Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Eleme Report

Eleme Report

halfrost

April 18, 2017
Tweet

More Decks by halfrost

Other Decks in Programming

Transcript

  1. 述 职 报 告
    汇报人:于德志
    指导人:韦忠丹

    View full-size slide

  2. 时光飞驰,我自年后2月13日入职饿了么公司,转
    眼间已愉快地度过了2个月。2个月的工作实践,使我收
    获了很多,也使我体会到了各位领导和同事们的关心,
    体会到了饿了么公司大家庭的温暖。我以积极进取的工
    作热情和踏实勤勉的工作态度,认真履职,大胆负责,
    较好地完成了领导交办的工作任务。
    入职以来,我努力实践着自己的诺言,力争做到更
    高、更强、更优。下面,我就将近2个月的工作情况向各
    位领导与同事作个简要汇报,以接受大家评议。
    前 言
    入职饿了么

    View full-size slide

  3. 工作小结 内部分享 所学知识 工作规划和展望
    目 录
    CATALOG

    View full-size slide

  4. 1 工作小结

    View full-size slide

  5. 负责组件化路由的维护
    维护MVVM框架
    Weex 踩坑研究
    查找并修复项目中隐藏的内存问题
    1
    2
    3
    4
    iOS开发
    工作内容

    View full-size slide

  6. 95%
    75%
    100%
    90%
    1
    2
    3
    4
    MVVM框架维护
    目前该框架基本无bug
    Weex踩坑研究
    Native端还差JSFramework的源码
    没有研究透彻
    修复隐藏的内存问题
    3个app都修复完毕
    组件化路由的维护
    团队版等待接入新的路由
    工作完成情况

    View full-size slide

  7. 1. URL Scheme
    2. Universal Links
    Target-Action方案
    Protocol-Class注册方案
    URLRoute注册方案
    APP间跳转
    APP内部路由
    APP内部路由
    APP内部路由
    组件化路由

    View full-size slide

  8. 1
    URLRoute
    2 3
    Protocol-Class Target-Action
    1. JLRoutes Star 3189
    2. Routable-iOS Star 1419
    3. ABRouter
    4. HHRouter Star 1277
    5. MGJRouter Star 633
    6. lpd-modular-kit
    7. LPDMvvmRouterKit
    8. Excalibur
    1. MGJRouter Star 633 1. CTMediator
    App间的路由

    View full-size slide

  9. 统一请求资源的方式
    不管是H5,RN,Weex,iOS界面或者组件请求
    资源的方式就都统一了,都通过URL来请求资源。
    服务器可动态控制页面跳转
    服务器通过动态下发URL可以达到客户端一部分的
    动态性。
    统一页面出错后的错误处理方法
    URL拦截错误以后可以做统一的处理
    URLRoute注册方案

    View full-size slide

  10. 影响App启动速度
    由于需要在load方法里面注册map
    规则,所以会影响启动速度。
    大量的硬编码和短链接
    硬编码和短链接不方
    便维护和修改。
    不能传递对象
    URL不方便传递对象。
    缺点
    URLRoute注册方案

    View full-size slide

  11. 没有硬编码
    这个是相当于URLRoute的优点。
    利用POP思想
    编写代码更加优雅。
    可以传递对象
    这个是相当于URLRoute的优点。
    Protocol-Class注册方案
    优点

    View full-size slide

  12. 影响App启动速度
    由于需要在load方法里面注册每个
    Protocol,所以会影响启动速度。
    需要依赖ModuleManger
    和Component
    依旧需要依赖2个对象。
    没有统一处理错误
    由于Protocol是分散在各处的,所以
    没有针对错误有统一的处理。
    Protocol-Class注册方案

    View full-size slide

  13. 无须注册
    利用Runtime特性,省去了注册这一步。
    只依赖Mediator
    所有页面都只依赖Mediator这一层。
    统一页面出错后的错误处理方法
    URL拦截错误以后可以做统一的处理
    Target-Action注册方案

    View full-size slide

  14. 硬编码
    在Category中将参数打包成字典,
    Target中再拆开,依旧存在硬编码
    Target-Action注册方案

    View full-size slide

  15. URL
    Protocol
    Hook
    LPDMediatorRouter
    URL的方式主要用来跳转页
    面,以及来自App外部的跳
    转。
    支持Hook路由
    这 里 可 以 用 Protocol 传 递
    model对象。也可以调用组
    件的方法。

    View full-size slide

  16. 02
    01
    03
    04
    05
    06
    URL统一配置
    可以利用宏,统一管理各个短链接,达到统一管
    理的目的。
    取消URL注册
    可以动态的取消某个URL的注册。
    URL可支持中文
    URL可以支持中文的匹配。
    URL匹配
    (1)、可以支持URL的query string的参数匹配
    (2)、可以支持传入字典的参数匹配。
    可以直接获取对象
    可以通过URL匹配直接获取到对象。
    URL降级
    可以设置一个降级的URL,当所有的规则都失
    效的时候,就会降级匹配降级的URL。
    LPDMediatorRouter的URL匹配

    View full-size slide

  17. LPDMediatorRouter

    View full-size slide

  18. MVVM框架维护

    View full-size slide

  19. MVVM框架维护
    MVVM优点
    解耦并不是MVVM的本质,提高代码复用率和
    UI组件级的单元测试才是本质。
    ReactiveCocoa仅仅只是工具
    RAC在MVVM中仅仅只起到了绑定的作用,
    RAC的作用远不在于绑定,它的FRP的思想才
    是精髓。
    Cocoa下需要约束
    在Cocoa框架下实践MVVM需要约束。否则很
    容易又写回MVC。
    跳转逻辑应写在VM里
    VM里面都是业务逻辑,跳转也属于业务逻辑,
    所以应该写在VM里。
    MVVM的理解

    View full-size slide

  20. 发布新版,更新率到60%,
    Android需要2周,iOS需要1周,
    Weex/H5 1分钟
    新版更新速度
    可以随时在服务器动态部署替换原
    有界面。
    动态化
    相比H5,在Android和iOS的流畅
    性显著提升。
    在Android低端机型帧率提升37%
    (40->55FPS)
    相比H5,体验提升
    Android,iOS,H5->Weex,节
    约50%开发人力。
    节约开发人力
    Weex的一些优点
    Weex踩坑研究

    View full-size slide

  21. 关于Weex
    由于是要在现有工程内接入Weex,所以需要一些
    技术调研工作。
    Weex打包 Weex调试 Weex原理
    Weex配置
    Weex踩坑研究

    View full-size slide

  22. Weex踩坑研究

    View full-size slide

  23. Weex踩坑研究

    View full-size slide

  24. Weex踩坑研究

    View full-size slide

  25. Weex踩坑研究

    View full-size slide

  26. Weex踩坑研究

    View full-size slide

  27. Weex踩坑研究

    View full-size slide

  28. Weex踩坑研究

    View full-size slide

  29. Weex踩坑研究

    View full-size slide

  30. Weex踩坑研究

    View full-size slide

  31. Weex踩坑研究

    View full-size slide

  32. 关于instruments的Leaks
    Leaked memory
    Cached memory
    Abandoned memory
    ●MRC下内存泄露一般都是Leaked memory
    ●ARC下内存泄露一般都是Abandoned memory
    ●Leaks 只检测Leaked memory
    修复隐藏的内存问题

    View full-size slide

  33. 关于instruments的Allocations
    Leaked memory
    Cached memory
    Abandoned memory
    ●Allocations 用来检测Abandoned memory
    ●需要反复push/pop,比对快照内存是否增长,繁琐!
    ●无法及时得知泄露,需要一个个页面去操作,麻烦!
    修复隐藏的内存问题

    View full-size slide

  34. 01
    02
    03
    04
    MLeaksFinder
    完全无侵入
    使用简单,不侵入业务逻辑代码,不用打开
    Instrument
    全自动检测
    只需开发你的业务逻辑,在你运行调试时就能
    帮你检测
    及时发现
    内存泄露发现及时,更改完代码后一运行即能
    发现(这点很重要,你马上就能意识到哪里写
    错了)
    能准确地告诉你哪个对象没被释放
    发现精准
    使用MLeaksFinder

    View full-size slide

  35. OBJECT
    AOP
    willDealloc
    使用MLeaksFinder
    默认只检测UIViewController和UIView
    为UIViewController和UIView添加willDealloc方法。每
    3s调用一次断言的方法,如果没有被销毁就会触发断言。
    Hook pop / dismiss方法

    View full-size slide

  36. FBRetainCycleDetector检测循环引用
    circle
    查找循环引用的过程就是在
    整个有向图中查找环的过程。
    图论DFS解决此问题。

    View full-size slide

  37. FBObjectiveCObject获取强引用
    FBGetClassReferences 从类中获取它指向的所有引用,无论是
    强引用或者是弱引用
    FBGetLayoutAsIndexesForDescription 从 类 的 变 量 布 局 Ivar
    Layout中获取强引用的位置信息
    NSPredicate 过滤数组中的弱引用,剩下的即为强引用
    1
    2
    3

    View full-size slide

  38. 2 内部分享

    View full-size slide

  39. 内部技术分享
    01
    OPTION
    02
    OPTION
    03
    OPTION
    内部分享

    View full-size slide

  40. 面试
    组内招人面试,面试别人的
    同时也是一种技术交流。
    与队友讨论
    与队友一起讨论开发中遇到
    的问题和坑。
    参加T沙龙
    参加线下T沙龙和沪江英语
    合办的iOS技术分享会
    其他技术交流

    View full-size slide

  41. 所学知识
    3

    View full-size slide

  42. 04技术交流
    在网上和各种大神交
    流技术。
    02看源码
    为了研究路由的实现,看完了所有
    路由开源的代码,以及阿里的模块
    化解耦方法,Beehive,学到了注
    解的用法。
    01JS基础
    学习一些简单的JS语法
    基础,目的为了看懂
    Weex源码。
    03写博客
    将所学的知识系统化的
    总结成文章分享出来
    自主学习情况
    自主学习情况

    View full-size slide

  43. 2月25日
    《iOS 组件化 —— 路由设计思路分析》
    3月5日
    3月18日
    4月2日
    《Weex 是如何在 iOS 客户端上跑起来的》
    《BeeHive —— 一个优雅但还在完善中的解耦框架》 《由FlexBox算法强力驱动的Weex布局引擎》
    5篇博客
    4月15日
    《 Weex 事件传递的那些事儿》

    View full-size slide

  44. 团队
    精神
    责任感
    相互
    学习
    心得
    团队组员之间遇到了问题,如果有时间,一定帮忙一起解决。一些看似简单的问题
    背后,也许隐藏了一些大坑,帮队友解决问题的同时也是一起学习的过程,可以从
    别人的思维中学到新的东西。双方讨论的过程是一个双赢的过程。
    工作之中,我深深地体会到团队合作的重要,我们就如螺丝钉,任何一个
    掉队都有可能导致机器瘫痪,只有我们协同合作,才能实现我们的共同价
    值,并且发挥出更大的作用。
    在工作中我也深深体会到责任的重大,我们要做一个勇于承担责任的人。
    工作中我们都会维护Pod,相互app之间Pod也会共用,每个人都负责好
    自己的模块,不坑队友。
    工作心得

    View full-size slide

  45. 4 工作规划和展望

    View full-size slide

  46. 01
    02
    03
    04
    Swift
    POP
    面向协议的思想
    Genericity
    Swift里面强大的泛型
    Operator
    重载运算符
    学习一下Swift里面的FRP
    RxSwift
    接触Swift

    View full-size slide

  47. Weex
    Flux / Redux
    Vue-Router
    Webpack
    Vue / Vuex
    Javascript
    深挖Weex

    View full-size slide

  48. 团队协作
    自我驱动
    客户中心
    品质为王
    诚信创新
    我愿意以创新科技打造全球领先的本地生活平台为愿景,以美好生活,触手可
    得为使命,与小伙伴们一起拼。在此我提出转正申请,希望自己能成为公司的正式
    员工,恳请领导予以批准。
    结束语

    View full-size slide

  49. 致 谢
    首先要感谢丹哥。虽然丹哥对待工作庄重严肃,一丝不苟,对待工程品质力求精致完美,
    但是生活上和蔼可亲、待人宽厚、爱开玩笑、关心下属。
    同时也要感谢部门各位同仁。谢谢大家平时对我的关照。我们是一个非常和谐的团队,团
    结,互助。我们为了同一个目标,追求相似的理想,用我们强大的内心,一起努力,一起奋斗,
    并肩作战。

    View full-size slide

  50. 汇报完毕诚请指导
    THE END

    View full-size slide