1、微信小程序的特點
針對傳統(tǒng)H5應用的不足,微信小程序對用戶交互性能做了眾多的優(yōu)化,使微信小程序的應用在部分用戶體驗上接近了App的水準。
微信小程序沒有采用網(wǎng)頁編程中的HTML5+CSS3+JavaScript組合,微信小程序使用騰訊全新定義的技術規(guī)范和架構。不過微信小程序的開發(fā)與網(wǎng)頁編程以及微信公眾號編程非常類似,對
于前端開發(fā)者而言,從網(wǎng)頁開發(fā)遷移到微信小程序的開發(fā)成本并不高。微信小程序吸收了主流前端開發(fā)中數(shù)據(jù)、樣式、控制邏輯分離的理念,將每個頁面分為四個文件:WXML文件、
WXSS文件、JSON文件、JS文件。其中JS文件采用標準的JavaScript語法規(guī)范,用于邏輯操作。JSON文件基于JSON語法規(guī)范,用于頁面文件的配置。WXML文件基于XML語法規(guī)范,用于頁
面視覺組件的描述。而WXSS繼承了標準的CSS語法,用于WXML組件樣式的定義。
網(wǎng)頁開發(fā)中渲染線程和腳本線程是互斥的,而在微信小程序中二者是分開的,分別運行在不同的線程中。微信小程序的渲染層和邏輯層分別由兩個線程管理:渲染層的界面使用了
WebView 進行渲染;邏輯層采用JsCore線程運行JS腳本。一個小程序存在多個界面,所以渲染層存在多個WebView線程,這兩個線程的通信會經(jīng)由微信客戶端做中轉,邏輯層發(fā)送網(wǎng)絡請
求也經(jīng)由Native轉發(fā),小程序的通信模型如圖所示。

網(wǎng)頁開發(fā)者可以使用瀏覽器DOM API來操作DOM對象。小程序的邏輯層和渲染層是分開的,邏輯層運行在JSCore中,并沒有一個完整瀏覽器對象,因而缺少相關的DOM API和BOM API。
這一區(qū)別導致了前端的一些庫,例如jQuery、Zepto等在小程序中是無法運行的。同時JSCore的環(huán)境同 NodeJS環(huán)境也是不盡相同,所以一些NPM的包在小程序中也是無法運行的。
小程序每次冷啟動時,都會檢查是否有需要更新版本,如果發(fā)現(xiàn)有新版本,將會下載新版本的代碼包到本地。因此小程序的頁面加載是基于本地的,不需要通過頻繁的發(fā)送網(wǎng)絡請求來獲
取頁面文件,所有的頁面跳轉也都不需要通過與服務端進行交互。這將使小程序的執(zhí)行效率大大提高,比使用H5的Web應用模式有更好的用戶體驗,操作流暢度與反應速度也會更好。這
也意味著在沒有網(wǎng)絡連接的環(huán)境下也可以使用微信小程序。結合本地存儲,小程序可以滿足暫時斷網(wǎng)或網(wǎng)絡情況較差的場景需求,這是微信服務號和

