从微信发布小程序以来,各大公司纷纷跟进都想从微信这个流量池里捞一杯羹。我司也不例外,我们整个前端团队这半年来基本上都是在开发小程序。前前后后也开发了四五个小程序了。总觉得要留下点什么,既是记录那些年我们踩过的坑,也是希望大家别再掉坑。

那些年我们踩过的坑

  • css样式不能引用本地图片资源,只能引用线上资源( background-image ),引用本地图片资源只能用 <image> 标签。
  • {{}} 不能执行函数方法, {{}} 只支持基本的简单运算和ES6拓展运算符。如价格格式化这种常用的处理,只能在js代码中处理好然后再模板中渲染。 
    this.setData({price: this.formatPrice(this.data.price)
    })
    
  • 可以通过 wxs 模块解决 {{}} 中不能执行函数的问题。可以做到模拟vue.js中过滤器的功能。 
    <!-- wxml模板 -->
    <wxs src="../../modules/formatPrice.wxs" module="tools" /><view>价格:{{tools.formatPrice(price)}}</view>
    // wxs模块
    var formatPrice = function (price){price = price >> 0;return Number(price / 100).toFixed(2);
    }module.exports = {formatPrice
    }
    
  • 小程序不支持分享链接到朋友圈,暂时的通用做法是生成保存有页面小程序码的图片到本地相册。又用户自行发朋友圈转发。前端可以利用 canvas 来实现,减轻服务端压力。但是会有图片锯齿不清晰的问题。建议预览图和保存到真机的图片采用不同的尺寸。保存在真机的图片按照750的宽度实现。相比于预览图要大一些,这样保存到手机的图片会清晰很多。
  • 小程序布局采用rpx单位,UI稿按照750的宽度出图。可直接使用UI稿的尺寸。但是在某些机型上 1rpx 会无法显示。可以用H5的方式实现1px效果。
  • iphoneX吸底按钮的适配,可以用媒体查询获取wx.getSystemInfo获取机型。 参考 
    @media only screen and (device-width : 375px) and (device-height : 812px) and (-webkit-device-pixel-ratio : 3) { }
    
  • 页面A -> 页面B,页面B的操作触发了页面A的数据更新。返回更新页面A的数据,通常有两种方式来实现(我司采用了方案二):
    1. 在页面A监听onShow事件,在onShow事件触发时无脑更新页面数据。
    2. 通过EventBus来实现跨页面通信。
  • 复杂组件的开发,省市区三级联动选择器的开发,获取微信地址库的地址的编码和业务采用的省市区编码对不上。
  • 页面路径的层级,最大不能超过10层。
  • 小程序小程序分包加载,微信对小程序包的大小有如下限制。
  • 整个小程序所有分包大小不超过 8M
  • 单个分包/主包大小不能超过 2M

微信小程序主流框架对比

  • wepy
  • mpvue
  • Taro

wepy

wepy应该算是最早发布的小程序开发框架,提供了类vue.js的语法风格和特性,现阶段应该也是应用最广泛的框架吧。我开发的几个小程序也都是采用了wepy这个框架。我先来说说当初为什么选择这个框架的原因吧。

  1. 类Vue.js的语法风格,适合我们团队原有的的技术栈
  2. 支持组件化(当时微信官方的API还不支持组件化)
  3. 支持加载外部npm包
  4. 支持ES6的写法

前期使用wepy的过程中,wepy自带bug。不过好在开发者响应及时,基本上都能覆盖大部分场景。

但是有个最大的坑点就是,wepy组件的实现方式。 组件使用的是静态编译组件,即组件是在编译阶段编译进页面的,每个组件都是唯一的一个实例。 多个组件共享同一个数据。并且静态编译组件。导致组件A,在页面A和页面B被引用,会copy两份代码到页面A和页面B内部。导致拆分组件并没有对包的体积有任何减少。后期微信官方API支持组件化编程后,我们逐步把一些比较核心,体积较大的组件用原声API重构了。

