悲愤前行,记录那些我在开发uniapp(微信小程序方向)遇到的疑难杂症

1,260 阅读5分钟

前言

大家好,我是抹茶。
之前在一周内从入门uniapp到开发出一个初步版本,写了一篇文章一周时间,用uniapp + uniCloud 全干开发了一个小程序,因为微信限制个人开发者做社交内容,所以一些高级的功能暂时无法通过审核,我就先利用体验版,做了小范围的内测,收集了一些用户反馈。在周六的时候花了一天去实现这些优化点,过程中遇到了一些难题,予以记录,希望也能帮到其他人。

收集到的优化点

序号功能功能介绍
1看法编辑可以对已经发布的看法进行编辑
2看法删除可以删除看法
3评论附加图片评论可以添加图片(根据和小红书、抖音的竞品调研,目前支持一张)
4复制文本可以复制看法内容
5搜索可以根据主题或内容进行关键字搜索

本期迭代功能成果

4.png 3.png 2.png 1.png

爬坑史

1.uniapp 的tabBar设计目前不支持在微信小程序监听导航按钮的点击事件

问题详情

当我看到可以监听midButton,那就可以通过监听事件进行权限判断(因为创建需要先登录),就开始编码实现,在web端效果完美。😁 image.png

等我运行在微信小程序的时候,傻眼了,中间的按钮不见了,还好控制台有报错提示。

image.png

追查一下

image.png

好家伙,只支持H5,其他的小程序都不支持,那么详细具体的tabBar配置设计,如下图,因为没有支持按钮的监听事件,就完全用不了这套方案了,谁懂啊。

image.png

下次一定一定一定(重要事情说三遍)先确认好兼容性!不能因为它的方案资料完备而具体就默认它绝对在需要的业务场景可行。

解决方案 从github的历史版本用找到自己写的BottomNav,用自己写的组件来做导航。

2.微信小程序不支持嵌套选择器和::v-deep

问题详情

本次需要支持评论的时候支持上传图片,所以用到uniapp的uni-file-picker组件,在缩小容器的宽度后,发现删除按钮不在右上角,故而需要修改uni-file-picker组件的样式

image.png

1.尝试用v-deep穿透覆盖样式

我先是采用了::v-deep,H5就正常了,修改的大概如下


::v-deep .uni-file-picker {
    overflow: visible;
}

::v-deep .file-picker__box-content {
    overflow: visible;
}

::v-deep .icon-del-box {
    top: -40%;
    right: -40%;
}

但是微信小程序还是冥顽不灵,没有作用,问了GPT

image.png

image.png

2.尝试用css传统的子代选择器

那我就用其他方案

.img-picker > .uni-file-picker{
       overflow: visible !important;
}


.img-picker  > .uni-file-picker  > .uni-file-picker__container > .file-picker__box {
        width: 100% !important;
        padding-top: 100%;
}


.img-picker  > .uni-file-picker > .uni-file-picker__container  >.file-picker__box > .file-picker__box-content {
        overflow: visible;
}

3.尝试修改组件源码增加特殊css类名

还是不行,尝试新方案,改uni-file-picker组件源码,加一些特别类名

image.png

4.尝试将覆盖的样式写到全局文件

H5又行了,但是微信小程序还是不行,推断是样式的覆盖问题,或者是引用的先后顺序导致在微信小程序中无效,所以在打包后的微信小程序app.wxss(全局样式文件)试了一下,微信小程序就正常了,故而针对微信小程序侧的解决方案是把覆盖的样式写到微信全局变量中。

曾经的解决方案

1.将样式覆盖写到全局样式中,在uniapp项目中是写到App.vue文件中

image.png

2.如果只在App.vue中写样式覆盖,H5侧还是会有问题,所以还需要在具体的组件内部写样式覆盖,就能兼容H5和微信小程序

image.png

最终采用的解决方案 在了解到uniapp 在H5会默认开启scoped后,且v-deep 之类的语法在微信小程序无效,最终在App.vue文件中用子代选择器通过叠加选择器权重的方式,进行样式覆盖。

默认开启scoped出自官网标注:

image.png

最终统一在App.vue文件进行样式覆盖,H5和微信侧都能生效。 image.png

非技术的难点

1.硬件资源不如大公司

这个产品属于自己研究阶段,所以就购买了unicloud按流量计费的服务器资源,在测试点赞功能的时候,感觉好慢,所以看了RTT。

等待服务器响应用了985.02ms

image.png

随机选了一个掘金的接口查看,等待服务器响应用了68.11ms

image.png

14倍的性能差距。公司默认都有CDN资源和专门的SRE团队,工作日常只需要配置一下就行,也是第一次真切意识到没有CDN,性能会差那么多。(unicloud支持购买CDN,付费就行)\ image.png

2.没有团队协作,某些方面做得不如公司精细

因为没有专门的UI设计师,目前的精力分配也不允许我从0学习UI设计,目前的UI是相当简单不够精细的,慢慢来做得精细吧。

总结

本文主要包含了三个方面的内容。

第一点,从产品设计的角度,收集分析用户需要哪些功能。

第二点,从积累经验的思考定位问题的角度,介绍在过程中我遇到了哪些问题,又是如何一步一步尝试各种方案最终解决问题的,思考的和尝试的过程以及收获的经验比较重要。

第三点,从不同场合角度,思考总结如果是独立开发,相比于在某个集体中当螺丝钉,会遇到哪些挑战。