vianvio / FE-Companions

山虽高,我心已决要攀登, 路再难,绊不住我的脚跟; 因为我看到生命之路就在这里。 -- 《天路历程》
447 stars 34 forks source link

20200620 - 张杨 #74

Open vianvio opened 4 years ago

vianvio commented 4 years ago

问题列表:

  1. 对比ios与前端包管理体系,对比一下两边各自的优缺点,并谈谈你的理想型是什么样的
  2. webview路由与rn路由如何无缝串联?webview池管控多个webview时如何串联?
  3. rn做动画效果如何优化,框架底层优化了什么?
YouthZhangCode commented 4 years ago

1.对比ios与前端包管理体系,对比一下两边各自的优缺点,并谈谈你的理想型是什么样的 iOS 优点: 1、加载速度快。 2、实现规范统一,基于平台语言本身。 3、打包简单,代码反编译难度大,安全性高。 缺点: 1、包管理工具上手麻烦;添加依赖复杂,需要配置头文件,引入.a库。 2、不能按需加载。 前端 优点: 1、包管理工具上手简单;添加依赖简单。 2、可以实现按需加载。 缺点: 1、加载速度慢。 2、实现规范多样化,有AMD,CMD,UMD,CommonJS,ES6规范等。 3、打包配置项较多,不熟练的情况下可能出现源码泄漏风险,安全性较低。 理想型: RN原生+JS的打包方式,在一定程度上解决了原生不能热更新,无法按需加载和前端代码安全的问题。 ES6规范解决了前端规范多样化的问题。

2.webview路由与rn路由如何无缝串联?webview池管控多个webview时如何串联? webview路由与rn路由串联: 使用高阶组件统一两端push,pop的方法。通过正则匹配要跳转的页面是h5或rn页面。 1、rn页面跳转h5页面,使用rn方法push进webview,将路由补全为url加载h5 2、h5页面跳转rn页面,使用h5与rn交互的方法调用window.postMessage,把目标路由作为参数 传递给rn,由webview跳转到相应原生页面。 多个webview时串联: 1、rn页面跳转h5页面,提前准备好各个host的webview,h5路由需要再增加一个host的参数,rn根据host弹出相应webview,再在webview中调用rn与h5交互的方法,push进入相应页面。 2、h5页面跳转rn页面,逻辑不变。

3.rn做动画效果如何优化,框架底层优化了什么? rn动画的优化方案: 1、启动原生动画驱动 useNativeDirver: true 利用原生代码在 UI 线程执行动画,即便 JS 线程被卡主,也不会影响到动画 2、shouldComponentUpdate 减少不必要的更新 3、使用 InteractionManager.runAfterInteractions,将耗时较长的工作安排到所有交互或动画完成以后再进行。 框架底层的优化: 通过封装一个Animated的元素; - 内部通过数据绑定和DOM操作变更元素; 结合React的生命周期完善内存管理,解决条件竞争问题; 对外表现则与原生组件相同,实现了高效流畅的动画效果。