小程序與普通網(wǎng)頁開發(fā)的區(qū)別
? 小程序的主要開發(fā)語言是 JavaScript 氯迂,所以通常小程序的開發(fā)會(huì)被用來同普通的網(wǎng)頁開發(fā)來做對(duì)比。兩者有很大的相似性言缤,對(duì)于前端開發(fā)者而言嚼蚀,從網(wǎng)頁開發(fā)遷移到小程序的開發(fā)成本并不高,但是二者還是有些許區(qū)別的管挟。
? 網(wǎng)頁開發(fā)渲染線程和腳本線程是互斥的轿曙,這也是為什么長(zhǎng)時(shí)間的腳本運(yùn)行可能會(huì)導(dǎo)致頁面失去響應(yīng),而在小程序中僻孝,二者是分開的导帝,分別運(yùn)行在不同的線程中。網(wǎng)頁開發(fā)者可以使用到各種瀏覽器暴露出來的 DOM API穿铆,進(jìn)行 DOM 選中和操作舟扎。而如上文所述,小程序的邏輯層和渲染層是分開的悴务,邏輯層運(yùn)行在 JSCore 中睹限,并沒有一個(gè)完整瀏覽器對(duì)象,因而缺少相關(guān)的DOM API和BOM API讯檐。這一區(qū)別導(dǎo)致了前端開發(fā)非常熟悉的一些庫羡疗,例如 jQuery、 Zepto 等别洪,在小程序中是無法運(yùn)行的叨恨。同時(shí) JSCore 的環(huán)境同 NodeJS 環(huán)境也是不盡相同,所以一些 NPM 的包在小程序中也是無法運(yùn)行的挖垛。
? 網(wǎng)頁開發(fā)者需要面對(duì)的環(huán)境是各式各樣的瀏覽器痒钝,PC 端需要面對(duì) IE、Chrome痢毒、QQ瀏覽器等送矩,在移動(dòng)端需要面對(duì)Safari、Chrome以及 iOS哪替、Android 系統(tǒng)中的各式 WebView 栋荸。而小程序開發(fā)過程中需要面對(duì)的是兩大操作系統(tǒng) iOS 和 Android 的微信客戶端,以及用于輔助開發(fā)的小程序開發(fā)者工具,小程序中三大運(yùn)行環(huán)境也是有所區(qū)別的晌块,如表1-1所示爱沟。
表1-1 小程序的運(yùn)行環(huán)境
? 網(wǎng)頁開發(fā)者在開發(fā)網(wǎng)頁的時(shí)候,只需要使用到瀏覽器匆背,并且搭配上一些輔助工具或者編輯器即可呼伸。小程序的開發(fā)則有所不同,需要經(jīng)過申請(qǐng)小程序帳號(hào)钝尸、安裝小程序開發(fā)者工具括享、配置項(xiàng)目等等過程方可完成。
小程序的執(zhí)行環(huán)境
不同的平臺(tái)的小程序的腳本執(zhí)行環(huán)境也是有所區(qū)別的蝶怔。
小程序目前可以運(yùn)行在三大平臺(tái):
- iOS平臺(tái)奶浦,包括iOS9、iOS10踢星、iOS11
- Android平臺(tái)
- 小程序IDE
這種區(qū)別主要是體現(xiàn)三大平臺(tái)實(shí)現(xiàn)的 ECMAScript 的標(biāo)準(zhǔn)有所不同澳叉。截止到當(dāng)前一共有七個(gè)版本的ECMAScript 標(biāo)準(zhǔn),目前開發(fā)者大部分使用的是 ECMAScript 5 和 ECMAScript 6 的標(biāo)準(zhǔn)沐悦,但是在小程序中成洗, iOS9和iOS10 所使用的運(yùn)行環(huán)境并沒有完全的兼容到 ECMAScript 6 標(biāo)準(zhǔn),一些 ECMAScript 6 中規(guī)定的語法和關(guān)鍵字是沒有的或者同標(biāo)準(zhǔn)是有所不同的藏否,例如:
- 箭頭函數(shù)
- let const
- 模板字符串
- …
所以一些開發(fā)者會(huì)發(fā)現(xiàn)有些代碼在舊的手機(jī)操作系統(tǒng)上出現(xiàn)一些語法錯(cuò)誤瓶殃。為了幫助開發(fā)者解決這類問題,小程序IDE提供語法轉(zhuǎn)碼工具幫助開發(fā)者副签,將 ECMAScript 6代碼轉(zhuǎn)為 ECMAScript 5代碼遥椿,從而在所有的環(huán)境都能得到很好的執(zhí)行。
開發(fā)者需要在項(xiàng)目設(shè)置中淆储,勾選 ES6 轉(zhuǎn) ES5 開啟此功能冠场。