mpvue

由美团团队开发,mpvue和wepy一样也是在小程序上提供了类vue.js的开发体验。作为后来者,抢占了很多wepy的市场份额(ps:我们团队近期也在考虑从wepy迁移到mpvue)。这个框架的原理相比wepy要更加复杂一点,mpvue 修改了 Vue.js 的 runtime 和 compiler 实现,提供了更加接近于vue.js的开发体验。

Taro

Taro是由京东团队开源的一套遵循 React 语法规范的多端开发解决方案。本身我对React和Taro都不是很了解,就不多解释了。具体可以看开发团队的博客和代码了解更多细节 多端统一开发框架 – Taro

我看小程序

我想从技术的角度来谈谈我对微信小程序的理解,我觉得小程序本身是一个非常优秀的Hybrid App的技术方案。有很多值得学的地方,可以应用到我们Hybrid App的技术方案设计中来。了解和学习小程序技术原理也能更好的优化我们的代码。

渲染层和逻辑层分离

相比于之前常见的Hybrid的方案, 小程序使用了双线程模型:小程序的渲染层和逻辑层是是分开的,逻辑层通过JSCore来解析和执行,渲染层是通过webview来渲染。之前的常见Hybrid离线包的方案大多使用webview同时实现页面的渲染和js的解析。这样做的的结果就是隔离了js的runtime,在js代码中无法操作webview中的DOM对象和BOM对象。Js无法做任何和页面渲染有关的操作。只能通过setData把数据从JsCore传递到webview。

独立的JS运行环境,相比于webview同时处理页面的渲染和JS的执行带来了一些好处:

  1. js无法动态的在页面插入节点和干预页面的渲染,解决了安全和管控的问题,否则小程序的上线审核就变得毫无意义。
  2. 渲染层和逻辑层的分离,减轻了webview的压力,js的执行和页面的渲染可以并行,不会出现js执行卡主页面渲染的情况。
  3. 多个页面可以共享一个JS运行环境,数据很方便的共享,整个小程序的生命周期共享同一个上下文,接近App的体验。

坏处在于:

  1. 多了很多webview和JSCore数据传输的消耗,数据需要序列化成字符串格式进行传输。

离线包加载

离线包加载,常见的Hybrid App通过webview加载H5页面,前端页面都是放在服务器端。虽说保证了灵活性。但是加载性能收网速影响大。页面切换白屏时间长。小程序离线包的加载方式。一次性加载所有的前端资源到本地再解压。大大提升了用户体验。不过微信官方为了防止下载离线包的时间过程,也严格限制了小程序包的体积。(分包加载情况下子包大小不能超过2M,也就是初次打开加载的资源不能超过2M)

多webview架构

多webview的页面架构,小程序每新开一个页面,都会用一个新的webview来渲染。为了防止webview对内存的消耗。小程序限制层级不能超过10层。

预加载webview

预加载webview,微信会预加载多一个wkwebview(ios平台)放后台,用户打开小程序时省去初始化wkwebview时间。

