1.序言
這篇文章獻給那些準(zhǔn)備從其他語言開發(fā)轉(zhuǎn)到小程序開發(fā)的的程序員。程序員是個需要終身學(xué)習(xí)的職業(yè),技術(shù)的更新迭代,以及市場和公司業(yè)務(wù)的變化都需要調(diào)整自己的技術(shù)方向來與之適應(yīng)。本人這么多年也經(jīng)過多次的技術(shù)轉(zhuǎn)型變化架忌,從最開始用c# sqlserver javascript 開發(fā)web系統(tǒng)和網(wǎng)站,后來隨著移動互聯(lián)網(wǎng)時代的來臨我衬, 學(xué)習(xí)objective-c c++轉(zhuǎn)到ios移動端的開發(fā)叹放,曾今有一段時間去學(xué)習(xí)cocos2d、 opengl es挠羔、 unity3d 差點轉(zhuǎn)型去做游戲井仰,如今的AI深度學(xué)習(xí)在NLP 和 視覺上取得很大的突破,業(yè)余時間也在學(xué)習(xí)python 和 相關(guān)方面的數(shù)學(xué)破加、框架俱恶、作為興趣研究這一領(lǐng)域,程序員就是一個一直在折騰自己的職業(yè),只有在不影響本職工作下不斷學(xué)習(xí)才能適應(yīng)這個時代的變化『鲜牵現(xiàn)在微信小程序的大熱了罪,借助微信龐大社交能力來引流獲客、開發(fā)成本低聪全、以及不需要安裝等等一些優(yōu)點泊藕, 很多app都不錯過這個流量入口開發(fā)了小程序版。
2.小程序開發(fā)與ios開發(fā)比較
同為一種客戶端难礼,首先來說微信小程序的api 框架設(shè)計還是不錯的娃圆,上手很容易,看2遍api 下幾個demo看看別人的代碼鹤竭,基本就能開始做項目了,當(dāng)然對于那些有前端經(jīng)驗的來說就更簡單了景醇,對于非前端比如ios android 轉(zhuǎn)過來寫小程序臀稚,會比較陌生的是css,不過問題也不大三痰,百度一下吧寺,問問同事很快就能學(xué)會了。從一個高級面向?qū)ο笳Z言轉(zhuǎn)到腳本語言剛開始還是會有些不適應(yīng)的散劫。
1.ios上自帶的很好用的觀察者模式通知稚机,kvo。在小程序上需要自己去設(shè)計實現(xiàn)获搏。首先介紹一下這個觀察者模式赖条,舉個栗子,比如ios的通知常熙,你的頁面A纬乍、B、C同時訂閱一個通知裸卫,你在controll層或者其他頁面執(zhí)行了業(yè)務(wù)操作仿贬,需要更新這些頁面的某些值或刷新一些ui顯示,那這時候只需要發(fā)送一個通知墓贿,傳遞一個值茧泪,訂閱的頁面收到通知就能做出相應(yīng)的修改,比如小程序里Tabbar的幾個頁面想在c頁面修改了值聋袋,更新a頁面的某個ui顯示队伟,有了觀察者模式就不需要用全局變量來控制交互了,還有組件幽勒,多層組件之間互相需要傳遞信息更新ui等操作都會很方便缰泡。這里我說下ios里觀察者的設(shè)計思路,還沒來得及在小程序中實現(xiàn),今后的文章中我會把實現(xiàn)教程發(fā)出來棘钞,首先觀察者用單例模式建立一個觀察中心缠借,訂閱者需要把對象本身的指針引用 、一個訂閱名稱宜猜、一個通知執(zhí)行的函數(shù)閉包泼返,發(fā)送給訂閱中心,訂閱中心收到相應(yīng)的訂閱名稱需要update的時候姨拥,就可以根據(jù)訂閱名給訂閱者發(fā)送通知了
2.ios上還有一個很好的優(yōu)化思路我覺得值得借鑒绅喉,當(dāng)初iphone4? 1Ghz 512內(nèi)存 比安卓2G 4G 雙核 4核還流暢,一個很重要的原因就是得益于系統(tǒng)的優(yōu)化叫乌,其中最主要的思想就是只渲染當(dāng)前顯示的內(nèi)容柴罐,回收那些用戶看不到的,比如一個很長的列表憨奸,列表每一行稱為一個cell,每次只渲染屏幕能看得到的cell和即將顯示的1革屠、2個cell,ios的渲染分為前幀緩存和后幀緩存排宰,后幀緩存做計算似芝,計算完成渲染好了,前后幀緩存交互位置板甘,后幀變前幀顯示党瓮,前幀到后幀計算新的渲染。程序不同但是思路是通用的盐类,很多游戲引擎都是如此寞奸,只渲染一個視錐截面體內(nèi)的頂點,光照在跳,紋理蝇闭,場景,用矩陣來控制復(fù)雜的變換硬毕, 小程序要實現(xiàn)復(fù)雜動畫的時候可以借鑒呻引。
3.小程序開發(fā)模板消息的使用
小程序不允許像app那樣自由給用戶推送消息,只能通過模板消息來實現(xiàn)消息的通知吐咳,這個模板消息在微信中叫服務(wù)通知逻悠,界面大概長這樣
整個推送流程如下圖:
我來解釋下這個流程:微信默認(rèn)只能發(fā)送支付行為的通知,我們想實現(xiàn)自定義的模板消息需要在我們的小程序端收集formid(formid就是一串加密串),保存到服務(wù)端韭脊,服務(wù)端每次要發(fā)送通知的時候童谒,就會消耗一個formid。對于客戶端要做的就是把頁面上用戶會經(jīng)常點到的按鈕換成微信的buttion 用form包含沪羔。
<form bindsubmit="formSubmit" report-submit="{{true}}" >
<button? data-type='click' formType="submit" class="formBtn baby-babyTopBtn flex-center" bindtap='clickToUrl' >
</from>
buttion 主要是formType="submit" 這個屬性饥伊,要設(shè)置
form 標(biāo)簽 report-submit="{{true}}" 這個屬性不能漏了
form 表單設(shè)置?bindsubmit="formSubmit"? 提交表單的方法,然后在js文件中定義該方法,
點擊一次可以獲得一個formid
//提交 formid給服務(wù)端
? formSubmit: function (e) {
? ? console.log('獲得formid:', e.detail.formId);
? ? var formid = e.detail.formId;
? ? formIdManage.submitFormidToService(formid);
? },
象浑,把這個按鈕樣式修改為你頁面的樣子
比如
formid 有個坑需要注意:
如果你的小程序有開發(fā)版和體驗版,對應(yīng)的服務(wù)端是統(tǒng)一的琅豆,但是收集formid的時候來自不同的版本愉豺,當(dāng)用戶收到消息,點擊消息打開的會是formid 收集到的那個版本茫因,舉個栗子:比如我們在早上9點發(fā)布了一個v1版本蚪拦,假設(shè)服務(wù)端保存10個formid,數(shù)據(jù)庫目前的10個formid都是來自v1 版本收集的,這時候發(fā)現(xiàn)一個通知跳轉(zhuǎn)進去有問題冻押,我們修改了代碼驰贷,發(fā)布一個V2版,如果從之前的服務(wù)通知點進去或者你從服務(wù)端新發(fā)了一條通知洛巢,肯定跳到的還是v1版本的小程序括袒,這時候你怎么測試都是還有問題的,因為跳轉(zhuǎn)的還是舊版本稿茉。這時候就需要清除服務(wù)端數(shù)據(jù)庫的舊的formid,1讓服務(wù)端直接給你刪除锹锰,2因為服務(wù)端保存formid也是隊列形式先進先出的原則,所以你可以在你的新版上收集formid的地方去點10次狈邑,點一次formid變一次城须,就是一個新的蚤认,保存到服務(wù)端米苹,把舊的formid替換掉,然后再發(fā)一次通知砰琢,這時候跳轉(zhuǎn)的才是你最新的版本蘸嘶。
4.小程序的一些比較坑的限制
1.本地存儲限制10M ,陪汽,就是你想做一些下載緩存保存下臨時文件不能耐超過10m训唱,這個很好理解不多做解釋
2.在IOS不支持虛擬支付≈吭可能是因為蘋果對虛擬商品的收費需要抽成况增,微信無法對接和審核這些交易,所以干脆不支持训挡,虛擬商品比如一些知識付費澳骤,游戲的交易等等。不過是有變通解決方案的澜薄,就是利用客服消息为肮,小程序?qū)涌头ⅲ缓筚徺I的時候客服消息會發(fā)送一條購買的鏈接給用戶肤京,用戶點擊這個購買鏈接就可以支付颊艳,其實就是躲開蘋果的審查就行了
3.整個開發(fā)包限制4M,包括代碼、圖片資源等,圖片可以存服務(wù)端棋枕,不過網(wǎng)絡(luò)差的時候體驗可能會差一點白修,代碼省著寫吧,顧名思義“小程序”
4.通過 wx. navigateTo 推入后臺的頁面最多10層戒悠,超過會無法打開新頁面
目前發(fā)現(xiàn)這些吧熬荆,還有一些運營上的坑,比如你想做一些通過分享轉(zhuǎn)發(fā)來推廣绸狐,然后解鎖某些功能這是不允許的卤恳,涉嫌“誘導(dǎo)分享”微信直接封殺,想想有點可怕寒矿,生殺大權(quán)微信說了算
5. 小程序適合做哪些突琳?不適合做哪些?
首先不得不說大部分app都是可以用app來實現(xiàn)或者實現(xiàn)核心功能的符相,比如 共享單車拆融、餓了么、滴滴打車啊终、愛奇藝镜豹,今日頭條 等。 還有對于那些移動互聯(lián)網(wǎng)產(chǎn)品不是核心產(chǎn)品蓝牲,但是需要一個移動端來形成閉環(huán)做一些“售后服務(wù)“式的程序?趟脂,可以節(jié)省成本只做小程序。 那哪些app是不適合或者說小程序目前無法實現(xiàn)的呢例衍?
1昔期、需要大量本地緩存的app,比如QQ音樂這種音樂類的app佛玄,由于小程序還是依附在微信這個 app上來實現(xiàn)的硼一,本質(zhì)上微信也是給每個小程序分配一定沙盒空間(小程序存儲限制10m以內(nèi)),如果不做這個限制梦抢,那每個小程序都大量存儲般贼,要管理這些小程序的緩存也是很麻煩的,那微信的存儲也就是用戶收集的存儲可能很快就滿了奥吩。
2哼蛆、需要用到一些比較底層技術(shù)的app小程序目前還無能為力,比如像抖音這種需要對視頻進行編輯 合成 一些app?
3圈驼、一些先進新技術(shù)無法在上面使用人芽,比如 IOS android 都有推出相應(yīng)的一些在視覺 AR 和 深度學(xué)習(xí)方面應(yīng)用的庫? 。
6.小程序整體看法绩脆?
目前市面上很多app都有做一個對應(yīng)的小程序版萤厅,橄抹。互聯(lián)網(wǎng)以app為核心的產(chǎn)品大公司的app都只把一些核心功能簡化做一個小程序版本惕味,我想他們還是想把核心渠道把握在自己手里楼誓,不能把雞蛋放一個籃子里的意思吧,畢竟小程序? ios? android 都是一個入口名挥。做小程序是一個互利共贏的模式疟羹,對于公司來說多來一個獲客渠道,對于微信來說禀倔,微信就是一個超級app,功能“無所不能”榄融,同時也帶來一個問題,小程序入口之爭以后將來很激烈救湖,任何一個新鮮的熱點都將帶來紅利期愧杯,我們也得警惕紅利消失后,藍海的競爭是非常劇烈的鞋既。馬化騰曾說:“小程序并不是想取代App力九,而是降低App的用戶流失率”,張小龍為什么把小程序的入口設(shè)置那么深邑闺,不明顯跌前,我想也是這個意思。個人認(rèn)為小程序? ios? android 都是一道菜陡舅,誰都不能當(dāng)主食來吃抵乓,但是多了一道菜用戶多了種口味。