微信小程序踩坑合集

前言

没啥好说的,微信小程序的运行环境和浏览器有一些区别,遇到啥问题就解决啥问题,这里记录一下。

本文创作时,精神状态不佳,请理性看待。

解析 HTML/XML

DOMParser

首先是浏览器自带的 DOMParser,这玩意微信小程序没有,PASS。

jsdom

这玩意只能在 node 环境运行,PASS!!

htmlparser2

应该是可以的,但不会用(逃。

Cheerio

最后用了这个,仿 jQuery 的库,体验还可以。

读取数据文件

我有一个十多兆的 json 文件,需要在 js 中读取,相当于是本地数据库。

编译器炸了

因为文件比较大,uniapp 的编译器直接 oom 了。

去配置里面把可用内存调大,可以了。

直接放 static 目录

哈哈,不行。微信小程序首页包限制 2M 大小。

分包

那我把数据文件分到其他包总可以了吧。

哈哈,不行。微信小程序单包限制 2M,总大小限制 20M,你接着表演。

gz 压缩

压一下,给压缩到 1.5M 了,感觉有希望。

但是。哈哈,不行。uniapp 没有读取本地文件的 api,本地文件只能 import js 代码,你的 gz 根本读不到。

base64 编码

那就把压缩包用 base64 编码,然后做成一个 export 了一个很长的字符串的 js 模块。

但是。哈哈,不行,编码之后又变成 2M 了,牙膏倒吸了属于是,又超容量了。

gz 压缩包挂服务器上

行吧,那只能运行的时候动态下载了,看来白嫖 cdn 的梦想破灭了。

把压缩包托管在服务器上,小程序里面再 uni.request 下载下来。

但是。哈哈,不行。uni.request 只支持返回 string,不支持返回原始的二进制文件。我传输的是二进制文件,转 string 会有损耗捏。,uni.request 这玩意连浏览器自带的 fetch 都不如,我*。

base64 编码过后的 gz 压缩包挂服务器上

如题,再套一层 base64 编码。

总算是可以了捏。

回顾上面的数据文件之后,相比之下,下面这这些问题都感觉温柔了许多呢。

atob & btoa

小程序环境没有 atob / btoa ,自己写一个就行

导入下面的库就行了

https://github.com/equicy/weapp-jwt-decode

下载到本地,然后 import

1
import { weAtob } from "./weapp-jwt";

TextEncoder & TextDecoder

同上,导入个库就行了

https://github.com/anonyco/FastestSmallestTextEncoderDecoder/blob/master/EncoderDecoderTogether.min.js

下载到本地,然后 import

1
import { TextDecoder, TextEncoder } from "./[EncoderDecoderTogether](https://github.com/anonyco/FastestSmallestTextEncoderDecoder/blob/master/EncoderDecoderTogether.min.js)";

https://developers.weixin.qq.com/community/develop/doc/000ca85023ce78c8484e0d1d256400

https://blog.csdn.net/asa12345asas/article/details/132762537

Licensed under CC BY-NC-SA 4.0