武思怡 解佺 張雨 侯秉昀
摘要:文章從開發者的角度對小程序開發過程進行了簡單說明,從環境與框架、組件、API等方面進行了比較全面的分析,介紹了小程序開發中的幾個關鍵點,并對小程序的生存現狀和未來發展趨勢進行了分析。
關鍵詞:微信小程序;框架;API
微信官方給出的小程序的解釋是:“小程序是不需要下載安裝便可以使用的應用,它實現了應用觸手可及的夢想,用戶掃一掃或搜一下即可打開應用,也體現了用完即走的理念,用戶不用關心是否安裝太多應用的問題,應用將無處不在,隨時可用,但又無需安裝卸載。” [1]微信小程序自2017年1月9日正式上線以來,就引起廣泛關注。微信團隊也不停地對小程序進行更新。微信小程序的優勢十分明顯,小程序觸及了PC網頁,公眾號,H5, APP無法觸及的地方,其無需安裝,用完即走的理念能夠滿足用戶需求且節省手機內存。站在小程序的擁有者的立場,其開發成本大大減小,同時可借助微信強大的流量入口,因而也降低了推廣的難度??偟膩碚f,微信小程序是一種全新的方式,能夠更好地在用戶和服務中建立連接,并且可以在微信中便捷地獲取和傳播,具有不錯的使用體驗。
1 小程序開發前準備
小程序采用了類似React Native和Weex—樣的解析技術,開發者可以編寫一套程序在多種客戶端運行,同時,相比于公眾號、微商城具有更好的原生體驗。全面開放申請以后,作為企業、政府、媒體、其他組織或者個人的開發者,都可以申請并注冊小程序。小程序和微信的訂閱號、服務號以及企業號是并行的體系,具有獨立的注冊以及發布流程。
1.1 小程序接入流程:
小程序的接入主要有4個步驟。
(1)小程序注冊:在微信公眾平臺官網首頁(mp.weixin.qq.com)注冊并提交注冊信息、完善主體信息和管理員信息。
(2)完善小程序信息:完善小程序的基本信息如名稱、頭像及服務范圍等。開發前需綁定開發者并獲取APP ID,以保證程序可以通過手機進行掃碼測試。
(3)開發小程序:下載安裝微信開發者工具,微信官方提供了一套完整的開發框架,開發者可以根據微信開發文檔進行小程序的開發與調試。
(4)代碼審核及發布:小程序開發完成后,不能夠直接發布,需提交代碼與開發配置信息提交審核,完成后尚可發布。
1.2 微信Web開發者工具
官方公布的微信開發工具名為微信Web開發者工具,小程序前端開發框架是微信官方提供的框架。微信Web開發工具是一種基于Native System系統層的框架,由于并不是運行在瀏覽器中,所以JavaScript在Web中的一些諸如Document,Window等方法均不可使用,以往HTML5在加載的時候在網絡環境會有所限制,需要逐步加載HTML,CSS,JS,然后返回數據,最后渲染頁面展現在瀏覽器中[2]。用戶總是需要等待很久,這樣使得用戶體驗感大大降低。相比之下,小程序的兩個線程:Appservice Thread和ViewThread會同時進行、并行加載,甚至Appservice Thread會更早執行,當視圖線程加載完,通知Appservice,Appservice會把準備好的數據用setData的方法返回給視圖線程。小程序的這種優化策略,可以減少用戶的等待時間,加快小程序的響應速度。
微信Web開發者工具區別于H5的開發工具+瀏覽器Device Mode預覽的模式,而是基于自己的開發者工具,可以實現同步本地文件+開發調試+編譯預覽+ 上傳+發布等一整套流程。同時小程序自己開發了一套WXML標簽語言和WXSS樣式語言,并非直接使用標準的HTML5+CSS3。同時提供了很多原生APP的組件,之前在HTML5中需要模擬才能實現的功能,在小程序中可以直接調用組件來實現。
2 結構及其核心技術
2.1 框架
2.1.1 小程序的文件結構
使用微信Web開發工具新建一個項目,框架會自動生成描述整體程序的APP和多個描述頁面的page文件。完整的小程序主要組成有:
一個入口文件:app.js
一個全局樣式:app.wxss
一個全局配置:app.json
在頁面pages下將頁面安裝文件夾劃分,每個頁面存在4個文件,分別是:
視圖層:wxml文件、wxss文件;
邏輯層:js文件、json文件(頁面配置,不是必須)。
(1)app.js是控制小程序邏輯的腳本文件,app.json是小程序的配置文件,負責對小程序的全局配置。app.wxss是全局樣式表,作用范圍是項目的每一個頁面。
(2)wxml是一種類似xml格式的語言,具有數據綁定、條件渲染、列表渲染、自定義模板、事件回調和外部引用等功能。page.wxml主要通過使用基礎組件構建頁面結構。
wxss和css格式的語言有相同之處,用于描述wxml的組件樣式,page.wxss的優先級比app.json的Window高。同時,微信為小程序新增了尺寸單位rpx,rpx可以根據屏幕寬度進行自適應,rpx實際上就是系統級的rem(把頁面按比例分割750份,lrpx=innerWidth/750)。
pagejson可以對獨立定義的頁面進行一些屬性的設置,以滿足實際需要。config.json可以設置一些個性化配置,當重新安裝工具或者換一臺電腦時,只要導入相同的代碼包,開發工具就會自動恢復到開發這個項目時的個性化設置。
JS文件主要用于用戶交互、響應用戶點擊等。在小程序中,通過JS腳本來響應用戶操作。
2.1.2 了解小程序框架
微信小程序的開發是基于框架的,從軟件設計角度來說,框架是一個可復用的軟件架構解決方案,規定了應用的體系結構,闡明軟件體系結構中各層次間及其層次內部各組件間的毅力關系,責任分配和控制流程,表現為一組接口、抽象類以及實例間協作的方法,是指對某一指定應用領域中的應用系統的部分設計與實現子系統的整體結構[3]。
小程序開發框架的核心是一個響應的數據綁定系統。分為視圖層(View)和邏輯層(APP Service),小程序開發工具提供了視圖層描述語言WXML和WXSS,以及基于JavaScript的邏輯層框架,并在視圖層與邏輯層間設置了數據傳輸和事件系統,使得開發者能夠很簡單地將重心放在數據與邏輯上。處理事務邏輯的地方被稱為邏輯層。在微信小程序中,所有js腳本文件的集合構成邏輯層。邏輯層與視圖層相互配合,完成數據處理及接收事件反饋。框架的視圖層由WXML與WXSS編寫,通過組件進行展現。對于小程序本身,.wxml文件與.wxss文件的集合構成了視圖層,邏輯層處理數據之后,會發送給視圖層用于與用戶的交互,同時接收用戶對視圖層的反饋。視圖層以給定的樣式展現數據并反饋事件給邏輯層,數據展現是通過組件來進行的。視圖的基本構成是組件。
2.2 相關組件
微信提供了一系列基本組件,可以通過使用這些基本組件組合形成來進行小程序的開發。這里說明幾個比較有特點的組件。
(1)
(2)是多行輸入框,與HTML中不同的是,它的值需要賦值給value屬性,而不是被標簽包裹,是一個自閉合標簽,css動畫對組件無效。
(3)
(4)主要用于繪制圖形,其本身是一塊無色透明區域,并沒有繪制的能力,僅僅是圖形容器,需要調節相關的應用程序編程接口(Application Programming Interface,API)來完成實際的繪圖任務。
2.3 API及其配置
2.3.1 域名配置
根據小程序提供的組件,開發者可以根據需要設計UI界面,然而小程序的一些功能就要依賴框架提供的API來實現。在使用API時,首先要對小程序進行服務器域名的配置,每個小程序都需要設定通信的域名,小程序可以跟指定的域名進行網絡通信。目前支持的有HTTPS(request)、上傳文件(uploadFile)、下載文件(downloadFile)和WebSocket 通信。
2.3.2 常用API
(1)wx.request(Object):實現小程序與開發者的服務器實現數據交互。request方法的作用是發起HTTPS請求,在小程序中,只能使用HTTPS請求而不能使用HTTP請求,一個微信小程序同時只能有5個網絡請求連接。
(2)WebSocket:request方法是通過客戶端主動向服務器發起請求,而服務器端響應返回數據來實現通信的目的。這種方法存在缺點,那就是服務器不能主動向客戶端發送消息。因此要實現服務器和客戶端之間的即時通信只能采用輪詢的方法,而且request的Header是十分長的,為了傳輸一個很小的數據會占用很多的寬帶。針對這種情況,開發者可以通過小程序提供的WebSocket相關API創建WebSocket,WebSocket只需要服務器和瀏覽器通過HTTP協議進行一個握手的動作后單獨建立一條傳輸控制協議(TransmissionControl Protocol, TCP)的通信通道就可以進行數據的傳送,實現長連接以達到通信的目的。
3 項目發布
3.1 發布流程
項目開發完成后,管理員需手動打包上傳代碼,填寫相關配置類目并將代碼提交審核,若第一次審核未通過,再次提交審核將開放提供測試的入口,該入口由開發者提供,用于微信審核人員審核微信小程序時登錄。審核后手動發布即可。
3.2 上傳原理
管理員手動將代碼打包上傳是怎樣實現的呢?編輯器本身是基于Web技術體系實現的。簡單是說就是node+webkit,node提供給我們本地api的能力,而webkit提供給我們Web的能力,兩者結合之后便可以使用JS+HTML實現本地應用程序。既然有nodejs,那打包選項里的功能就好實現了。其中ES6轉ES5就是引入babel-core的node包,CSS補全是引入postcss和autoprefixer的node包,代碼壓縮則是引入uglifyjs的node包。
4 結語
微信小程序站在月活躍用戶9億人次的微信的肩膀上,自帶流量趨勢,入口多,功能簡單便捷[4]。小程序功能快速迭代,意味著圍繞小程序的開發和生態工具建設將會是移動互聯網的一個巨大機會。目前各行業內諸多企業單位紛紛加入了小程序開發,開通了小程序功能。雖然前段時間不少聲音都不看好小程序,但小程序進行優化后,開放了很多入口,使得開發者和用戶關注度不斷提升。縱使一些高頻和復雜應用暫時無法被小程序取代,但是一些低頻應用的主要功能,只要能在小程序上實現,APP就可以完全卸載了。
總的來說,微信小程序目前發展空間甚好,至于以后未來的發展仍舊不能夠準確預測。
[參考文獻]
[1]劉紅衛.微信小程序應用探析[J].無線互聯科技,2016(23):11-12, 40.
[2]陳琦.基于Webpy+Apache HTTP Server的微信小程序架構搭建研究[J].無線互聯科技,2017(18):50-51.
[3]百度百科.框架[EB/OL].(2018-03-15) [2018-04-24l.https://baike.baidu.com/item/%E6%A1%86%E6%9E%B6/1212667?fr=aladdin.
[4]劉玉佳.微信“小程序”開發的系統實現及前景分析[J].信息通信,2017(1):260-261.