微信小程序開發記
1. 背景故事
自從幾年前開了個人網站後,每次發文章順帶更新公衆號,在公衆號後臺有微信小程序相關設置,公衆號沒什麼新鮮的,給我的感覺就是網站那一套換了個皮,中文互聯網有百度這個毒瘤把控入口,還有備案什麼的政策限制,生出個公衆號理所當然,母語是英文的人做網站基本沒什麼障礙,比如很多印度人就能開網站通過Adsense賺錢。小程序倒是非常有中國特色,一定程度上擺脫了國外操作系統生態控制,於是想嘗試下利用業餘時間開發個小程序給自己用。
誰能想到,小程序出來8年了,其開發者工具都不支持 Linux 平臺,對我來說,這是最大障礙。有幾次我準備開始的時候,遠程連接到一個Mac Pro 14上,卡得不行,只好放棄,總不能爲了一碟醋整盤餃子,去買個Mac設備。
直到前陣子偶爾發現 AUR 倉庫中的 wechat-devtools-git
包,嘗試了下可用,那可比遠程到老舊Mac電腦上開發爽多了。
截圖證明:
2. 開發小程序的目的
- 接觸各種技術生態,鍛鍊能力;
- 做工具給自己用;
- 想辦法脫離中大陸的公司搞錢,打工苦打工累的時候,你會理解的,小程序能接廣告,程序寫好了,基本變動很少,不像公衆號碼字都很費勁,省心;
- 能少玩遊戲。
3. 初始版本開發
-
程序開發:
看了點官方教程和B站上的視頻,在AI的加持下,初始版本差不多幾個小時就完成了,出乎意料的順利。畢竟小程序也就是變種 js + html + css,也可能是很久前,我就開始琢磨要做的是什麼了吧。
-
小程序頭像製作:
先讓AI幫我生成基本圖片,然後使用GIMP 和 Inkscape進一步處理,編輯圖片的能力日漸長進。
-
小程序備案:
沒錯,小程序也是要備案的,一切都在掌握之中,不服的話,各種功能受限,基本做不了。備案就是要等各地通管局審批,沒有進度提示的,你等着就好了,不服也是不行的。好處是不要錢,如果這也算好處的話🤷♂️...
-
微信認證:
這個說實在話,應該改名叫微信服務費,就像蘋果開發者也要每年收費一樣。個人每年¥30,賺不回來這30塊,就只能一直虧本、放棄或者只給自己用,畢竟流量是騰訊的,收錢有門檻,一定程度上也有道理。我看有很多去水印的小程序,應該使能收回本錢的。微信認證後,別人才能搜到你的小程序。
-
服務端
微信小程序相當於個前端,當然如果簡單的全是靜態內容,那沒什麼好說的。後端因爲我有網站,丐版vps、域名什麼的。證書也是caddy自動申請的,對我來說,沒有額外成本。你也可以用付費使用騰訊的配套雲服務,人窮,我都是全部自己搞定的。
從上面可以看出,除了給個30塊服務費,理解下政府監管,剩下的就看你自己造化了。前幾天看到個圖片,企業盈利達到幾百萬門檻後,交稅25%,4塊收1快,這麼一想是不是會釋然很多。
4. 優化
-
前端優化:
AI輔助編程,有時候寫得很囉唆、樣式不好看等,都需要自己把關調整下。
-
後端優化:
一開始後端接口我用fastapi實現,發現返回比較慢, 壓測方法如下所示:
1echo "GET http://localhost:8000/api/xxx_your_api" | vegeta attack -duration=10s -rate=100 | vegeta report
因爲服務器在外國,慢的時候要幾百ms,讓AI換成Golang版本的,有很大改觀,但是個別時候不穩定,不知道是不是gc的原因。
又讓AI換了個 rust 版本的,非常穩定,幾乎沒有特別慢的,除非網絡抖動,內存和cpu佔用也有所減少,簡直丐版服務器福音啊。於是我先用fastapi實現基本邏輯,再讓AI幫忙換成 rust 版本部署到服務器上。這裏不得不說,二進制部署相比Python部署就是好,放上去,用systemd接管就完事了。
-
壓縮:
對於微信小程序來說,後端返回數據用個高效壓縮算法果非常顯著。
1 2# response 3access-control-allow-credentials: true 4alt-svc: h3=":443"; ma=2592000 5content-encoding: br 6content-length: 2225 7content-type: application/json 8date: Fri, 01 Aug 2025 10:42:50 GMT 9vary: Origin, Access-Control-Request-Method, Access-Control-Request-Headers 10vary: Accept-Encoding 11via: 1.1 Caddy 12 13 14# request 15:authority: stock.mephisto.cc 16:method: GET 17:path: /api/meta/info 18:scheme: https 19accept: */* 20accept-encoding: gzip, deflate, br
上面的示例可以看出,微信默認是不支持zstd壓縮,至少我沒搞定也沒搜到解決辦法。只能退而求其次選用 br,比默認的gzip好一點。從 response 中看出 br 壓縮生效。
Caddy 默認是不支持 br 壓縮的,得打上額外的包,br 包有兩個版本,要選cgo性能高的版本。這種情況,壓縮在web server層做比在後端做好。
1CGO_ENABLED=1 \ 2xcaddy build \ 3 --with github.com/dunglas/caddy-cbrotli \ 4 --with github.com/mholt/caddy-ratelimi
Caddyfile 裏面這樣寫,會按順序依次優先配備。
1encode zstd br gzip
-
安全防範
網絡世界,安全威脅始終存在,細心的同學就能注意到上面 xcaddy 額外編譯了 ratelimi 模塊,用來限流限速的。不會的可以看看對應的github文檔,要花時間理解。
此外我還加了接口認證,也是在 Caddy 層面做的,只接收來自小程序本身的接口請求,在服務器上 tcpdump 抓包就能看到微信小程序請求有些什麼特徵,識別特徵,針對性放行。
-
邏輯變更
由於微信發版是要審覈的,快的時候40分鐘,慢的時候一天多或者幾天,部分邏輯適合寫在後端的,還是會方便很多,後端自己能完全掌控,隨便發版的。劣勢是會多了網絡開銷,看自己取捨了。
5. 推廣
小程序我目前還沒有完全打磨好,還在想法添加功能,內容也是來自github公共倉庫,所以也沒打算外部推廣,只在自己網站文末加了二維碼展示,有興趣的可以掃碼試試看,隨緣吧。
當然,能賺點錢更加好,至少能賺回¥30快成本費用,還沒算時間付出。
版權申明:
- 未標註來源的內容皆為原創,未經授權請勿轉載(因轉載後排版往往錯亂、內容不可控、無法持續更新等);
- 非營利為目的,演繹本博客任何內容,請以'原文出處'或者'參考鏈接'等方式給出本站相關網頁地址(方便讀者)。
相關文章:
- Wine安裝64位微信
- 如何修復Waybar微信圖標錯誤
- Linux環境下維護公衆號記錄
- Wine安裝微信保姆教程
- 解決Arch下VSCode無法輸入中文的問題
- 迷你主機組裝記
- greetd和regreet使用教程
- 我的工具箱
- Xray科學上網簡要
- Arch linux如何順暢連接藍牙設備