网上有许多介绍微信小程序云开发的文章,都说解决了什么什么问题,怎么怎么方便,怎么怎么牛逼,云云。
但是,根据我最近的经验,我发现微信小程序有很多缺点,例如以下几点:
1 、不支持本地测试环境,本地运行时需要连接线上数据库,要么把正式数据和测试数据混在一个环境里,要么购买两个环境来回切换(在两个环境中来来回回的手动部署,不现实)。
2 、如果你有多个小程序,你会发现共享环境很麻烦。
举个例子:你购买了一个云环境,但你有 A 、B 两个小程序,你把云环境和小程序 A 绑定,然后把环境共享给 B 。此时,你想要为 B 开发一个新功能,你不能在 B 项目中编写代码,你需要切换到 A 项目,在 A 中写代码,然后把写好的代码复制到 B 项目,然后发布小程序 B 。
如果 B 的代码需要修改,你需要在 IDE 中切换到 A 项目,然后修改代码,在 A 小程序中调试,然后复制到 B 项目,再重新发布。
如果你有 10 个小程序共用一个环境,你需要把 10 个小程序的代码都拿到一个小程序的项目中去编写!
3 、每个云函数都是独立的项目,这意味着维护代码很麻烦。
你可能会有 10 个云函数(甚至 100 个)。 但是,微信规定每个云函数都是一个独立的 node.js 项目,如果你有一些 utils 代码需要在多个项目中共用,那版本维护会很麻烦。
4 、云数据各种受限。
前端一次只能读取 20 条数据。权限管理功能过于简单,使用起来又操作繁琐。许多事情在 MySQL 上就是一句话的事情,在云数据库上要研究半天,甚至难以解决。
5 、云函数容易超时。
想写一个类似 crontab 程序,定时处理一些工作,恭喜,云函数支持!但是不好意思,只能运行 60 秒!(有人说是 20 秒)。 写任何云函数,你都需要考虑 “万一超时了,进程被 kill 了,怎么办?”
6 、云存储(图片存储)居然不支持列表查询。
思考一下这个问题:你有一个进程,下载了一些图片放在云存储中,但是你的进程因为超时被 kill 了,没有执行完整,你没有保存下这些云存储文件的 fileID 。
然后你突然想起图片放在云端是要支付费用的,所以你想删除这些图片,自然想到 ls 列出文件列表,删除部分图片。
对不起,不支持!
目前微信云存储只支持“上传一张图片,api 返回一个 fileID” 以及 “提供 fileID ,api 删除图片” 这两个基本功能,其他功能都不支持! 保存了多少张图片?这个文档有多少图片?某个目录下有多少图片?删除某个目录?列出目录下的子目录? 统统不支持!
微信云开发宣传得很好听,实际使用真的很折磨人,相信 V 友中也有不少用过微信云开发的人,一起来总结一下?
让那些想要陷进来的朋友多一些参考,让已经陷进来的朋友多一些帮助。
1
sdjl OP 我经常遇到这种情况:写了一些代码,运行,报错,错误提示看不懂,google 半小时,解决不了,头疼,实在解决不了,关闭微信开发者工具,重新打开,bug 不见了!!!
|
2
mozhizhu 2023-01-07 14:20:45 +08:00
我拿云开发做错误日志收集;其它的就是解码数据;不能纯靠云开发,操控很不方便。
|
3
sdjl OP 如果你的程序写得不够完整,在运行中因为重复执行某个云函数不小心下载了一万张图片,图片的 fileID 不小心丢失,恭喜你,你将永远不知道哪些图片可以删除(至少在微信提供查询文件列表功能之前),这些图片会一直存在云端,你每天都要支付费用。
|
5
sdjl OP 云函数有一个“日志”功能,文档上说 xxxx 代码可以写日志,然后去 IDE 查看日志。
我写根据文档写了代码,打印日志,但是 IDE 里面是空的,看不见日志,google 了半天没有找到解决办法。 提交工单问客服,原来要“付费开通高级日志功能”,才能看见日志。。。 文档里居然不提。。。 |
6
registerrr 2023-01-07 14:35:16 +08:00
之前尝试云开发是有一个免费额度能白嫖一把,那点免费额度本来就少的可怜(我印象里数据库读写每天好像就两三百,肯定不超过五百),结果现在那一丁点都不给了,起手就是 19.9 ,谁爱用谁用。
开发体验,不管是文档还是功能,总感觉是一个半成品。说能不能用吧,它也能用,就是不好用。 |
7
sdjl OP 写代码时,如果你不打开云函数的本地调试,小程序就会访问正式环境的云函数,本地调试时就可能会不小心操作正式数据库。
如果你打开云函数的本地调试功能,需要手动一个一个的点击打开,如果你有 20 个云函数,就需要操作 20 次。 如果你下楼吃个饭,会发现云函数已经断开连接,点击 “重新启动本地调试” 却没有任何作用,需要重启 IDE 。 然后再次手动重新点击打开 20 个云函数的本地调试。。。。 居然没有 “为所有云函数打开本地调试” 的功能。 |
8
registerrr 2023-01-07 14:45:42 +08:00
刚又看了一眼,5 折结束了,基础套餐 39 ,告辞
|
9
sdjl OP 云数据库看起来像 MongoDB ,但其实不是 MongoDB 。
需要完全重新学习这套 API ,学习成本高,且所学知识不能用于其他地方。 |
10
sdjl OP |
11
registerrr 2023-01-07 14:55:15 +08:00
@sdjl
2 个 39 么?之前好像一个号可以用两个免费额度的环境,现在这...幸好迁移的早,城市套路深,我要回农村 - "云数据库看起来像 MongoDB ,但其实不是 MongoDB 。" 这个确实,什么都好魔改一番,都得照着他的文档走(文档写的还辣鸡),就这还时不时,冷不丁的搞你一下。 |
12
kingjpa 2023-01-07 14:57:02 +08:00
云原生 本身解决的是人员成本,及产品可靠性。
少一个服务端,少一个运维。一年节约多少成本。 并发数上来的时候,代码架构不用做任何调整,直接+钱买量就可以。 你自建不得分布式,负载均衡,一致性等策略吗?这都是成本啊 |
13
sdjl OP @kingjpa 你说得很有道理。
但这篇帖子的目的是为了总结缺点,帮助做云开发的开发者提前了解坑在哪里,避免掉到坑里爬半天。 所以,我们这篇帖子尽量不讨论“云开发也有优点”、“缺点优点各有利弊”这种话题。 我们尽量总结遇到的坑和解决方案,帮助大家解决问题。 |
14
sdjl OP 本地调试云函数容易超时,抛出 “Error: socket hang up” 异常。
根据官方文档,可以在 IDE 中把云函数的超时时间设置为 60 秒,在小程序中可以修改 app.json 的 networkTimeout.request 字段为 60000 ,可把超时时间改为 60 秒。 以上两个步骤均已改为 60 秒,但是本地测试时依然抛出 “Error: socket hang up” 异常。 目前,我本地调试云函数,大概只能运行 10 秒,达不到官方文档说的 60 秒。 |
15
qsfty909 2023-01-08 00:02:39 +08:00 via iPhone
自己搭建后台服务器吧,你说的问题都不是问题
|
17
sdjl OP 就是因为我打算长期使用微信云开发做小程序,所以我才开了这么一个帖子来总结它的缺点。
|