微信小程序的出現(xiàn),為開發(fā)者提供了一種新的應用開發(fā)框架。即除了能夠選擇APP開發(fā)、H5開發(fā)(HTML5網(wǎng)頁開發(fā))、微信公眾號開發(fā),還可以選擇使用微信小程序來實現(xiàn)移動端應用。
接下來分別將微信小程序與APP以及微信公眾號進行對比,使大家了解微信小程序、APP以及微信公眾號這三個產(chǎn)品各自的優(yōu)勢與不足,方便大家開發(fā)應用時做出合適的選擇。
小程序與App的區(qū)別
Native App,大多數(shù)情況下也稱為APP,具有性能、體驗非常良好,組件支持完善、接口豐富等特點。但App也有一系列缺點,主要有:
App不支持跨平臺開發(fā),有多少個平臺就要開發(fā)多少個版本,大多數(shù)APP都需要同時開發(fā)安卓版本和IOS版本。
首次使用門檻高。首先要在應用市場下載并安裝,然后注冊登錄后才能使用。下載安裝需要耗費網(wǎng)絡流量以及安裝時間,另外安裝在手機上會消耗手機的存儲空間。App的這個缺陷會造
成部分用戶因為下載安裝的繁瑣而拒絕下載APP,造成用戶的流失。微信小程序恰好能夠解決上面的問題,微信小程序已經(jīng)做好了安卓和IOS的兼容,開發(fā)好微信小程序后既能在安卓手機
上使用,也能在IOS手機上使用。另外小程序不需要下載安裝,通過掃一掃就能直接使用。不過相對于App,微信小程序有以下不足:
在擴展性這方面,App顯然有更大的優(yōu)勢,App可以全方位訪問原生系統(tǒng)提供的API,而微信小程序建立在微信客戶端上,小程序的功能完全受限于微信客戶端提供的API。
App的用戶體驗更佳,App安裝在手機客戶端,不需要從服務器加載,減少了應用加載的時間。
App使用路徑更短,App雖然首次使用比較麻煩,需要下載安裝,但是安裝后的使用相對便捷。App就在用戶的手機桌面上,打開手機就能直接使用。小程序使用的時候則有點繁瑣,需要
打開微信客戶端,然后在小程序列表中找,用戶難以快速發(fā)現(xiàn)并打開小程序??傮w來說微信小程序適合用戶體驗要求不高的應用,基本上適合Web應用的都可以用小程序來實現(xiàn)。另外還
有一些“重量級“的應用早起也會采用微信小程序來開發(fā),這些應用的早期會采用微信小程序來快速實現(xiàn)業(yè)務模型,并進行市場驗證,然后在業(yè)務發(fā)展到一定階段后再采用App重構應用系
統(tǒng)。
2、微信小程序與微信公眾號
微信小程序與微信公眾號(服務號)在功能上有部分重疊,都能夠用來實現(xiàn)面向企業(yè)的應用,特別是早期微信只提供了微信公眾號,面向企業(yè)的應用基本上用微信公眾號來實現(xiàn)。微信公
眾號本質上是一種H5應用,它具有傳統(tǒng)H5應用的特點,例如每次刷新頁面都要去服務器讀取內容。因此微信公眾號雖然也能夠實現(xiàn)業(yè)務服務,但是在用戶體驗上距離Native PP有較大的差
距。而微信小程序的目標就要提升應用的用戶體驗,使之接近APP的水準。因此微信小程序出現(xiàn)后使之與微信公眾號在定位上有了明顯的區(qū)別?;旧峡梢曰谝韵聵藴蔬M行取舍:
3、定位的不同
小程序面向產(chǎn)品與服務,主要以實現(xiàn)業(yè)務功能為主,致力于打造線上線下相融合的企業(yè)服務場景。
微信公眾號主要服務于企業(yè)和個人的營銷與信息傳遞需求,是一種新的信息傳播方式。公眾號依賴粉絲經(jīng)濟,結合H5后,能夠在公眾號內提供一些簡單的營銷和交互功能。
4、用戶體驗的差別
微信小程序對用用戶交互性能做了眾多的優(yōu)化,使用體驗接近App。而公眾號開發(fā)借助于H5 開發(fā)技術來實現(xiàn)交互功能,運行環(huán)境是基于瀏覽器,等同于手機網(wǎng)頁端的應用。因此上微信公
眾號主要用于業(yè)務邏輯與交互簡單的應用中,體驗良好的應用都應該用小程序來創(chuàng)建或者重構。
具體上來說微信小程序被微信平臺開放了更多的接口功能,基本可覆蓋大多數(shù)行業(yè)的需求。相較于公眾號,它在視頻直播、商城、小游戲等強互動的領域表現(xiàn)更佳。公眾號開發(fā)適合用戶
交互相對較少的應用類型,比如微商城、微官網(wǎng)等。
雖然微信公眾號與小程序各有一定的應用場景,但是在實際上使用時不是二選一的,一個企業(yè)可以同時注冊微信公眾號和小程序。企業(yè)使用微信小程序承載企業(yè)的業(yè)務服務,并使用公眾
號進行企業(yè)的宣傳與營銷。微信公眾號是單獨申請的,微信小程序即可以單獨申請,也可以通過微信公眾號快捷申請。對于沒有公眾號和小程序的商家來說,正確的申請注冊流程應該是
先申請認證微信公眾號,然后在公眾號后臺的【小程序管理】頁面中直接快速注冊小程序。微信公眾號+小程序的模式已經(jīng)成為企業(yè)運營推廣的一個標配。
5、 微信小程序開發(fā)過程
1.2.1 注冊小程序
開發(fā)微信小程序需要首先注冊一個小程序賬號,注冊成功后登錄微信小程序管理后臺,完成小程序開發(fā)者綁定、開發(fā)信息配置,然后開發(fā)者就可以下載開發(fā)者工具、使用開、發(fā)者工具進
行小程序的開發(fā)了。
微信公眾號是單獨注冊申請的,微信小程序即可以單獨注冊申請,也可以通過微信公眾號快捷申請注冊。對于沒有公眾號和小程序的商家來說,正確的申請注冊流程應該是先申請認證公
眾號,然后在公眾號管理后臺的【小程序管理】頁面快速申請小程序。微信公眾平臺的網(wǎng)址為:https://mp.weixin.qq.com。微信小程序注冊是需要一個郵箱作為賬號,小程序注冊成功
后,可以使用該郵箱+登錄密碼登錄微信小程序管理后臺。為方便開發(fā)者開發(fā)和體驗小程序的各種功能,開發(fā)者可以申請小程序的測試號,并使用此帳號在開發(fā)者工具創(chuàng)建項目并進行開
發(fā)測試,以及真機預覽體驗。小程序的測試號使開發(fā)者避免了繁瑣的注冊過程,降低了初始使用小程序開發(fā)的門檻。小程序的測試號的申請地址為:
https://mp.weixin.qq.com/wxamp/sandbox?doc=1
1.2.2 小程序開發(fā)配置
小程序開發(fā)的賬號申請成功之后,需要登錄小程序管理后臺進行小程序的設置,填寫小程序基本信息,例如名稱、頭像、介紹以及服務范圍等。
您可以在【開發(fā)】->【開發(fā)管理】頁面中看到小程序的AppID。小程序的AppID相當于小程序平臺的一個身份證,后續(xù)你會在很多地方用到它。
另外在進行小程序開發(fā)前,需要在微信小程序后臺將開發(fā)人員的微信號添加到項目成員中。只有添加到小程序項目成員的人員才可以使用微信小程序開發(fā)工具進行小程序開發(fā)、調試、上
傳程序包等功能。建議您可以將全部研發(fā)人員加入到項目成員中,項目組的其他非開發(fā)人員若需要體驗小程序功能則需要添加到體驗成員中。
1.2.3 使用開發(fā)者工具開發(fā)小程序
由于小程序采用的是渲染和邏輯分離的運行機制,這種做法與傳統(tǒng)的網(wǎng)頁的運行機制存在差異,無法使用傳統(tǒng)的網(wǎng)頁編程中的開發(fā)、調試工具,為此微信專門為小程序開發(fā)推出了一個一
站式IDE:微信開發(fā)者工具。開發(fā)者可以借助微信開發(fā)者工具完成小程序的代碼開發(fā)、編譯運行、界面和邏輯調試、真機預覽和提交發(fā)布版本等功能。
在小程序開發(fā)文檔中可以找到小程序開發(fā)工具的下載頁面,或者直接輸入以下 網(wǎng)址進入小程序開發(fā)工具的下載頁面:
https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/download.html。在小程序開發(fā)工具的下載頁面中根據(jù)自己的操作系統(tǒng)下載對應的安裝包并進行安裝。需要注意的是,小程序開發(fā)
工具在Windows僅支持Windows 7及以上版,在Mac上支持OS X 10.8及以上版本。另外需要說明的是微信小程序Web開發(fā)工具需要掃碼登陸才可以使用,所以在使用前必須先綁定開發(fā)
者。
首次使用開發(fā)者工具調試小程序時會出現(xiàn)這樣的報錯:“xxxxxxxxxx不在合法域名列表中”,這是因為在小程序中發(fā)起了wx.request請求,但是請求的域名沒有在小程序管理后臺中進行設置
所致。服務器域名的設置請到小程序管理后臺【開發(fā)】->【開發(fā)管理】->【開發(fā)設置】->【服務器域名】中進行配置。配置時需要注意:域名只支持https (wx.request、
wx.uploadFile、wx.downloadFile) 和 wss (wx.connectSocket) 協(xié)議。域名不能使用 IP 地址(小程序的局域網(wǎng) IP 除外)或 localhost。
為了降低開發(fā)門檻,開發(fā)者工具提供了一個選項,即使沒有申請服務器域名也可以進行小程序的編碼和調試。在微信開發(fā)者工具中點擊【詳情】->勾選【不校驗合法域名】。這樣就可以
正常使用wx.request函數(shù)發(fā)送網(wǎng)絡請求了。但是需要注意的是這做只是為了簡化開發(fā),當小程序發(fā)布上線時這種方式是行不通的,這個時候就需要配置合法域名了。
如果小程序中使用了Webview,并引用了第三方頁面,在運行調試小程序是會出現(xiàn)“頁面找不到”的錯誤提示。這個時候需要進行業(yè)務域名的配置。由于微信小程序本身的限制,不能直接
在Web-view中隨意跳轉H5頁面,需要先配置業(yè)務域名,才能在Web-view中跳轉H5頁面。
業(yè)務域名必須是https協(xié)議的,且業(yè)務域名需經(jīng)過ICP備案。業(yè)務域名配置時需要下載校驗文件,并將文件放置在域名根目錄下,并確保可以訪問到該文件。
1.2.4 審核與發(fā)布
完成小程序開發(fā)后,提交代碼至微信團隊進行審核,審核通過后即可發(fā)布。詳細發(fā)布說明請參見后面的章節(jié)。
1.3 第一個小程序
打開微信小程序開發(fā)者工具,掃碼登錄后進入小程序項目管理界面:

點擊小程序項目管理界面中部的添加小程序指示區(qū)即可打開小程序的新建項目界面:

每個微信小程序必須指定一個小程序的APPID,小程序的APPID可以在小程序管理后臺的界面中獲取,具體獲取方法參見章節(jié)1.2.2。在圖1-9所示的界面中選擇小程序項目,輸入小程序的
項目名稱,選擇代碼存放的路徑,填入在小程序管理后臺獲取到的APPID,勾選 “不使用云服務”,點擊新建,你就創(chuàng)建了你的第一個小程序項目了。
使用微信小程序開發(fā)者工具創(chuàng)建小程序項目時,微信小程序開發(fā)者工具會生成一些demo代碼,真正的開發(fā)中通常會刪除這些預生成的代碼。為了快速理解微信小程序的結構,我們也刪除
這些代碼,從頭開始建立一個簡單的小程序,這個小程序只輸出一行文字:Hello World。