微信小程序開發問答《七十九》不(bù)能使用session如何解決 & 小程序處理JS很慢 ...
發表時(shí)間:2021-3-31
發布人(rén):融晨科技
浏覽次數:76
1、微信小程序請求不(bù)能使用session如何解決?
A:本人(rén)在(zài)前面的(de)微信小程序開發《二》中提到(dào)要(yào / yāo)想在(zài)服務端保持狀态需要(yào / yāo)在(zài)客戶端第一次請求服務器的(de)時(shí)候給客戶端返回一個(gè)sessionid,由客戶端在(zài)本地(dì / de)保存,下次請求的(de)時(shí)候在(zài)header裏面帶上(shàng)這(zhè)個(gè)sessionid,寫到(dào)cookie字段裏。但是(shì)最近發現請求時(shí)哪怕每次在(zài)header裏帶上(shàng)sessionid還是(shì)不(bù)能拿到(dào)同一個(gè)session,百度後終于(yú)發現坑了(le/liǎo)(也(yě)不(bù)知道(dào)微信爲(wéi / wèi)啥要(yào / yāo)這(zhè)麽做),原來(lái)微信對wx.request這(zhè)個(gè)API做了(le/liǎo)修改,小程序發起的(de)請求并不(bù)是(shì)直接請求我們的(de)後台服務器,而(ér)是(shì)先通過微信的(de)服務器再發送到(dào)我們的(de)後台服務器,既然請求都是(shì)要(yào / yāo)通過微信的(de)服務器發送到(dào)我們的(de)服務器,那麽我們的(de)服務器也(yě)就(jiù)無從識别請求的(de)發起者了(le/liǎo)。因此,session在(zài)微信小程序的(de)後台開發中是(shì)無法使用的(de)。
既然session無法使用,對于(yú)本人(rén)這(zhè)種web的(de)後端程序猿該如何是(shì)好,隻能用别的(de)方式來(lái)代替了(le/liǎo)哦。我用了(le/liǎo)redis來(lái)代替session的(de)功能,當客戶端發送請求到(dào)後台服務器時(shí),生成一個(gè)随機字符串作爲(wéi / wèi)key,原本要(yào / yāo)放入session的(de)内容,一般是(shì)用戶信息作爲(wéi / wèi)value存入redis中,然後将key返回給客戶端,客戶端将key存在(zài)本地(dì / de)的(de)storage,在(zài)下次請求的(de)時(shí)候以(yǐ)參數據形式将key帶上(shàng),這(zhè)樣當後端服務器接收到(dào)key時(shí)便可以(yǐ)從redis中查找該key對應的(de)value,從而(ér)實現了(le/liǎo)替代session的(de)效果,redis還可以(yǐ)設置key失效的(de)時(shí)間。
2、微信小程序報錯: Cannot read property '0' of undefined
A:今天遇到(dào)了(le/liǎo)一個(gè)bug:
VM4735:2 Uncaught TypeError: Cannot read property '0' of undefined
查了(le/liǎo)很久發現是(shì)三目運算寫錯了(le/liǎo),這(zhè)種低級錯誤容易犯,而(ér)且又很難發現。
最後是(shì)一段一段注釋掉,用排除法來(lái)縮小範圍來(lái)找到(dào)的(de)。直接看代碼很難發現。
<view>{{param:1:2}}</view>
to
<view>{{param?1:2}}</view>
3、小程序裏面不(bù)支持document或window語法,那請問這(zhè)裏要(yào / yāo)用什麽方式來(lái)代替?
A:由于(yú)框架并非運行在(zài)浏覽器中,所以(yǐ) JavaScript 在(zài) web 中一些能力都無法使用,如 document,window 等。
https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-react.html
https://mp.weixin.qq.com/debug/wxadoc/dev/framework/view/wxml/data.html
4、爲(wéi / wèi)啥小程序處理JS很慢很慢 ?
我在(zài)網頁上(shàng)跑 這(zhè)一段代碼一兩秒就(jiù)可以(yǐ)了(le/liǎo),在(zài)小程序上(shàng)跑了(le/liǎo)10秒左右,這(zhè)段代碼有130行左右,一直循環匹配,太耗性能了(le/liǎo)吧,在(zài)網頁上(shàng)還好。小程序裏太慢了(le/liǎo)!
A:看樣子(zǐ)應該是(shì)你數據量太大(dà)了(le/liǎo),調用setData之(zhī)後覺得卡頓,建議不(bù)要(yào / yāo)用setData傳輸太大(dà)的(de)數據(可以(yǐ)分塊傳輸) https://mp.weixin.qq.com/debug/wxadoc/dev/framework/performance/tips.html