本篇文章給大家?guī)?lái)了關(guān)于微信小程序的相關(guān)知識(shí),其中主要簡(jiǎn)述微信小程序原理,小程序的邏輯層和渲染層是分開(kāi)的,邏輯層運(yùn)行在JSCore中,并沒(méi)有一個(gè)完整瀏覽器對(duì)象,下面一起來(lái)看一下,希望對(duì)大家有幫助。
一、本質(zhì)
首先,小程序的邏輯層和渲染層是分開(kāi)的,邏輯層運(yùn)行在 JSCore 中,并沒(méi)有一個(gè)完整瀏覽器對(duì)象。
所以就沒(méi)有相關(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)行的。
總之,js是單線程的,小程序是雙線程,邏輯層和視圖層(渲染層)是分開(kāi)的,同時(shí)運(yùn)行的。
二、通信
又因?yàn)樾〕绦蚴请p線程的,任何邏輯層和視圖層的數(shù)據(jù)傳遞都是線程之間的通信,所以具有一定的延時(shí),所以頁(yè)面的更新就成了異步操作。
異步會(huì)使得各部分的運(yùn)行時(shí)序變得復(fù)雜一些,比如在渲染首屏的時(shí)候,邏輯層與渲染層會(huì)同時(shí)開(kāi)始初始化工作,但是渲染層需要有邏輯層的數(shù)據(jù)才能把界面渲染出來(lái)。
如果渲染層初始化工作較快完成,就要等邏輯層的指令才能進(jìn)行下一步工作。
所以小程序的生命周期就起了作用,如下
三、運(yùn)行機(jī)制
小程序啟動(dòng)運(yùn)行兩種情況:
1、冷啟動(dòng)(重新開(kāi)始):用戶(hù)首次打開(kāi)或者小程序被微信主動(dòng)銷(xiāo)毀后再次打開(kāi)的情況,此時(shí)小程序需要重新加載啟動(dòng),即為冷啟動(dòng)。
2、熱啟動(dòng):用戶(hù)已經(jīng)打開(kāi)過(guò)小程序,然后在一定時(shí)間內(nèi)再次打開(kāi)該小程序,此時(shí)無(wú)需重新啟動(dòng),只需要將后臺(tái)態(tài)的小程序切換到前臺(tái),這個(gè)過(guò)程就是熱啟動(dòng)。