Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Eleme Report
Search
halfrost
April 18, 2017
Programming
1
340
Eleme Report
halfrost
April 18, 2017
Tweet
Share
More Decks by halfrost
See All by halfrost
Segment Tree Basics
halfrost
0
880
Redis multi-data center two-way synchronization
halfrost
0
510
Redis design ideas and usage specifications
halfrost
0
380
Golang message streaming practice in Eleme
halfrost
0
370
SQL practical optimization
halfrost
0
360
Fundamentals of Cryptography
halfrost
0
280
The practice of spatial index in geographic service
halfrost
0
360
Getting started with Machine Learning
halfrost
0
260
Functional Reactive Programming
halfrost
0
290
Other Decks in Programming
See All in Programming
RWC 2024 DICOM & ISO/IEC 2022
m_seki
0
200
急成長期の品質とスピードを両立するフロントエンド技術基盤
soarteclab
0
920
コンテナをたくさん詰め込んだシステムとランタイムの変化
makihiro
1
120
短期間での新規プロダクト開発における「コスパの良い」Goのテスト戦略」 / kamakura.go
n3xem
2
160
Full stack testing :: basic to basic
up1
1
930
Scalaから始めるOpenFeature入門 / Scalaわいわい勉強会 #4
arthur1
1
300
42 best practices for Symfony, a decade later
tucksaun
1
180
テストコード文化を0から作り、変化し続けた組織
kazatohiei
2
1.5k
暇に任せてProxmoxコンソール 作ってみました
karugamo
1
710
rails statsで大解剖 🔍 “B/43流” のRailsの育て方を歴史とともに振り返ります
shoheimitani
2
930
Security_for_introducing_eBPF
kentatada
0
110
Recoilを剥がしている話
kirik
5
6.6k
Featured
See All Featured
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
127
18k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
Scaling GitHub
holman
458
140k
Writing Fast Ruby
sferik
628
61k
Code Reviewing Like a Champion
maltzj
520
39k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
48
2.2k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
Bash Introduction
62gerente
608
210k
Typedesign – Prime Four
hannesfritz
40
2.4k
Reflections from 52 weeks, 52 projects
jeffersonlam
347
20k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.2k
Transcript
述 职 报 告 汇报人:于德志 指导人:韦忠丹
时光飞驰,我自年后2月13日入职饿了么公司,转 眼间已愉快地度过了2个月。2个月的工作实践,使我收 获了很多,也使我体会到了各位领导和同事们的关心, 体会到了饿了么公司大家庭的温暖。我以积极进取的工 作热情和踏实勤勉的工作态度,认真履职,大胆负责, 较好地完成了领导交办的工作任务。 入职以来,我努力实践着自己的诺言,力争做到更 高、更强、更优。下面,我就将近2个月的工作情况向各 位领导与同事作个简要汇报,以接受大家评议。 前
言 入职饿了么
工作小结 内部分享 所学知识 工作规划和展望 目 录 CATALOG
1 工作小结
负责组件化路由的维护 维护MVVM框架 Weex 踩坑研究 查找并修复项目中隐藏的内存问题 1 2 3 4 iOS开发
工作内容
95% 75% 100% 90% 1 2 3 4 MVVM框架维护 目前该框架基本无bug
Weex踩坑研究 Native端还差JSFramework的源码 没有研究透彻 修复隐藏的内存问题 3个app都修复完毕 组件化路由的维护 团队版等待接入新的路由 工作完成情况
1. URL Scheme 2. Universal Links Target-Action方案 Protocol-Class注册方案 URLRoute注册方案 APP间跳转
APP内部路由 APP内部路由 APP内部路由 组件化路由
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间的路由
统一请求资源的方式 不管是H5,RN,Weex,iOS界面或者组件请求 资源的方式就都统一了,都通过URL来请求资源。 服务器可动态控制页面跳转 服务器通过动态下发URL可以达到客户端一部分的 动态性。 统一页面出错后的错误处理方法 URL拦截错误以后可以做统一的处理 URLRoute注册方案
影响App启动速度 由于需要在load方法里面注册map 规则,所以会影响启动速度。 大量的硬编码和短链接 硬编码和短链接不方 便维护和修改。 不能传递对象 URL不方便传递对象。 缺点 URLRoute注册方案
没有硬编码 这个是相当于URLRoute的优点。 利用POP思想 编写代码更加优雅。 可以传递对象 这个是相当于URLRoute的优点。 Protocol-Class注册方案 优点
影响App启动速度 由于需要在load方法里面注册每个 Protocol,所以会影响启动速度。 需要依赖ModuleManger 和Component 依旧需要依赖2个对象。 没有统一处理错误 由于Protocol是分散在各处的,所以 没有针对错误有统一的处理。 Protocol-Class注册方案
无须注册 利用Runtime特性,省去了注册这一步。 只依赖Mediator 所有页面都只依赖Mediator这一层。 统一页面出错后的错误处理方法 URL拦截错误以后可以做统一的处理 Target-Action注册方案
硬编码 在Category中将参数打包成字典, Target中再拆开,依旧存在硬编码 Target-Action注册方案
URL Protocol Hook LPDMediatorRouter URL的方式主要用来跳转页 面,以及来自App外部的跳 转。 支持Hook路由 这 里
可 以 用 Protocol 传 递 model对象。也可以调用组 件的方法。
02 01 03 04 05 06 URL统一配置 可以利用宏,统一管理各个短链接,达到统一管 理的目的。 取消URL注册
可以动态的取消某个URL的注册。 URL可支持中文 URL可以支持中文的匹配。 URL匹配 (1)、可以支持URL的query string的参数匹配 (2)、可以支持传入字典的参数匹配。 可以直接获取对象 可以通过URL匹配直接获取到对象。 URL降级 可以设置一个降级的URL,当所有的规则都失 效的时候,就会降级匹配降级的URL。 LPDMediatorRouter的URL匹配
LPDMediatorRouter
MVVM框架维护
MVVM框架维护 MVVM优点 解耦并不是MVVM的本质,提高代码复用率和 UI组件级的单元测试才是本质。 ReactiveCocoa仅仅只是工具 RAC在MVVM中仅仅只起到了绑定的作用, RAC的作用远不在于绑定,它的FRP的思想才 是精髓。 Cocoa下需要约束 在Cocoa框架下实践MVVM需要约束。否则很
容易又写回MVC。 跳转逻辑应写在VM里 VM里面都是业务逻辑,跳转也属于业务逻辑, 所以应该写在VM里。 MVVM的理解
发布新版,更新率到60%, Android需要2周,iOS需要1周, Weex/H5 1分钟 新版更新速度 可以随时在服务器动态部署替换原 有界面。 动态化 相比H5,在Android和iOS的流畅 性显著提升。
在Android低端机型帧率提升37% (40->55FPS) 相比H5,体验提升 Android,iOS,H5->Weex,节 约50%开发人力。 节约开发人力 Weex的一些优点 Weex踩坑研究
关于Weex 由于是要在现有工程内接入Weex,所以需要一些 技术调研工作。 Weex打包 Weex调试 Weex原理 Weex配置 Weex踩坑研究
Weex踩坑研究
Weex踩坑研究
Weex踩坑研究
Weex踩坑研究
Weex踩坑研究
Weex踩坑研究
Weex踩坑研究
Weex踩坑研究
Weex踩坑研究
Weex踩坑研究
关于instruments的Leaks Leaked memory Cached memory Abandoned memory •MRC下内存泄露一般都是Leaked memory •ARC下内存泄露一般都是Abandoned
memory •Leaks 只检测Leaked memory 修复隐藏的内存问题
关于instruments的Allocations Leaked memory Cached memory Abandoned memory •Allocations 用来检测Abandoned memory
•需要反复push/pop,比对快照内存是否增长,繁琐! •无法及时得知泄露,需要一个个页面去操作,麻烦! 修复隐藏的内存问题
01 02 03 04 MLeaksFinder 完全无侵入 使用简单,不侵入业务逻辑代码,不用打开 Instrument 全自动检测 只需开发你的业务逻辑,在你运行调试时就能
帮你检测 及时发现 内存泄露发现及时,更改完代码后一运行即能 发现(这点很重要,你马上就能意识到哪里写 错了) 能准确地告诉你哪个对象没被释放 发现精准 使用MLeaksFinder
OBJECT AOP willDealloc 使用MLeaksFinder 默认只检测UIViewController和UIView 为UIViewController和UIView添加willDealloc方法。每 3s调用一次断言的方法,如果没有被销毁就会触发断言。 Hook pop /
dismiss方法
FBRetainCycleDetector检测循环引用 circle 查找循环引用的过程就是在 整个有向图中查找环的过程。 图论DFS解决此问题。
FBObjectiveCObject获取强引用 FBGetClassReferences 从类中获取它指向的所有引用,无论是 强引用或者是弱引用 FBGetLayoutAsIndexesForDescription 从 类 的 变 量
布 局 Ivar Layout中获取强引用的位置信息 NSPredicate 过滤数组中的弱引用,剩下的即为强引用 1 2 3
2 内部分享
内部技术分享 01 OPTION 02 OPTION 03 OPTION 内部分享
面试 组内招人面试,面试别人的 同时也是一种技术交流。 与队友讨论 与队友一起讨论开发中遇到 的问题和坑。 参加T沙龙 参加线下T沙龙和沪江英语 合办的iOS技术分享会 其他技术交流
所学知识 3
04技术交流 在网上和各种大神交 流技术。 02看源码 为了研究路由的实现,看完了所有 路由开源的代码,以及阿里的模块 化解耦方法,Beehive,学到了注 解的用法。 01JS基础 学习一些简单的JS语法
基础,目的为了看懂 Weex源码。 03写博客 将所学的知识系统化的 总结成文章分享出来 自主学习情况 自主学习情况
注解
2月25日 《iOS 组件化 —— 路由设计思路分析》 3月5日 3月18日 4月2日 《Weex 是如何在
iOS 客户端上跑起来的》 《BeeHive —— 一个优雅但还在完善中的解耦框架》 《由FlexBox算法强力驱动的Weex布局引擎》 5篇博客 4月15日 《 Weex 事件传递的那些事儿》
团队 精神 责任感 相互 学习 心得 团队组员之间遇到了问题,如果有时间,一定帮忙一起解决。一些看似简单的问题 背后,也许隐藏了一些大坑,帮队友解决问题的同时也是一起学习的过程,可以从 别人的思维中学到新的东西。双方讨论的过程是一个双赢的过程。 工作之中,我深深地体会到团队合作的重要,我们就如螺丝钉,任何一个
掉队都有可能导致机器瘫痪,只有我们协同合作,才能实现我们的共同价 值,并且发挥出更大的作用。 在工作中我也深深体会到责任的重大,我们要做一个勇于承担责任的人。 工作中我们都会维护Pod,相互app之间Pod也会共用,每个人都负责好 自己的模块,不坑队友。 工作心得
4 工作规划和展望
01 02 03 04 Swift POP 面向协议的思想 Genericity Swift里面强大的泛型 Operator
重载运算符 学习一下Swift里面的FRP RxSwift 接触Swift
Weex Flux / Redux Vue-Router Webpack Vue / Vuex Javascript
深挖Weex
团队协作 自我驱动 客户中心 品质为王 诚信创新 我愿意以创新科技打造全球领先的本地生活平台为愿景,以美好生活,触手可 得为使命,与小伙伴们一起拼。在此我提出转正申请,希望自己能成为公司的正式 员工,恳请领导予以批准。 结束语
致 谢 首先要感谢丹哥。虽然丹哥对待工作庄重严肃,一丝不苟,对待工程品质力求精致完美, 但是生活上和蔼可亲、待人宽厚、爱开玩笑、关心下属。 同时也要感谢部门各位同仁。谢谢大家平时对我的关照。我们是一个非常和谐的团队,团 结,互助。我们为了同一个目标,追求相似的理想,用我们强大的内心,一起努力,一起奋斗, 并肩作战。
汇报完毕诚请指导 THE END