开发(Tips)

 

避开频繁setData *

小程序端对于频繁的逻辑层和显示层的交互很不友好,特别是安卓机,与浏览器上js直接操作DOM不同,小程序通过逻辑更新显示层并不完全实时,开发者应避免出现频繁setData以达到某种视觉效果的操作,如有需要,直接使用框架或页面自带的组件。

组件化开发和分包加载

官方对小程序本身大小的限制为:

▪  整个小程序所有分包大小不超过 8M

▪  单个分包/主包大小不能超过 2M

为节省代码和方便团队协作开发,应尽量采用组件化开发方式,业务上更好地解耦协作,考虑控制主包不超过2M大小和优化首页加载速度,应优先使用分包加载。


调试(Tips)

 

避开请求域名以及 TLS 版本校验

        ▪  开发者工具右上角“详情”

        ▪  手机端右上角  ···  ->  打开调试


框架坑)

enablePullDownRefresh

Q: 页面开启下拉刷新,下拉刷新时ios会出现页面向上弹一下再回弹的情况。

S: 下拉刷新的时候不要同时调用wx.showLoading。


组件坑)

web-view

Q: web-view组件没有完全覆盖页面,底部留有空隙。

C: 造成上面情况的前提是小程序配置有tabBar且小程序的初始页面为tabBar的其中一个tab,后面打开web-view页面时,web-view高度计算为当前页面减去底部tabBar的高度,所以底部留出了tabBar高度的空隙。

S: 初始页面为非tab页面再进行跳转到tab页面。

Q: 小程序端首次授权拿不到faiOpenid导致卡包中心列表中没有奖品记录。

S : 在小程序里拿到unionid通过参数带到web-view中,再在游戏端做关联逻辑处理。

input

Q: 当删除文字时,部分安卓机会监听两次,第一次是空字符串,第二次才是当前文本。

S: 对input的监听进行函数防抖操作,如设置300ms的防抖时差,即bindinput获取到input的内容值后300ms内如果没有再触发一次input事件,那么就对当前的值进行下一步操作,从而避开上述的空字符场景。

Q: 在小米8上,input组件无法被弹起,特别是fixed悬浮在底部时。

button

Q: 无法去除边框

S: 添加伪元素样式,代码如下:

button::after{
  border: none; 
}

textarea

A : textarea组件是使用元素组件层级最高,导致在使用是出现各种问题

swiper

A : 将swiper组件当tab导航使用时,在它的内容层级使用swiper-view组件, 当点击tab导航时,改    current,触发swiper的 bindchange时,使用setData改变current会导致鬼畜。更改swiper-view为view,判断sourc操作来源,可以在一定程度上解决问题。


接口坑)

 

wx.navigateBack

Q: 在安卓机下,从页面pageA中navigateTo进入到pageB,在pageB的生命周期函数onLoad或onShow中调用wx.navigateBack会出现小程序直接退出的情况。

S: wx.navigateBack的使用改为在onReady中可一定频率上避免,但不能100%避免,如果真有必要进行以上逻辑,可多做一步setTimeout延时操作。

wx.getUserInfo

A: 官方对此接口做了调整: 当用户未授权过,调用该接口将直接进入fail回调,而不会再出现授权弹窗,目前体验版和开发版已做此调整,线上暂时没做调整,预计后面会进行过渡调整,后面开发应以新的接口方案做流程,改用 <button open-type="getUserInfo"></button> 引导用户主动进行授权操作。

selectorQuery.select

A: 通过selectorQuery拿到元素的信息时应注意,对于被撑开的容器,当该容器内部存在独立组件时,所拿到的容器高度不一定准确,推测计算原理是遍历容器内元素,但组件内信息无法直接获取。

wx.setBackgroundColor

Q: 在IOS端设置backgroundColor参数有时会失效。

S: 在onload生命周期函数中设置可一定程度避免失效,最好是同时设置backgroundColor,backgroundColorTop,backgroundColorBottom。


样式坑)

 

transform

A: 一些版本的小程序只支持translate和translate3D,对于translateX/Y/Z不支持。

image

Q: 设置image为圆角时,加载图片后会先删一下再变成圆角。

C: 图片加载后触发页面大面积绘制,页面来不及反应造成渲染掉帧/卡帧。

S: 使用GPU加速,代码如下:

image{
    will-change: transform;
}

inline-block

Q:ios下,相邻的两个块用了inline-block,第二个元素位置会比预期的位置要低很多。

S:使用float或者flex或者absolute布局,让此元素变成块。

position : fixed

Q:开启下拉刷新后,ios端fixed元素不会随页面下拉刷新而向下移动,从而挡住了加载样式。

S:在ios端动态设置fixed元素的position,当页面滚动 scrollTop < 0 时,将元素position设为absolute。(已弃用)

S:使用 position : sticky ,该布局相当于 fixed 和 absolute 的结合版,详情见 http://www.css88.com/book/css/properties/positioning/position.htm(低版本安卓可能不支持该属性值,部分版本因为内核的变换也可能不支持,故要做好兼容处理,可用fixed做兼容)

微信小程序开发注意点和坑集的更多相关文章

  1. 总结微信小程序开发中遇到的坑

    总结微信小程序开发中遇到的坑,一些坑你得一个一个的跳啊,/(ㄒoㄒ)/~~ 1,页面跳转和参数传递实例 首先说一下我遇到的需求有一个我的消息页面,里面的数据都是后端返回的,返回的数据大致如下,有一个是 ...

  2. 微信小程序开发技巧及填坑记录

    以下是自己在开发过程中遇到的坑和小技巧,记录以下: 1.出现了 page[pages/XXX/XXX] not found.May be caused by :1. Forgot to add pag ...

  3. 微信小程序开发 (资料汇总,谁还没被坑过?希望助你绕过一些坑)

    最近帮人家做一个微信小程序,刚好想熟悉一下.由于牵扯到多用户使用系统,以及数据共享,所以自然架构选择了,客户端和服务器的方式. 后台服务器是windows server,后台程序是.Net  WebA ...

  4. 微信小程序开发常见坑

    前段时间稍微涉猎了微信小程序开发,踩了一些坑,在此总结出来,希望能为小伙伴们提供一点帮助. 页面跳转 对于页面跳转,可能习惯性想到wx.navigateTo,但是在跳转到目标页面是一个tab时,此接口 ...

  5. 剖析简易计算器带你入门微信小程序开发

    写在前面,但是重点在后面 这是教程,也不是教程. 可以先看Demo的操作动图,看看是个什么玩意儿,GitHub地址(https://github.com/dunizb/wxapp-sCalc) 自从微 ...

  6. 微信小程序开发1

    关于微信小程序的开发.对于我们这些没学过oc或者android的人来说,无疑是一个令人鸡冻的好消息.这段时间研究了微信小程序开发.关于小程序的注册,认证和基础环境的搭建,官方文档已经非常详细了.这里就 ...

  7. 微信小程序开发《三》:微信小程序请求不能使用session的原因及解决办法

    本人在前面的微信小程序开发<二>中提到要想在服务端保持状态需要在客户端第一次请求服务器的时候给客户端返回一个sessionid,由客户端在本地保存,下次请求的时候在header里面带上这个 ...

  8. 微信小程序开发06-一个业务页面的完成

    前言 接上文:微信小程序开发05-日历组件的实现 github地址:https://github.com/yexiaochai/wxdemo 这里来说一说我们的理念,我们也学习小程序开发有一周多了,从 ...

  9. 微信小程序之mpvue+iview踩坑之旅

    因为之前参照微信的原生的文档写过一些小程序的demo,写的过程比较繁琐,后来出了美团的mpvue,可以直接使用vue开发,其他的不作对比,这篇文章记录一下踩坑之旅. 参照mpvue http://mp ...

随机推荐

  1. java 乐观锁CAS

    乐观锁是一种思想,本身代码里并没有lock或synchronized关键字进行修饰.而是采用一种version. 即先从数据库中查询一条记录得到version值,在更新这条记录时在where条件中对这 ...

  2. drill 试用

    1. 下载 http://drill.apache.org/ 2. 启动本地模式 bin/sqlline -u jdbc:drill:zk=local 3. 查询数据 select c.r_name ...

  3. 使用dnSpy对目标程序(EXE或DLL)进行反编译修改并编译运行

    本文为原创文章.源代码为原创代码,如转载/复制,请在网页/代码处明显位置标明原文名称.作者及网址,谢谢! 本文使用的工具下载地址为: https://github.com/cnxy/dnSpy/arc ...

  4. 浅谈Trie

    所谓\(Trie\)就是字典树. 何为字典树?想象一下我们平时用拼音查字法在字典树查汉字的时候,一位一位确定这个汉字的拼音从而翻到我们想要看的那一面. 所以\(Trie\)树跟字典一样,是一种逐位检索 ...

  5. Android Java访问本地方法(JNI)

    当功能需要本地代码实现的时候,Java 代码就需要调用本地代码. 在调用本地代码时,首先要保证本地代码被加载到 Java 执行环境中并与 Java 代码连接在一起,这样 Java 代码在调用本地方法时 ...

  6. Ubuntu 14.04 配置安卓5.1编译环境

    Ubuntu 14.04版本 电脑cpu必须是64位 硬盘分配大约100G的空间 1.ubuntu中更新源 $ sudo apt-get update 2.android5.1需要安装openjdk- ...

  7. nginx的编译安装以及启动脚本编写

    Nginx的编译安装和启动脚本的编写 Nginxd的功能强大,可以实现代理.负载均衡等企业常用的功能.下面介绍一下nginx的编译安装方法: 1. 下载 官方下载地址:http://nginx.org ...

  8. cache的作用

    cache的作用就是第一次请求完毕之后,如果再次去请求,可以直接从缓存里面读取而不是再到服务器端读取. 如果使用jquery,可以使用 cache参数来控制 $.ajax({  url: " ...

  9. 论 html与css的关系

    一.网页前端三剑客基础介绍 1-1 Html和CSS的关系学习web前端开发基础技术需要掌握:HTML.CSS.JavaScript语言.下面我们就来了解下这三门技术都是用来实现什么的: 1. HTM ...

  10. python学习笔记(六):常用模块

    一.模块.包 什么是模块? 模块实质上就是一个python文件,它是用来组织代码的,意思就是说把python代码写到里面,文件名就是模块的名称,test.py test就是模块名称. 什么是包? 包, ...