文章来源:腾讯云
微信小程序,开发,大众点评
2017/03/16 15:00
442
大众点评+ 主要页面一览
大众点评+ 产品特性
根据小程序的开发规范,我们总结出几个影响小程序产品形态的关键特性:
以上特征要求我们只为用户提供核心服务,且从产品到技术,都必须围绕「简约」二字做文章。因此,结合大众点评业务场景,最终在「大众点评+」中,我们主要提供以下两种基础服务:
大众点评+ 开发经验谈
产品层面足够精简,我们再来看看技术层面如何做到简约。
前期技术选型
我们先看下项目之初开发同学的困惑:
稍微了解小程序开发流程并测试接口后,我们发现在腾讯运维体系的支撑下,相关服务的稳定性和性能不用担心,但新的问题随之而来:
对于任何新生的应用场景,开发环境、工具和框架不够完善都可以理解,但如何才能既保证开发过程的简单又提供一定的规范和工程化能力?为此,在遵从小程序基本框架的前提下,我们做了如下技术选型和简单封装:
与此同时,我们持续关注小程序社区和论坛的动态,比如利用社区的wxparse方案处理富文本渲染的问题,但对于部分技术和框架,我们持观望态度:
开发过程中的「坑」
接下来进入大家更关注的环节,在开发过程中,小程序开发究竟有哪些「坑」,以及我们如何应对?其实作为内测用户,在小程序开发的初期,确实遇到了不少坑,但这里不得不赞一下微信的同事,我们每次反馈问题都可以得到迅速响应,问题总是非常快的被解决。所以在这里我们并不打算谈论小程序有哪些 BUG ,以及怎么解决等问题,想了解的朋友可以参考推荐资料中的「微信小程序常见 FAQ」。但一些技术架构,或者产品交互上的限制,还是需要第一次开发小程序的开发者引起注意。以下仅列出我们觉得比较重要的一些问题:
平台差异
基础架构&设计
开发思维和技术限制
对应的解决方案
针对上面提到的问题,我们通过自己的实践总结了一套解决方案,这里也与开发者一起分享讨论:
平台差异性
在开发过程中,我们肯定以开发者工具为主完成开发及调试,但这不代表在真机能获得与预期完全一致的展现。在过往开发 hybrid 框架的经历中,我们也总会遇到 iOS、Android、H5 表现不一致的问题,这里既涉及到底层实现的差异,也涉及到不同开发团队的沟通问题,这个问题很难一劳永逸地被完美解决。
所以针对这个问题,我们的办法是通过 log 的方式,类似 web 端日志的方式,记录关键功能的信息,再辅以常用的真机调试、抓包等调试技巧。
web 服务支持
随着苹果对 https 的推动,大众点评也完成了全站 https 化,所以在我们项目后期,这个问题自然消失了。但对于一些中小型公司或者个人开发者来说,这仍然是一个问题,这里推荐直接使用腾讯云的小程序云服务来解决。
web 接口版本化
应对思路并不复杂,可以通过 API 向前兼容,或者 API 版本化管理(在 API 请求中统一携带当前小程序的版本信息)方式解决,我们采用了后者。
开发思维的转变
在传统的 jquery/zepto 开发模式下,前端习惯于直接更改 DOM 内容,这种方案在大量 DOM 需要更新时就会变得非常低效,之后随着React 的推广和 DOM DIFF 技术,大家慢慢习惯于通过变动数据来实现视图的更新,不过在 react 始终保留着对 DOM 进行操作的 API。但是在小程序里面,由于 JS 代码是运行在 JSCore 中,所以不存在 DOM 和 BOM 的概念,任何相关的操作都是无效的(你可能发现在开发者工具里面可以使用,但是在真机一定是不行的)
因此,有些常见方案的实现思路就要发生转变,包括但不局限于以下的操作:
5 级页面限制
解决这个问题,其实大致有三种思路:
优化代码体积
最后,我们单独来聊一聊代码体积优化的问题。
为什么要优化体积?
虽然现阶段大众点评+仅提供了找店和团购两个主要功能,但 1M 的代码量毕竟太小,为了在 1M 的体积下把更多的功能和更好的体验带给用户,并未为以后的扩展预留足够的空间,这就要求我们在代码的体积控制上必须「斤斤计较」。
小程序体积是如何计算的?
小程序会把我们项目的 json、wxml、wxss、js 全部转化为 js,合并成一个文件上传到微信云服务器。当用户第一次打开小程序时再从服务中下载并解析。以我们的项目为例,通过工具的压缩和统计,在我们计算出项目体积达到了~370K,经过微信编译上传,在手机端预览下载时,下载的文件达到了~540K,这正是开发者工具显示告诉我们的编译包大小。
如何优化?
开发层面: