小程序云開(kāi)發(fā)優(yōu)缺點(diǎn)及適用場(chǎng)景調(diào)研

小程序云開(kāi)發(fā)

1、 基本概念

小程序云開(kāi)發(fā)是集成于小程序控制臺(tái)的原生 serverless 云服務(wù)。核心功能包括:云存儲(chǔ)、云數(shù)據(jù)庫(kù)和云函數(shù)。小程序云開(kāi)發(fā)解決了傳統(tǒng)開(kāi)發(fā)模式下開(kāi)發(fā)效率低、資源投入高、產(chǎn)品上線慢和日常運(yùn)維難等問(wèn)題。

開(kāi)發(fā)者可以使用云開(kāi)發(fā)開(kāi)發(fā)微信小程序、小游戲,無(wú)需搭建服務(wù)器,即可使用云端能力。云開(kāi)發(fā)為開(kāi)發(fā)者提供完整的原生云端支持和微信服務(wù)支持,弱化后端和運(yùn)維概念,無(wú)需搭建服務(wù)器,使用平臺(tái)提供的 API 進(jìn)行核心業(yè)務(wù)開(kāi)發(fā),即可實(shí)現(xiàn)快速上線和迭代,同時(shí)這一能力,同開(kāi)發(fā)者已經(jīng)使用的云服務(wù)相互兼容,并不互斥。

云開(kāi)發(fā)提供了幾大基礎(chǔ)能力支持:

能 力 作 用 說(shuō) 明
云函數(shù) 無(wú)需自建服務(wù)器 在云端運(yùn)行的代碼,微信私有協(xié)議天然鑒權(quán),開(kāi)發(fā)者只需編寫(xiě)自身業(yè)務(wù)邏輯代碼
數(shù)據(jù)庫(kù) 無(wú)需自建數(shù)據(jù)庫(kù) 一個(gè)既可在小程序前端操作,也能在云函數(shù)中讀寫(xiě)的 JSON 數(shù)據(jù)庫(kù)
存儲(chǔ) 無(wú)需自建存儲(chǔ)和 CDN 在小程序前端直接上傳/下載云端文件,在云開(kāi)發(fā)控制臺(tái)可視化管理
云調(diào)用 原生微信服務(wù)集成 基于云函數(shù)免鑒權(quán)使用小程序開(kāi)放接口的能力,包括服務(wù)端調(diào)用、獲取開(kāi)放數(shù)據(jù)等能力
云函數(shù)

云函數(shù)即在云端(服務(wù)器端)運(yùn)行的函數(shù)。在物理設(shè)計(jì)上,一個(gè)云函數(shù)可由多個(gè)文件組成,占用一定量的 CPU 內(nèi)存等計(jì)算資源;各云函數(shù)完全獨(dú)立;可分別部署在不同的地區(qū)。開(kāi)發(fā)者無(wú)需購(gòu)買(mǎi)、搭建服務(wù)器,只需編寫(xiě)函數(shù)代碼并部署到云端即可在小程序端調(diào)用,同時(shí)云函數(shù)之間也可互相調(diào)用。

云開(kāi)發(fā)的云函數(shù)的獨(dú)特優(yōu)勢(shì)在于與微信登錄鑒權(quán)的無(wú)縫整合。當(dāng)小程序端調(diào)用云函數(shù)時(shí),云函數(shù)的傳入?yún)?shù)中會(huì)被注入小程序端用戶的 openid,開(kāi)發(fā)者無(wú)需校驗(yàn) openid 的正確性因?yàn)槲⑿乓呀?jīng)完成了這部分鑒權(quán),開(kāi)發(fā)者可以直接使用該 openid。

當(dāng)前,云函數(shù)支持Node.js,后續(xù)將支持PHP、Java、Python等語(yǔ)言。

云存儲(chǔ)

云開(kāi)發(fā)提供了一塊存儲(chǔ)空間,提供了上傳文件到云端、帶權(quán)限管理的云端下載能力,開(kāi)發(fā)者可以在小程序端和云函數(shù)端通過(guò) API 使用云存儲(chǔ)功能。

在小程序端可以分別調(diào)用 wx.cloud.uploadFilewx.cloud.downloadFile 完成上傳和下載云文件操作。

云數(shù)據(jù)庫(kù)

云開(kāi)發(fā)提供了一個(gè) JSON 數(shù)據(jù)庫(kù),顧名思義,數(shù)據(jù)庫(kù)中的每條記錄都是一個(gè) JSON 格式的對(duì)象。一個(gè)數(shù)據(jù)庫(kù)可以有多個(gè)集合(相當(dāng)于關(guān)系型數(shù)據(jù)中的表),集合可看做一個(gè) JSON 數(shù)組,數(shù)組中的每個(gè)對(duì)象就是一條記錄,記錄的格式是 JSON 對(duì)象。

云調(diào)用

云調(diào)用是云開(kāi)發(fā)提供的基于云函數(shù)使用小程序開(kāi)放接口的能力,目前覆蓋以下使用場(chǎng)景:服務(wù)端調(diào)用、開(kāi)放數(shù)據(jù)調(diào)用和消息推送。

  • 服務(wù)端調(diào)用:云調(diào)用需要在云函數(shù)中通過(guò) wx-server-sdk 使用。在云函數(shù)中使用云調(diào)用調(diào)用服務(wù)端接口無(wú)需換取 access_token,只要是在從小程序端觸發(fā)的云函數(shù)中發(fā)起的云調(diào)用都經(jīng)過(guò)微信自動(dòng)鑒權(quán),可以在登記權(quán)限后直接調(diào)用如發(fā)送模板消息等開(kāi)放接口。

  • 開(kāi)放數(shù)據(jù)調(diào)用:云開(kāi)發(fā)的云調(diào)用,可直接獲取微信開(kāi)放數(shù)據(jù)。接口如果涉及敏感數(shù)據(jù)(如wx.getWeRunData),接口的明文內(nèi)容將不包含這些敏感數(shù)據(jù),而是在返回的接口中包含對(duì)應(yīng)敏感數(shù)據(jù)的 cloudID字段,數(shù)據(jù)可以通過(guò)云函數(shù)獲取。

  • 消息推送:云開(kāi)發(fā)也支持通過(guò)云函數(shù)接收小程序消息推送(如接收到客服消息時(shí)觸發(fā)云函數(shù))。只需兩步即可完成接入。

2、云開(kāi)發(fā)與傳統(tǒng)開(kāi)發(fā)對(duì)比

在傳統(tǒng)開(kāi)發(fā)模式中,開(kāi)發(fā)者需要從小程序端通過(guò)額外引用的SDK請(qǐng)求后端,需要關(guān)心彈性伸縮、異地容災(zāi)、網(wǎng)絡(luò)防護(hù)、安全加固等眾多條件。過(guò)多的業(yè)務(wù)邏輯需要處理,導(dǎo)致開(kāi)發(fā)效率偏低。而傳統(tǒng)開(kāi)發(fā)模式下,前后端分離與聯(lián)調(diào),往往導(dǎo)致上線效率低。在人力物力上,從物理機(jī)托管,到云主機(jī),再到容器,始終需要投入不少的人力物力。

相比而言,云開(kāi)發(fā)模式中,開(kāi)發(fā)者從小程序端通過(guò)小程序原生接口請(qǐng)求云開(kāi)發(fā)即可。

云開(kāi)發(fā)模式具備優(yōu)勢(shì)如下:

  • 開(kāi)發(fā)更簡(jiǎn)單

使用云函數(shù)時(shí),用戶只需編寫(xiě)最重要的核心業(yè)務(wù)代碼,不再需要關(guān)心負(fù)載均衡、自動(dòng)伸縮、網(wǎng)關(guān)等組件,也無(wú)需構(gòu)建應(yīng)用的后端服務(wù),極大地降低了后端開(kāi)發(fā)搭建的復(fù)雜性。無(wú)需手動(dòng)配置,云函數(shù)即可根據(jù)請(qǐng)求量自動(dòng)橫向擴(kuò)縮,自動(dòng)安排合理的計(jì)算資源滿足業(yè)務(wù)需求。

  • 開(kāi)發(fā)更高效快捷

云函數(shù)不要求特定框架或依賴,開(kāi)發(fā)者可以專注于核心代碼的開(kāi)發(fā)。同時(shí)開(kāi)發(fā)人員可以組成多個(gè)小團(tuán)隊(duì),單個(gè)模塊的開(kāi)發(fā)無(wú)需了解其他團(tuán)隊(duì)的代碼細(xì)節(jié)。

獨(dú)立開(kāi)發(fā)和迭代的速度變得前所未有的快,幫助用戶把握住產(chǎn)品上線的黃金時(shí)間。開(kāi)發(fā)可以使用云函數(shù)編寫(xiě)一些目的單一、邏輯獨(dú)立的業(yè)務(wù)模塊,因而可以完全復(fù)用已經(jīng)成熟的第三方代碼實(shí)現(xiàn)。

  • 運(yùn)維更省事

每個(gè)云函數(shù)都是單獨(dú)運(yùn)行、單獨(dú)部署、單獨(dú)伸縮,用戶上傳代碼后即可自動(dòng)部署,免除單體式應(yīng)用部署升級(jí)難的問(wèn)題。

用戶不再需要對(duì) OS 入侵、登錄風(fēng)險(xiǎn)、文件系統(tǒng)安全、網(wǎng)絡(luò)安全和端口監(jiān)聽(tīng)做復(fù)雜的配置和管理,一切交由平臺(tái)處理,平臺(tái)通過(guò)定制化的容器保證每個(gè)用戶的隔離性。

  • 成本更低

按請(qǐng)求數(shù)和資源端運(yùn)行收費(fèi),極大節(jié)約時(shí)間和成本,同時(shí)還提供一定量端免費(fèi)額度。

