这是我参与「第五届青训营 」笔记创作活动的第9天。
前言
本节课程内容会分为以下几个方面:
- 跨端是什么,给大家介绍跨端产生的背景及解决的问题
- 跨端技术方案介绍,给大家介绍目前主流的跨端技术方案(hybrid 方案/原生渲染方案/自渲染方案/小程序方案)以及对比
- 基于小程序跨端实践,带大家了解如何开发一个小程序以及优化小程序
- 总结与展望
课前预习
在老师的督促下课前完成了以下几点的预习。
-
了解一门前端开发框架(React/Vue), reactjs.org/, vuejs.org/
-
了解 React Native, reactnative.dev/
-
了解 Flutter, flutter.dev/
-
了解前端和客户端通信原理
Vue与React的区别
- Vue 通过
getter/setter以及一些函数的劫持,能精确知道数据变化,不需要特别的优化就能达到很好的性能 - React 默认是通过比较引用的方式进行的,如果不优化(PureComponent/shouldComponentUpdate)可能导致大量不必要的VDOM的重新渲染
为什么 React 不精确监听数据变化呢?
这是因为 Vue 和 React 设计理念上的区别,Vue 使用的是可变数据,而React更强调数据的不可变。所以应该说没有好坏之分,Vue更加简单,而React构建大型应用的时候更加鲁棒。
大家都知道Vue中默认是支持双向绑定的。在Vue1.0中我们可以实现两种双向绑定:
- 父子组件之间,
props可以双向绑定 - 组件与DOM之间可以通过
v-model双向绑定
在 Vue2.x 中去掉了第一种,也就是父子组件之间不能双向绑定了(但是提供了一个语法糖自动帮你通过事件的方式修改),并且 Vue2.x 已经不鼓励组件对自己的 props 进行任何修改了。 所以现在我们只有 组件 <--> DOM 之间的双向绑定这一种。
然而 React 从诞生之初就不支持双向绑定,React一直提倡的是单向数据流,他称之为 onChange/setState() 模式。
不过由于我们一般都会用 Vuex 以及 Redux 等单向数据流的状态管理框架,因此很多时候我们感受不到这一点的区别了。
flutter
可以说RN类型的框架他还是拥抱了部分web的生态,却又不是完全的拥抱,但是flutter这个框架从出生就是不打算继续借着web来发展
它本身是使用skia绘制到屏幕上的,也就是说,通过自建绘制能力,来保证多端的统一性,这样做的好处在于能够完全的减少双端差异的人力投入,也不需要使用native跟js进行bridge的交互从而得到对应的页面,讲到比较熟悉的一个古老方案就是QT
方案的思想跟实现都是比较适合跨端能力的体现,但是问题在于他不依赖于前端生态,那么前端人员入手的时候会带来一定的困扰,所以目前市面上多出了很多基于flutter设计的前端实现方案,类似于kraken、liteApp等等
不可否认的是这种方案的思想是能最根本解决跨端带来的困扰,但是他的动态化能力偏弱,在部分领域依旧不是那么适用
课后问题
-
跨端解决了什么问题?
-
常见的跨端技术方案有哪些?各方案的技术原理是什么?他们之间有什么区别?
-
跨端技术方案中有哪几个核心部分?
-
抖音开发者工具提供了哪些能力?
-
抖音小程序开发与 web 开发有哪些异同?
-
小程序性能优化会关注哪些性能指标?分为哪几个方向进行性能优化?可以使用哪些工具来提升效率?
-
小程序 setData 如何优化?