小程序开发初体验

前言

  已经有一个多月没更新博客了,这个月确实很忙。毕业以来第一次完整负责一个项目,第一次做小程序,第一次部署正式环境,第一次周六加班(我们公司确实不怎么加班哈哈),这段时间确实又让我收获颇多,起码不再像几个月前那样,一个刚毕业的人四处充满疑惑,小心翼翼的打代码,生怕给别人带来麻烦。

  可能因为性格慢热,在熟悉了环境,熟悉了同事,也得到老大的认可的情况下,我开始充满信心和热情去完成我的工作,有疑问的环节依然谦虚的请教,有不满意的地方也平和的提出来。当然,我依旧还有很多地方待提高和完善,知识学习是一方面,还有一方面是自己的脾气,就比如这次小程序上线那天,小程序码识别失败,那天早上我也很着急,排查问题都搞定自己焦头烂耳,我的测试同事过来询问我还要多久才能修复,瞬间我便管不住自己的情绪,带着怒气问为什么你们测试没测出来?后面想想确实是自己的锅,小程序码本来就不能在体验版上测,因为还没发布。今后还需好好管理下自己的脾气……
下面是开发小程序的过程踩过的一些坑:

体验版某个页面只有打开调试才能请求数据

这种情况跟后台域名配置有关,例如需要用到微信头像请求https://wx.qlogo.cn, 会显示这个域名不合法,需在后台downloadFile,uploadFile合法域名处加上,然后重启项目

真机上传图片失败

拍照上传图片发现有些手机上传图片失败没反应,是后台上传图片失败,文件过大,修改小程序前端拍照图片质量,改为normal就可以,heigh可能过大导致后台php请求文件过大失败(报错413 Request Entity Too Large)

1
2
takePhoto({
quality: "normal",

如果要从服务端解决:

服务端解决413报错

真机上传图片过慢

在上传某个图片的操作中,一开始请求时间很长,差不多五六秒,查看原因是前端需要请求一个微信头像https://wx.qlogo.cn, 这个请求持续四五秒左右,后面google了一下解决方法:http://www.cnblogs.com/mysic/p/5421754.html

即后台添加ini_set(‘default_socket_timeout’, 1);限制请求超过1秒就停止,这样请求完微信头像信息立即关闭连接,响应主体connection:keep-alive会变成close

真机请求某个页面卡顿后才跳转

真机线上环境在某个页面更新了数据,没有立即显示更新成功,而是卡一小会,再退出页面,这种情况是前端页面报错,但是并没有停止页面继续执行跳转,所以在报错的时候产生卡顿。注意:有时候本地开发pc端一切正常,页面不报错,但是到了移动端可能就因为机型的差别,导致前端某个地方找不到某个属性或者其他报错。

拍照质量问题

takephoto拍照质以及涉及到图片上传的,貌似只要是ios图片就会很大,几乎是安卓的10倍,很多地方都要进行压缩,canvasToTempFilePath,takephoto,compressImage等小程序自带功能都有quality属性,ios尽量将其压缩,安卓相对可以大一点,app.systemInfo.platform可以用来区分系统

ios拍照或者生成图片都很大,一般都有七八百k

小程序码

小程序码是个大坑,特别是带参数的,必须在正式环境测试,因为每次扫描的都是跳到正式发布的页面去,本地根本测试不了

使用集成包开发有时候也有坑。比如我使用easywechat,这确实是一个很叼的包,很方便,也是腾讯一个大神开发的,在我使用小程序码的时候,一开始我是用

1
$app->app_code->get(string $path, array $optional = []);

开发的时候一切没问题,路径也正常跳转,但是后来发现这个方法对应小程序原生方法getWXACode,是有数量限制的,业务需求必须使用另一个没有数量限制的getWXACodeUnlimit,在easywechat里对应

1
$app->app_code->getUnlimit(string $scene, array $optional = []);

手册说参数optional和get一致,多一个path参数,那我就

1
2
3
$response = $app->app_code->getUnlimit('scene-value', [
'path' => $myPath
]);

就这个死活跳不到我要的地方,都是直接跳首页,也就是说这个路径找不到,或者写错,但是我的路径都检查很多便了,前面也没有加/,就是不行,最后只好放弃,乖乖手动去调用官网的,最后成功。

mysql排序

1
2
select * from `card.pvc123.com`.card where `user_id` in ('025c0f52d2027beed4', '025c1083c7035501ec', '025c10c14702696714') 
and `type` = 0 **order by user_id='025c1083c7035501ec' desc, user_id='025c10c14702696714' desc, `pinyin` asc**

mysql时间字段判断是否为空

当mysql某个字段是时间,date,timestamp等,如果默认值是’0000-00-00 00:00:00’ 或CURRENT_TIMESTAMP,使用is not null,is null查询数据不正确,虽然你的数据库看到的时间是空的,但是实际它其实有数据,相当于空字符串,只能用is true来判断。“is true”不等于“ = true”,在laravel用where(’some’, ‘true’)拿到的sql语句是=true,不是is true

1
2
select * from `card.pvc123.com`.user_relation where `user_id` = '025c1083c7035501ec' and `type` = 2 and `apply_time` is true (laravel whereRaw('apply_time is true'))
select * from `card.pvc123.com`.user_relation where `user_id` = '025c1083c7035501ec' and `type` = 2 and `apply_time` = true (laravel where('apply_time', 'true')得到的)