微信小程序開發注意點和坑集


開發(Tips)

 

避開頻繁setData *

        小程序端對於頻繁的邏輯層和顯示層的交互很不友好,特別是安卓機,與瀏覽器上js直接操作DOM不同,小程序通過邏輯更新顯示層並不完全實時,開發者應避免出現頻繁setData以達到某種視覺效果的操作,如有需要,直接使用框架或頁面自帶的組件。

 

組件化開發和分包加載

官方對小程序本身大小的限制為:

         ▪  整個小程序所有分包大小不超過 8M

         ▪  單個分包/主包大小不能超過 2M

        為節省代碼和方便團隊協作開發,應盡量采用組件化開發方式,業務上更好地解耦協作,考慮控制主包不超過2M大小和優化首頁加載速度,應優先使用分包加載。

 


 

調試(Tips)

 

避開請求域名以及 TLS 版本校驗

        ▪  開發者工具右上角“詳情”

        ▪  手機端右上角  ···  ->  打開調試

 


 

框架坑)

 

enablePullDownRefresh

    Q: 頁面開啟下拉刷新,下拉刷新時ios會出現頁面向上彈一下再回彈的情況。

    S: 下拉刷新的時候不要同時調用wx.showLoading。

 


 

組件坑)

 

web-view

    Q: web-view組件沒有完全覆蓋頁面,底部留有空隙。

    C: 造成上面情況的前提是小程序配置有tabBar且小程序的初始頁面為tabBar的其中一個tab,后面打開web-view頁面時,web-view高度計算為當前頁面減去底部tabBar的高度,所以底部留出了tabBar高度的空隙。

    S: 初始頁面為非tab頁面再進行跳轉到tab頁面。

 

    Q: 小程序端首次授權拿不到faiOpenid導致卡包中心列表中沒有獎品記錄。

    S : 在小程序里拿到unionid通過參數帶到web-view中,再在游戲端做關聯邏輯處理。

 

input

    Q: 當刪除文字時,部分安卓機會監聽兩次,第一次是空字符串,第二次才是當前文本。

    S: 對input的監聽進行函數防抖操作,如設置300ms的防抖時差,即bindinput獲取到input的內容值后300ms內如果沒有再觸發一次input事件,那么就對當前的值進行下一步操作,從而避開上述的空字符場景。

 

    Q: 在小米8上,input組件無法被彈起,特別是fixed懸浮在底部時。

 

button

    Q: 無法去除邊框

    S: 添加偽元素樣式,代碼如下:

button::after{
  border: none; 
}

 

textarea

    A : textarea組件是使用元素組件層級最高,導致在使用是出現各種問題

 

swiper

    A : 將swiper組件當tab導航使用時,在它的內容層級使用swiper-view組件, 當點擊tab導航時,改    current,觸發swiper的 bindchange時,使用setData改變current會導致鬼畜。更改swiper-view為view,判斷sourc操作來源,可以在一定程度上解決問題。

 


 

接口坑)

 

wx.navigateBack

    Q: 在安卓機下,從頁面pageA中navigateTo進入到pageB,在pageB的生命周期函數onLoad或onShow中調用wx.navigateBack會出現小程序直接退出的情況。

    S: wx.navigateBack的使用改為在onReady中可一定頻率上避免,但不能100%避免,如果真有必要進行以上邏輯,可多做一步setTimeout延時操作。

 

wx.getUserInfo

    A: 官方對此接口做了調整: 當用戶未授權過,調用該接口將直接進入fail回調,而不會再出現授權彈窗,目前體驗版和開發版已做此調整,線上暫時沒做調整,預計后面會進行過渡調整,后面開發應以新的接口方案做流程,改用 <button open-type="getUserInfo"></button> 引導用戶主動進行授權操作。

 

selectorQuery.select

    A: 通過selectorQuery拿到元素的信息時應注意,對於被撐開的容器,當該容器內部存在獨立組件時,所拿到的容器高度不一定准確,推測計算原理是遍歷容器內元素,但組件內信息無法直接獲取。

 

wx.setBackgroundColor

    Q: 在IOS端設置backgroundColor參數有時會失效。

    S: 在onload生命周期函數中設置可一定程度避免失效,最好是同時設置backgroundColor,backgroundColorTop,backgroundColorBottom。

 


 

樣式坑)

 

transform

    A: 一些版本的小程序只支持translate和translate3D,對於translateX/Y/Z不支持。

 

image

    Q: 設置image為圓角時,加載圖片后會先刪一下再變成圓角。

    C: 圖片加載后觸發頁面大面積繪制,頁面來不及反應造成渲染掉幀/卡幀。

    S: 使用GPU加速,代碼如下:

image{
    will-change: transform;
}

inline-block

    Q:ios下,相鄰的兩個塊用了inline-block,第二個元素位置會比預期的位置要低很多。

    S:使用float或者flex或者absolute布局,讓此元素變成塊。

 

position : fixed

    Q:開啟下拉刷新后,ios端fixed元素不會隨頁面下拉刷新而向下移動,從而擋住了加載樣式。

    S:在ios端動態設置fixed元素的position,當頁面滾動 scrollTop < 0 時,將元素position設為absolute。(已棄用)

    S:使用 position : sticky ,該布局相當於 fixed 和 absolute 的結合版,詳情見 http://www.css88.com/book/css/properties/positioning/position.htm(低版本安卓可能不支持該屬性值,部分版本因為內核的變換也可能不支持,故要做好兼容處理,可用fixed做兼容)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM