小程序與普通網(wǎng)頁(yè)開(kāi)發(fā)的區(qū)別
?小程序的主要開(kāi)發(fā)語(yǔ)言是 JavaScript ,小程序的開(kāi)發(fā)同普通的網(wǎng)頁(yè)開(kāi)發(fā)相比有很大的相似性。對(duì)于前端開(kāi)發(fā)者而言,從網(wǎng)頁(yè)開(kāi)發(fā)遷移到小程序的開(kāi)發(fā)成本并不高,但是二者還是有些許區(qū)別的。
?網(wǎng)頁(yè)開(kāi)發(fā)渲染線程和腳本線程是互斥的,這也是為什么長(zhǎng)時(shí)間的腳本運(yùn)行可能會(huì)導(dǎo)致頁(yè)面失去響應(yīng),而在小程序中,二者是分開(kāi)的,分別運(yùn)行在不同的線程中。網(wǎng)頁(yè)開(kāi)發(fā)者可以使用到各種瀏覽器暴露出來(lái)的 DOM API,進(jìn)行 DOM 選中和操作。而如上文所述,小程序的邏輯層和渲染層是分開(kāi)的,邏輯層運(yùn)行在 JSCore 中,并沒(méi)有一個(gè)完整瀏覽器對(duì)象,因而缺少相關(guān)的DOM API和BOM API。這一區(qū)別導(dǎo)致了前端開(kāi)發(fā)非常熟悉的一些庫(kù),例如 jQuery、 Zepto 等,在小程序中是無(wú)法運(yùn)行的。同時(shí) JSCore 的環(huán)境同 NodeJS 環(huán)境也是不盡相同,所以一些 NPM 的包在小程序中也是無(wú)法運(yùn)行的。
?網(wǎng)頁(yè)開(kāi)發(fā)者需要面對(duì)的環(huán)境是各式各樣的瀏覽器,PC 端需要面對(duì) IE、Chrome、QQ瀏覽器等,在移動(dòng)端需要面對(duì)Safari、Chrome以及 iOS、Android 系統(tǒng)中的各式 WebView 。而小程序開(kāi)發(fā)過(guò)程中需要面對(duì)的是兩大操作系統(tǒng) iOS 和 Android 的微信客戶端,以及用于輔助開(kāi)發(fā)的小程序開(kāi)發(fā)者工具,小程序中三大運(yùn)行環(huán)境也是有所區(qū)別的,如表1-1所示。
表1-1 小程序的運(yùn)行環(huán)境
運(yùn)行環(huán)境 |
邏輯層 |
渲染層 |
iOS |
JavaScriptCore |
WKWebView |
安卓 |
V8 |
chromium定制內(nèi)核 |
小程序開(kāi)發(fā)者工具 |
NWJS |
Chrome WebView |
?網(wǎng)頁(yè)開(kāi)發(fā)者在開(kāi)發(fā)網(wǎng)頁(yè)的時(shí)候,只需要使用到瀏覽器,并且搭配上一些輔助工具或者編輯器即可。小程序的開(kāi)發(fā)則有所不同,需要經(jīng)過(guò)申請(qǐng)小程序帳號(hào)、安裝小程序開(kāi)發(fā)者工具、配置項(xiàng)目等等過(guò)程方可完成。
體驗(yàn)小程序