V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sdjl
V2EX  ›  微信

微信小程序的 云开发 都有哪些缺点呢?

  •  
  •   sdjl · 2023-01-07 14:14:18 +08:00 · 2274 次点击
    这是一个创建于 716 天前的主题,其中的信息可能已经有所发展或是发生改变。

    网上有许多介绍微信小程序云开发的文章,都说解决了什么什么问题,怎么怎么方便,怎么怎么牛逼,云云。

    但是,根据我最近的经验,我发现微信小程序有很多缺点,例如以下几点:

    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 友中也有不少用过微信云开发的人,一起来总结一下?

    让那些想要陷进来的朋友多一些参考,让已经陷进来的朋友多一些帮助。

    19 条回复    2023-01-10 10:29:29 +08:00
    sdjl
        1
    sdjl  
    OP
       2023-01-07 14:17:55 +08:00
    我经常遇到这种情况:写了一些代码,运行,报错,错误提示看不懂,google 半小时,解决不了,头疼,实在解决不了,关闭微信开发者工具,重新打开,bug 不见了!!!
    mozhizhu
        2
    mozhizhu  
       2023-01-07 14:20:45 +08:00
    我拿云开发做错误日志收集;其它的就是解码数据;不能纯靠云开发,操控很不方便。
    sdjl
        3
    sdjl  
    OP
       2023-01-07 14:21:06 +08:00
    如果你的程序写得不够完整,在运行中因为重复执行某个云函数不小心下载了一万张图片,图片的 fileID 不小心丢失,恭喜你,你将永远不知道哪些图片可以删除(至少在微信提供查询文件列表功能之前),这些图片会一直存在云端,你每天都要支付费用。
    sdjl
        4
    sdjl  
    OP
       2023-01-07 14:22:31 +08:00
    @mozhizhu 真的,所有东西在云端,需要通过 IDE 点击 button 来操控,一觉回到解放前。
    sdjl
        5
    sdjl  
    OP
       2023-01-07 14:31:27 +08:00
    云函数有一个“日志”功能,文档上说 xxxx 代码可以写日志,然后去 IDE 查看日志。

    我写根据文档写了代码,打印日志,但是 IDE 里面是空的,看不见日志,google 了半天没有找到解决办法。

    提交工单问客服,原来要“付费开通高级日志功能”,才能看见日志。。。

    文档里居然不提。。。
    registerrr
        6
    registerrr  
       2023-01-07 14:35:16 +08:00
    之前尝试云开发是有一个免费额度能白嫖一把,那点免费额度本来就少的可怜(我印象里数据库读写每天好像就两三百,肯定不超过五百),结果现在那一丁点都不给了,起手就是 19.9 ,谁爱用谁用。
    开发体验,不管是文档还是功能,总感觉是一个半成品。说能不能用吧,它也能用,就是不好用。
    sdjl
        7
    sdjl  
    OP
       2023-01-07 14:37:28 +08:00
    写代码时,如果你不打开云函数的本地调试,小程序就会访问正式环境的云函数,本地调试时就可能会不小心操作正式数据库。

    如果你打开云函数的本地调试功能,需要手动一个一个的点击打开,如果你有 20 个云函数,就需要操作 20 次。

    如果你下楼吃个饭,会发现云函数已经断开连接,点击 “重新启动本地调试” 却没有任何作用,需要重启 IDE 。

    然后再次手动重新点击打开 20 个云函数的本地调试。。。。

    居然没有 “为所有云函数打开本地调试” 的功能。
    registerrr
        8
    registerrr  
       2023-01-07 14:45:42 +08:00
    刚又看了一眼,5 折结束了,基础套餐 39 ,告辞
    sdjl
        9
    sdjl  
    OP
       2023-01-07 14:47:14 +08:00
    云数据库看起来像 MongoDB ,但其实不是 MongoDB 。

    需要完全重新学习这套 API ,学习成本高,且所学知识不能用于其他地方。
    sdjl
        10
    sdjl  
    OP
       2023-01-07 14:48:46 +08:00
    @registerrr "刚又看了一眼,5 折结束了,基础套餐 39 ,告辞"

    如果你想要把正式数据库和测试数据库分开,以免误操作正式环境,你还需要买两个云环境。
    registerrr
        11
    registerrr  
       2023-01-07 14:55:15 +08:00
    @sdjl
    2 个 39 么?之前好像一个号可以用两个免费额度的环境,现在这...幸好迁移的早,城市套路深,我要回农村

    - "云数据库看起来像 MongoDB ,但其实不是 MongoDB 。"

    这个确实,什么都好魔改一番,都得照着他的文档走(文档写的还辣鸡),就这还时不时,冷不丁的搞你一下。
    kingjpa
        12
    kingjpa  
       2023-01-07 14:57:02 +08:00
    云原生 本身解决的是人员成本,及产品可靠性。
    少一个服务端,少一个运维。一年节约多少成本。
    并发数上来的时候,代码架构不用做任何调整,直接+钱买量就可以。
    你自建不得分布式,负载均衡,一致性等策略吗?这都是成本啊
    sdjl
        13
    sdjl  
    OP
       2023-01-07 15:01:48 +08:00
    @kingjpa 你说得很有道理。

    但这篇帖子的目的是为了总结缺点,帮助做云开发的开发者提前了解坑在哪里,避免掉到坑里爬半天。

    所以,我们这篇帖子尽量不讨论“云开发也有优点”、“缺点优点各有利弊”这种话题。

    我们尽量总结遇到的坑和解决方案,帮助大家解决问题。
    sdjl
        14
    sdjl  
    OP
       2023-01-07 16:24:04 +08:00
    本地调试云函数容易超时,抛出 “Error: socket hang up” 异常。

    根据官方文档,可以在 IDE 中把云函数的超时时间设置为 60 秒,在小程序中可以修改 app.json 的 networkTimeout.request 字段为 60000 ,可把超时时间改为 60 秒。

    以上两个步骤均已改为 60 秒,但是本地测试时依然抛出 “Error: socket hang up” 异常。

    目前,我本地调试云函数,大概只能运行 10 秒,达不到官方文档说的 60 秒。
    qsfty909
        15
    qsfty909  
       2023-01-08 00:02:39 +08:00 via iPhone
    自己搭建后台服务器吧,你说的问题都不是问题
    sdjl
        16
    sdjl  
    OP
       2023-01-08 13:40:29 +08:00
    @qsfty909 不呢,我打算好好研究云开发,日后长期使用云开发。
    sdjl
        17
    sdjl  
    OP
       2023-01-08 13:41:35 +08:00
    就是因为我打算长期使用微信云开发做小程序,所以我才开了这么一个帖子来总结它的缺点。
    qsfty909
        18
    qsfty909  
       2023-01-09 00:54:58 +08:00 via iPhone
    @sdjl 流量成本比自己搭建要高太多了,请慎重
    sdjl
        19
    sdjl  
    OP
       2023-01-10 10:29:29 +08:00
    @qsfty909 "流量成本比自己搭建要高太多了,请慎重"

    是么,目前刚刚接触,还没有体会到,谢谢提醒。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3457 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 11:03 · PVG 19:03 · LAX 03:03 · JFK 06:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.