最近我在准备面试也参加了几场面试发现小程序相关的问题在前端面试中出现的频率越来越高特别是小程序框架对比的问题几乎每场面试都被问到,比如微信小程序原生开发和mpvuewepyTaro等框架有什么区别各有什么优缺点该怎么选等等。
今天想整理一下我在面试中被问到的小程序框架对比相关的问题以及我的回答和,理解希望能帮正在准备面试的朋友也希望能和大家交流讨论共同进步。
一、背景:为什么小程序框架这么火
在说面试题之前,先简单说说背景为什么小程序框架这么火为什么面试中这么喜欢问小程序框架对比的问题。
2017年微信推出了小程序之后,小程序迅速火了起来越来越多的公司开始做小程序微信小程序之后,支付宝百度头条等平台也相继推出了自己的小程序小程序已经成为前端开发的一个重要领域很多前端开发者都需要掌握小程序开发。
但是小程序原生开发有一些痛点,比如开发体验不够好不能用前端主流的框架(VueReact等)组件化能力有限多端复用困难等等,所以社区推出了很多小程序开发框架来解决这些痛点,比如腾讯的wepy美团点评的mpvue京东凹凸实验室的TaroDCloud的uni-app等等这些框架各有特点能提升小程序开发效率也能支持多端开发,所以越来越多的项目开始使用这些框架。
正,因为小程序框架多,而且各有特点,所以面试中很喜欢问小程序框架对比的问题考察面试者对小程序生态的了解程度以及技术选型的能力这也是前端开发者需要掌握的知识。
二、面试题1:你用过哪些小程序开发框架?它们各有什么特点?
这是最基础的问题几乎每场面试都会问考察你对小程序框架生态的了解程度。
我的回答:
我主要了解和使用过以下几个小程序开发框架它们各有特点:
1. 微信小程序原生开发:
这是最基础的开发方式用微信官方提供的WXMLWXSSJSJSON来开发不需要额外的框架和构建工具优点是官方支持性能最好文档最全不会有框架层面的bug和兼容性问题缺点是开发体验一般不能用前端主流的Vue/React等框架组件化能力有限代码复用性不高多端开发需要重写适合小型项目,或者对性能要求很高的项目。
2. wepy:
wepy是腾讯团队开源的小程序开发框架是比较早的小程序框架之一它的风格比较像Vue支持组件化Promiseasync/await等特性能提升开发体验优点是腾讯出品相对可靠文档比较全社区也比较活跃缺点是和Vue还是有一定差异不是完全的Vue语法学习成本还是有一些,而且多端支持有限主要支持微信小程序适合微信小程序项目想提升开发体验的团队。
3. mpvue:
mpvue是美团点评团队开源的小程序开发框架它的最大特点是基于Vue.js能让你用Vue的语法开发小程序几乎和写VueWeb项目一样,而且能复用Vue的生态和工具链优点是Vue开发者上手快几乎零学习成本能复用Vue的知识和组件支持微信支付宝百度头条等多端小程序开发缺点是框架封装了一层性能比原生稍差一些,而且有些小程序原生的特性支持不够完善需要用特殊方式处理适合有Vue技术栈的团队想快速开发小程序,或者需要多端开发的项目。
4. Taro:
Taro是京东凹凸实验室开源的多端统一开发框架它的最大特点是"一次编写多端运行"支持React语法能把一套代码编译到微信小程序支付宝小程序百度小程序H5React Native等多个端优点是多端支持最全面,不仅支持各大小程序还支持H5和React Native能最大程度复用代码React开发者上手快京东团队维护更新比较活跃缺点是框架比较新还在快速迭代可能有一些bug和不完善的地方,而且多端兼容需要处理一些平台差异学习成本相对高一些适合需要多端开发(小程序+H5+App)的项目,或者有React技术栈的团队。
5. uni-app:
uni-app是DCloud推出的多端开发框架基于Vue.js也支持一次编写多端运行支持微信支付宝百度头条等小程序以及H5App等优点是多端支持全面Vue语法上手快DCloud有比较成熟的工具链(HBuilderX)开发体验不错缺点是社区和生态相比mpvueTaro可能稍弱一些,而且绑定DCloud的工具链比较深适合需要多端开发的项目特别是需要,同时发布小程序和App的项目。
面试官追问:你觉得哪个框架最好?
这个问题没有绝对的答案我的回答是没有最好的框架,只有最适合的框架要根据项目需求团队技术栈多端需求等因素选择,比如,如果团队熟悉Vue只做微信小程序那mpvue或者wepy就不错,如果需要多端开发小程序+H5+App那Taro或者uni-app更合适,如果对性能要求极高项目又小那原生开发也是好选择核心是根据实际情况选型不要盲目追新也不要为了用框架而用框架。
三、面试题2:小程序框架的实现原理是什么?它是怎么把Vue/React代码编译成小程序代码的?
这个问题考察你对小程序框架底层原理的理解不是只会用还要知道原理。
我的回答:
小程序框架(比如mpvueTaro等)的核心原理是通过编译转换把Vue/React的代码转换成小程序能识别的WXMLWXSSJS代码主要分为以下几个部分:
1. 模板编译:
把Vue的template或者React的JSX转换成小程序的WXML模板,比如Vue的v-ifv-forv-bindv-on等指令转换成小程序的wx:ifwx:for{{}}bind等语法React的JSX也类似转换成WXML这个过程一般是通过AST(抽象语法树)转换实现的先把Vue/React模板解析成AST然后遍历AST转换成小程序模板的AST最后生成WXML代码。
2. 样式编译:
把Vue/React组件里的样式(CSSSCSSLess等)转换成小程序的WXSS样式主要是处理一些小程序不支持的CSS特性(比如某些选择器)以及,样式隔离的处理小程序的样式默认是隔离的框架需要处理组件样式的作用域确保样式不会互相污染。
3. 脚本编译:
把Vue/React的组件JS代码转换成小程序的Page/ComponentJS代码这是最复杂的部分,因为Vue/React的组件模型和小程序的组件模型不一样框架需要做一层适配,比如Vue的响应式数据系统需要适配到小程序的setData机制Vue的生命周期钩子需要映射到小程序的生命周期Vue的组件通信(props事件等)需要适配到小程序的组件通信方式等等。
以mpvue为例它的原理是修改了Vue.js的runtime让Vue的渲染层不操作DOM而是调用小程序的setData来更新视图,同时把Vue的组件模型适配到小程序的组件模型这样Vue的代码就能在小程序环境里运行了Taro的原理类似也是通过自定义React的渲染器(reconciler)把React的组件树渲染到小程序的视图层,同时做各种适配。
4. 构建和打包:
框架一般还会提供构建工具(基于webpack等)把多个组件文件打包成小程序需要的文件结构处理资源文件(图片字体等)代码压缩混淆等等最后生成可以直接用微信开发者工具打开的小程序项目。
总结:
简单来说,小程序框架的原理就是通过编译转换+ runtime适配把Vue/React的代码转换成小程序能运行的代码让开发者能用熟悉的Vue/React语法开发小程序提升开发效率和代码复用性。
四、面试题3:小程序框架相比原生开发有什么优缺点?
这个问题考察你对小程序框架和原生开发的对比理解以及技术选型的思考。
我的回答:
小程序框架相比原生开发有以下优缺点:
优点:
- 开发体验更好:能用熟悉的Vue/React语法开发不用学习小程序原生的WXML/WXSS语法开发效率更高,而且能用前端主流的工具链(webpacknpmESLint等)开发体验更好。
- 组件化能力更强:框架一般提供了更强大的组件化能力能更好地复用组件和,逻辑代码可维护性更好。
- 多端复用:很多框架支持多端开发一套代码能编译到微信支付宝百度头条等小程序甚至H5App能大大减少多端开发的工作量。
- 生态和复用:能复用Vue/React的生态和组件很多Web端的组件和,工具能快速迁移到小程序减少重复造轮子。
- 团队协作效率高:如果团队已经熟悉Vue/React用框架开发小程序学习成本低能快速上手团队协作效率更高。
缺点:
- 性能有一定损耗:框架封装了一层相比原生开发性能会有一定损耗特别是复杂页面和频繁更新的场景可能会有卡顿,虽然框架都在优化性能,但是和原生还是有差距。
- 框架层面的bug和兼容性问题:框架本身可能有bug或者兼容性问题特别是新框架,或者新版本可能会有一些坑需要花时间排查,而且小程序官方API更新之后,框架可能需要时间适配不能第一时间用新特性。
- 原生特性支持不完善:有些小程序原生的特性框架可能支持不够完善,或者需要用特殊方式处理增加了开发复杂度,而且框架的封装可能会限制一些原生能力的使用。
- 学习成本和维护成本:虽然Vue/React开发者上手快,但是框架本身也有一些特有的概念和坑需要学习和踩坑,而且框架更新迭代快需要持续跟进维护成本也有一些。
- 打包体积可能更大:框架的runtime会增加一些代码体积对于小程序包大小有限制的场景可能会有影响,不过一般影响不大可以通过分包等方式优化。
总结:
小程序框架适合中大型项目团队熟悉Vue/React需要多端开发,或者想提升开发效率的场景原生开发适合小型项目对性能要求极高,或者需要用最新原生特性的场景没有绝对的好坏根据实际情况选择。
五、面试题4:mpvue和Taro你怎么选?它们有什么区别?
这个问题考察你对主流小程序框架的深入对比理解以及技术选型能力。
我的回答:
mpvue和Taro是目前比较主流的两个多端小程序框架,但是它们有不少区别选择的话,要根据团队技术栈和项目需求来定。
主要区别:
- 语法基础不同:mpvue基于Vue.js用Vue的语法开发Taro基于React用React的JSX语法开发这是最核心的区别团队熟悉Vue就选mpvue熟悉React就选Taro学习成本最低。
- 多端支持范围不同:mpvue主要支持各大小程序(微信支付宝百度头条)以及H5对React NativeApp端支持有限Taro的多端支持更全面除了各大小程序和H5还支持React Native能编译成App所以,如果需要,同时开发小程序和AppTaro更合适。
- 框架成熟度和社区不同:mpvue是美团点评出品已经发布了一段时间相对成熟社区也比较活跃Vue生态的开发者多Taro是京东凹凸实验室出品相对新一些,但是更新迭代很快京东内部大量使用也比较可靠社区也在快速成长。
- 性能表现不同:两者性能都不错,但是,因为实现方式不同在不同场景下表现可能有差异一般来说,两者都能满足大部分项目的性能需求特别复杂的场景可能需要具体测试对比。
- 工具链和开发体验不同:mpvue基于vue-cli的工具链Vue开发者熟悉Taro有,自己的CLI工具开发体验也不错支持TypeScript等特性两者都支持热更新等开发体验功能。
怎么选:
- 如果团队技术栈是Vue主要做小程序(可能需要多小程序端+ H5)那mpvue是,好选择上手快生态成熟。
- 如果团队技术栈是React或者需要,同时开发小程序+ H5 + App(React Native)那Taro更合适多端支持更全面。
- 如果项目特别看重成熟度和稳定性mpvue相对更成熟一些,如果看重多端能力和未来发展Taro的多端布局更有想象力。
当然最好的方式是针对自己的项目做一下技术预研和demo验证看看哪个框架更适合自己的项目需求和团队情况。
六、面试题5:用小程序框架开发有哪些坑?你怎么解决的?
这个问题考察你的实际项目经验和解决问题的能力不是只会说理论还要有实战经验。
我的回答:
我在使用小程序框架(主要是mpvue)开发项目的过程中遇到了一些坑这里分享几个比较典型的:
坑1:setData频繁调用导致性能问题:
小程序的视图更新是通过setData实现的框架(比如mpvue)会把Vue的响应式更新转换成setData调用,但是,如果代码写得不好频繁修改数据会导致频繁调用setData性能很差页面卡顿。
解决方式:
- 尽量减少数据修改的次数把多次修改合并成一次。
- 不要在列表渲染中放太复杂的逻辑避免每次更新都重新计算。
- 对于不需要响应式的数据不要放在data里减少setData的数据量。
- 合理使用小程序的分包和按需加载减少单次渲染的压力。
坑2:小程序原生API和框架的适配问题:
有些小程序原生的API或者组件框架支持不够完善,或者用法和原生有差异导致踩坑,比如某些原生组件的事件绑定方式和Vue/React不一样,或者某些API的回调处理有问题。
解决方式:
- 遇到原生API的问题先查框架的文档和issue看看有没有已知问题和,解决方案。
- 必要时可以通过框架提供的escape hatch(逃生口)直接调用小程序原生API绕过框架的封装。
- 对于复杂的原生组件可以考虑用小程序原生自定义组件实现,然后在框架中引入使用。
- 关注框架的更新及时升级版本很多坑会在新版本中修复。
坑3:多端开发的平台差异问题:
如果用框架做多端开发(微信支付宝百度等小程序)会遇到平台差异的问题,比如不同平台的API不一样组件支持不一样样式表现不一样等等一套代码跑多端需要处理很多平台差异。
解决方式:
- 用框架提供的条件编译,或者平台判断API针对不同平台写不同的代码。
- 尽量使用各平台都支持的通用API和组件避免使用平台特有的特性减少差异。
- 做好多端测试每个平台都要充分测试发现平台差异的问题及时修复。
- 对于差异大的功能可以考虑封装成统一的服务层内部处理平台差异对外提供统一接口。
坑4:调试困难的问题:
用框架开发代码是Vue/React的,但是运行在小程序环境里调试的时候,看到的是编译后的代码和源码有差异调试比较困难特别是复杂的bug排查起来比较麻烦。
解决方式:
- 开启source map让编译后的代码能映射到源码方便调试。
- 充分利用框架提供的日志和调试工具以及小程序开发者工具的调试功能。
- 复杂的逻辑尽量写单元测试在Node.js环境测试逻辑正确性减少在小程序环境调试的压力。
- 养成好的编码习惯代码清晰加必要的注释和日志方便排查问题。
七、面试题6:小程序的未来发展趋势你怎么看?框架会取代原生开发吗?
这个问题考察你对技术趋势的思考和判断力不是只关注眼前的技术还要有技术视野。
我的回答:
我对小程序未来发展的看法是这样的:
1. 小程序会越来越重要成为前端开发的重要领域:
小程序经过这两年的发展已经从微信一家扩展到支付宝百度头条等多个平台成为了一个重要的应用形态越来越多的公司和开发者投入小程序开发小程序已经成为前端开发的一个重要领域未来会越来越重要前端开发者需要掌握小程序开发技能。
2. 多端统一开发是趋势框架会越来越成熟:
随着各平台都推出自己的小程序多端开发的需求越来越强烈一套代码跑多端是很多团队的痛点和需求,所以多端统一开发框架会越来越受欢迎也会越来越成熟mpvueTarouni-app等框架都在快速发展未来会有更好的开发体验和性能更完善的多端支持。
3. 框架不会完全取代原生开发两者会长期共存:
虽然框架越来越成熟,但是我觉得,不会完全取代原生开发两者会长期共存原因是:
- 原生开发性能最好能第一时间使用平台新特性对于性能要求高,或者需要用最新特性的项目原生开发还是有优势。
- 框架有学习成本和维护成本对于小型项目,或者团队不熟悉Vue/React的情况原生开发可能更简单直接。
- 框架的性能和兼容性,虽然在不断提升,但是和原生还是有差距特别复杂的场景可能还是需要原生开发,或者混合开发。
所以未来应该是框架和原生开发长期共存根据项目需求选择合适的开发方式甚至可能混合使用,比如主体用框架开发性能敏感的页面用原生开发,或者原生自定义组件补充框架的不足。
4. 小程序和Web的融合会越来越深:
另外我觉得,小程序和Web的融合会越来越深,比如PWA和小程序的界限会越来越模糊多端框架也在把小程序和H5统一起来未来可能会有更统一的开发方式能,同时开发小程序和Web应用这也是值得关注的趋势。
八、总结和建议
以上就是我在面试中被问到的小程序框架对比相关的问题以及,我的回答和理解希望能帮正在准备面试的朋友。
最后给准备面试的朋友一些建议:
- 不要只背题要理解原理:小程序框架的面试题不要只背答案要理解背后的原理和思想,比如框架的编译原理适配原理等等理解了原理,不管面试官怎么问都能回答上来。
- 要有实际项目经验:光看理论不够最好有实际项目经验用框架做过项目踩过坑这样回答问题才有,内容不空洞面试官也能感受到你的实战能力。
- 关注技术趋势有自己的思考:面试,不仅考察你会什么还考察你的技术视野和思考能力要关注小程序和前端的技术趋势有自己的思考和判断这样在面试中能脱颖而出。
- 技术选型要结合实际不要盲目追新:回答技术选型的问题时不要说哪个好就选哪个要结合项目需求团队情况等因素分析体现你的综合判断能力这也是面试官想考察的。
面试是一个双向选择的过程不用太紧张把自己知道的说清楚展示自己的能力和,思考就好希望大家都能拿到心仪的offer。
最后用一句话结束这篇文章:"小程序框架百家争鸣没有最好,只有最适合理解原理结合实际才能选对框架做好项目。"
愿大家都能学好小程序开发在前端道路上越走越远。
评论(0)
暂无评论,快来抢沙发~
评论功能仅对会员开放,请先登录
登录