云開(kāi)發(fā)的缺點(diǎn):

  • 1.云函數(shù)運(yùn)算時(shí)間不得超過(guò)3秒
    超過(guò)3秒未處理完成,直接返回錯(cuò)誤。

  • 2.云函數(shù)單次返回?cái)?shù)據(jù)不得超過(guò)1M
    超過(guò)1M直接報(bào)錯(cuò)

  • 3.云函數(shù)讀取數(shù)據(jù)庫(kù)較慢
    云函數(shù) 云數(shù)據(jù)庫(kù)感覺(jué)應(yīng)該在同一物理環(huán)境下,但其實(shí)并不是,應(yīng)該處于不同的云端,因?yàn)樽x取100次數(shù)據(jù)就已經(jīng)超過(guò)3秒了

  • 4.云函數(shù)并發(fā)次數(shù)有限
    這個(gè)文檔里面配額寫(xiě)得很清楚,免費(fèi)版并發(fā)數(shù)只有20次,這里的并發(fā)估計(jì)是每秒鐘調(diào)用次數(shù),因?yàn)榇_實(shí)很慢很慢,據(jù)我實(shí)踐,每隔半秒調(diào)用一個(gè)云函數(shù),調(diào)用100遍,還是報(bào)告調(diào)用次數(shù)超限。

  • 5.云函數(shù)不適合做數(shù)據(jù)庫(kù)的較大數(shù)量查詢功能
    鑒于上述4點(diǎn)功能,意味著不要在云函數(shù)進(jìn)行較大的數(shù)據(jù)讀取操作,只適合進(jìn)行10條左右的敏感數(shù)據(jù)讀取,如用戶信息等。因?yàn)檫M(jìn)行較大數(shù)據(jù)查詢時(shí),要么因?yàn)榉祷財(cái)?shù)據(jù)量過(guò)大被報(bào)錯(cuò),要么因?yàn)樵L問(wèn)數(shù)據(jù)時(shí)間過(guò)長(zhǎng)被報(bào)錯(cuò),也不要想著分幾次從云函數(shù)從獲取小數(shù)據(jù)再到前端組合,因?yàn)樵坪瘮?shù)并發(fā)數(shù)有限制,請(qǐng)把讀數(shù)據(jù)庫(kù)的操作交給前端直接讀取,雖然這樣不安全……

  • 6.云函數(shù)云端測(cè)試功能超慢
    建議在前端寫(xiě)一個(gè)js測(cè)試云函數(shù)功能,因?yàn)楦杏X(jué)云端測(cè)試功能慢十倍,網(wǎng)絡(luò)不好有時(shí)還會(huì)報(bào)錯(cuò)……

  • 7.云函數(shù)讀取云數(shù)據(jù)庫(kù)單次最多讀取100條
    超過(guò)100條需要使用 skip() ,分多次將數(shù)據(jù)組合起來(lái)

  • 8.小程序前端讀取云數(shù)據(jù)庫(kù)單次最多讀取20條
    一樣使用skip() ,需要注意的是,小程序前端不能使用 skip(0),會(huì)報(bào)錯(cuò),所以在第0頁(yè)時(shí),取消skip()函數(shù)

  • 9.異步請(qǐng)求需要通過(guò)Promise來(lái)處理

    在云函數(shù)中,我們大多會(huì)實(shí)現(xiàn)一些再小程序中無(wú)法實(shí)現(xiàn),或者受域名限制的請(qǐng)求接口,這是我們不能適用傳統(tǒng)的callback方法來(lái)進(jìn)行請(qǐng)求,因?yàn)閭鹘y(tǒng)的callback方法執(zhí)行完成后,云函數(shù)早已將數(shù)據(jù)返回給客戶端,我們需要使用Promise來(lái)處理。

  • 10.權(quán)限結(jié)構(gòu)比較簡(jiǎn)單

    小程序云開(kāi)發(fā)提供的數(shù)據(jù)庫(kù)權(quán)限僅有四種

    模式 讀自己創(chuàng)建的數(shù)據(jù) 寫(xiě)自己創(chuàng)建的數(shù)據(jù) 讀他人創(chuàng)建的數(shù)據(jù) 寫(xiě)他人創(chuàng)建的數(shù)據(jù) 管理端 讀寫(xiě)任意數(shù)據(jù)
    僅創(chuàng)建者可寫(xiě),所有人可讀 ×
    僅創(chuàng)建者可讀寫(xiě) × ×
    僅管理端可寫(xiě),所有人可讀 × ×
    僅管理端可讀寫(xiě):該數(shù)據(jù)只有管理端可讀寫(xiě) × × × ×

    簡(jiǎn)而言之,管理端始終擁有讀寫(xiě)所有數(shù)據(jù)的權(quán)限,小程序端始終不能寫(xiě)他人創(chuàng)建的數(shù)據(jù),小程序端的記錄的讀 寫(xiě)權(quán)限其實(shí)分為了 “所有人可讀,只有創(chuàng)建者可寫(xiě)“、”僅創(chuàng)建者可讀寫(xiě)“、”所有人可讀,僅管理端可寫(xiě)“、”所有人不可讀,僅管理端可讀寫(xiě)“。

    對(duì)于絕大多數(shù)情況,簡(jiǎn)單的使用這四種權(quán)限根本無(wú)法滿足我們的要求,因此,我們還需要在代碼層面進(jìn)行一些判斷來(lái)確保具體的表現(xiàn)如我們所想的那樣。

  • 11.對(duì)外開(kāi)放限制多

    一個(gè)正常的小程序項(xiàng)目一般都會(huì)配一個(gè)后臺(tái)管理系統(tǒng),這個(gè)后臺(tái)管理系統(tǒng)與小程序共用一個(gè)數(shù)據(jù)庫(kù),來(lái)對(duì)數(shù)據(jù)進(jìn)行管理。由于小程序云開(kāi)發(fā)自帶的云數(shù)據(jù)庫(kù)在小程序內(nèi)部,外部要是想訪問(wèn)這個(gè)數(shù)據(jù)庫(kù)則需要一個(gè)稍微復(fù)雜的流程:
    先使用官方接口獲取到調(diào)用憑證,在通過(guò)這個(gè)憑證使用指定的接口來(lái)對(duì)數(shù)據(jù)庫(kù)進(jìn)行增刪改查。此外這個(gè)流程中消耗的資源也是算在基礎(chǔ)配置里的,每日請(qǐng)求上線5萬(wàn)次。

    1. 后期移植不方便

    如果企業(yè)完全使用云開(kāi)發(fā)開(kāi)發(fā)小程序,然后由于某種原因不能使用這種方式了,想獨(dú)立部署后端的話,將要面臨如何移植的問(wèn)題。云開(kāi)發(fā)太依賴微信平臺(tái)了。

3、小程序云開(kāi)發(fā)適合什么樣的場(chǎng)景?

所有的業(yè)務(wù)邏輯都僅僅需要在小程序端完成,無(wú)需過(guò)于復(fù)雜的管理邏輯(這是因?yàn)樵坪瘮?shù)、云數(shù)據(jù)庫(kù)無(wú)法在小程序以外的區(qū)域調(diào)用,因此無(wú)法實(shí)現(xiàn)強(qiáng)大的 Web 管理界面)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容