小程序开发实践总结 - WEB前端相关推荐

  1. python开发微信小程序-Python 开发者的微信小程序开发实践

    导读 在知乎上,有人提问"如何使用 Python 开发微信小程序". 其实微信小程序作为一个前端的机制,Python 并不能插上边.只不过可以作为后端接口为微信小程序提供数据服务而 ...

  2. 腾讯在线教育小程序开发实践之路

    前言: 小程序是一种新的开放能力, 开发者可以快速地开发一个小程序,便可以在微信内被便捷得获取和传播,同时具有出色的使用体验.随着近两年来小程序风口的爆发,越来越多的开发者.企业开始接入小程序,那么在 ...

  3. 新闻资讯小程序开发实践

    新闻资讯小程序开发实践 在腾讯小程序上线一周年之际,公司又决定把App产品部分内容在小程序上实现.就在小程序刚上线的时候,公司也有一款产品进行了小程序的研发,但后续没有持续的维护.这过了一年的时间,微 ...

  4. DingTalk「开发者说」|钉钉小程序开发实践

    移动Web的特点   钉钉小程序开发的应用分布很广泛,下面列举了四个常用的钉钉小程序:钉钉投票.传图识字,以及集成在钉钉客户端中的自定义平台和考勤打卡. 通过对比桌面设备,移动Web的特点体现在以下三 ...

  5. 摩拜单车小程序开发实践与框架分析

    以打造内容全.技术新.可实操的小程序小册为目标,整本小册共包含 21 节,不仅讲述了小程序开发的一些基础知识,也通过摩拜单车业务案例深入小程序开发,此外,还加入了主流框架的使用对比和深入的技术细节分析 ...

  6. 微信小程序开发和网页Web开发的区别

    小程序和web开发的区别主要在前端.小程序的主要操作平台在微信上.微信服务器的前端代码和从用户数据库后台传过来的数据,通过微信内置的解释器进行拼接,解释为我们平时看到的页面.Web 开发仍然具有相同的 ...

  7. Python 开发者的微信小程序开发实践

    2017年微信小程序横空出世,惊诧了中国移动互联网.看重者言其将革了 IOS 和 Android 的命,看轻者斥其必将无所作为. 无论重视或是轻视,微信小程序都越来越多地出现在了我们的生活.工作和学习 ...

  8. 「开发者说」自动化设备管理上钉钉,“源创食堂“小程序开发实践

    本篇文章的供稿人为柳州源创电喷技术有限公司装备开发部部长蒙东辉,概览本文大概需要3分钟,精读本文需要10分钟. "钉钉应用开发让公司食堂都实现了数字化转型,食堂备餐浪费与不足的现象得到了有效 ...

  9. 【小程序】微信小程序开发实践

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/diandianxiyu/article/details/53068012 </div>& ...

最新文章

  1. linux vscode vim,VSCode Vim进阶操作
  2. 删除顺序表中所有的的重复数据
  3. 书------编程(理论方面)
  4. 过滤器解决Struts2重定向漏洞
  5. MATLAB与图像处理(四):将图片序列转化为视频文件,将视频文件转化为图片
  6. joomla建站-双语CMS系统开发的实现
  7. Linux中常见服务对应的端口号
  8. geometry-api-java 学习笔记(五)多边形 Polygons
  9. XGBoost 与 Spark 在广告排序中的应用
  10. 移动端HTML响应式布局之神奇的pt(自测99.99%与设计图一致)
  11. “去除更多的鲜艳色彩和动态效果的搭配,精简用户使用步长,让软件更像是一件工具。(不排除以后更先进的吸引眼球的方式)“。
  12. 电子增稳云台_揭秘Dobby自拍无人机,电子增稳是黑科技?
  13. 创业邦30岁以下青年企业家峰会暨颁奖典礼在京举行
  14. 出埃及记:摩西劈开红海
  15. LM117,LM217,LM317;LM137,LM237,LM337
  16. python中怎么统计英文字符的个数_python怎样实现字符串中字符分类及个数统计
  17. 笔记本电脑键盘失灵拯救方法总结
  18. 计算机关机管理软件,电脑自动关机软件
  19. 软件测试需要学习些什么技能
  20. OpenStack-Keystone组件部署 超级详细!!!

热门文章

  1. PCI设备WINDOWS驱动程序的开发
  2. star 序列比对2020-12-25
  3. Henrik Kniberg:乐高的基于社交的大规模敏捷计划会
  4. 浅谈友情链接对网站的影响
  5. 调用API发送邮件163邮箱Python
  6. css符集图标显示不出来,CSS3 icon font完全指南(CSS3 font 会取代icon图标)
  7. 用excel来抽取考官-面试考管抽取表
  8. 关于敏感字符的筛选替换
  9. 用LaTeX投稿及返修Elsevier的期刊,在线生成PDF编译不成功解决方法
  10. Python基础之封装