小程序发展阶段
蓄势需两年
- 大量中小企业都已经开始使用小程序,达到30%的水平,预计还需要两年或者更久
生态雏形初步形成
- 四大基础能力
- 流量分发
- 生态中必须具有海量的用户,并且能够帮助企业找到最精准的用户
- 线下连接
- 核心在线下,场景来自线下
- 交易闭环
- 支付交易闭环
- 开发者生态
- 公平公正环境
- 互利共赢机制
- 共生的决心
- 流量分发
奇思妙想:小程序wxapkg包一键运行至浏览器?
如题所示,本文探讨的是如何将 wxapkg 小程序代码包运行至浏览器,也就是wxappUnpacker + wept 两个工具组合在一起会产生什么效果。
小程序云开发实战:从零搭建科技爱好者周刊小程序
前言
作为一名程序猿经常会逛 github ,也会关注一些科技类资讯,自然就发现了阮一峰老师的科技爱好者周刊,每到周五经常会打开这个开源杂志看看有没有新奇好玩的东西。这个周刊是个开源杂志,目前可以从多个地方查看,除了 github 之外还有阮一峰老师的博客、云加专栏、语雀等地方,但是感觉不如小程序这个形态来的方便快捷,然后发现语雀有小程序但是打开路径还是略长,需要登录后点击【我】再进入【我的收藏】,再从列表中选择收藏的周刊进行查看(而且右上角胶囊菜单没有分享功能)......。所以就想到利用小程序的云开发能力来实现这么一个开源杂志的小程序版。
一起来探索下小程序包的魔数
本篇文章源于一名同学对近期一篇文章聊一聊微信小程序包内容
小程序IntersectionObserver用法
做锡慧在线小程序课程详情页时需要在页面向下滚动的时候显示吸顶锚点菜单,记一下IntersectionObserver的用法
小程序wxml使用外部函数
1.新建wxs文件,例如array_fun.wxs:
- 这里为判断元素在数组中是否存在,存在返回true否则为false
var arr_fun = {
array_index: function (search, array) {
for (var i = 0; i < array.length; i++) {
if (array[i] == search) {
return true;
}
}
return false;
}
}
module.exports = {
array_index: arr_fun.array_index
}
小程序formid埋点
只有form提交的时候才会有formId,这样用户的formId可能数量比较少,不能实现发送很多微信模板消息。所以要用伪装表单的方式来实现获取formId。
微信小程序运行机制
运行环境差异
- iOS:JavaScriptCore->WKWebView渲染
- Android:X5 JSCore来解析(X5基于Mobile Chrome 53/57 内核)
- DevTool:nwjs->Chrome Webview渲染
小程序优化建议
setData
- 频繁setData(毫秒级)后果
- Android 下用户在滑动时会感觉到卡顿,操作反馈延迟严重,因为 JS 线程一直在编译执行渲染,未能及时将用户操作事件传递到逻辑层,逻辑层亦无法及时将操作处理结果及时传递到视图层
- 渲染有出现延时,由于 WebView 的 JS 线程一直处于忙碌状态,逻辑层到页面层的通信耗时上升,视图层收到的数据消息时距离发出时间已经过去了几百毫秒,渲染的结果并不实时
- 每次 setData 都传递大量新数据
- 数据传输实际是一次 evaluateJavascript 脚本过程,当数据量过大时会增加脚本的编译执行时间,占用 WebView JS 线程
- 后台态页面进行 setData
- 当页面进入后台态(用户不可见),不应该继续去进行setData,后台态页面的渲染用户是无法感受的,另外后台态页面去setData也会抢占前台页面的执行
- 建议
- 不要频繁调用setData, 尽量合并到一次setData调用
- 传输数据量跟通信性能有关,尽量少于64k,避免一些不需要在页面展示的复杂数据结构或者长字符串
- 与界面无关的数据最好不要设置在data中
- 去掉不必要的事件绑定,减少通信的数据量以及次数
- 不要在节点data前缀放置过大数据(需要传输target的currentTarget和dataset)
小程序wx:if与hidden比较
wx:if
有更高的切换消耗
- 条件值切换,有一个局部渲染的过程,因为它会确保条件块在切换时销毁或重新渲染
- 惰性的,在隐藏的时候不渲染,如果在初始渲染条件为 false,则在条件第一次变成真的时候才开始局部渲染
适用场景:运行时条件不大可能改变
小程序页面调试模式下正常但线上打不开的部分决解办法
1.确认开发者工具是否开启不验证合法域名,先关闭不校验合法域名
⬇️
2.查看工具的报错域名信息
⬇️
3.小程序后台的服务器域名填写处添加工具里报错的域名
小程序启动过程
1.小程序初始化
微信会初始化小程序环境,比如逻辑层的js引擎,视图层的WebView,并且注入公共基础库
⬇️
2.下载小程序代码包
进行业务小程序代码包的下载
小程序更新机制
未启动时更新
开发者在管理后台发布新版本的小程序之后,如果某个用户本地有小程序的历史版本,此时打开的可能还是旧版本。微信客户端会有若干个时机去检查本地缓存的小程序有没有更新版本,如果有则会静默更新到新版本。总的来说,开发者在后台发布新版本之后,无法立刻影响到所有现网用户,但最差情况下,也在发布之后 24 小时之内下发新版本信息到用户。用户下次打开时会先更新最新版本再打开
启动时更新
小程序每次冷启动时,都会检查是否有更新版本,如果发现有新版本,将会异步下载新版本的代码包,并同时用客户端本地的包进行启动,即新版本的小程序需要等下一次冷启动才会应用上。
浅谈微信小程序反扒:如何保证小程序代码的安全性
之前就有同学提问,如何让自己的小程序代码不被别人恶意反编译呢?社区里也有很多类似的投诉,辛辛苦苦做的小程序UI设计都被别人抄了去,一直没有很好的解决办法。
小程序下拉刷新真机上不回缩问题解决
加上代码wx.stopPullDownRefresh(); //停止下拉刷新
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
this.getCourseList();
this.getErrBookList();
this.getYouLike();
this.getCoach();
this.getBrowsedCourseList();
this.getBrowsedVideo();
wx.stopPullDownRefresh();
},
小程序提示"以下文件体积超过 500KB,已跳过压缩以及 ES6 转 ES5 的处理"
[JS 文件编译错误] 以下文件体积超过 500KB,已跳过压缩以及 ES6 转 ES5 的处理