鴻蒙的發(fā)布讓開(kāi)發(fā)商“沸騰”了。
源代碼托管在國(guó)內(nèi)著名的開(kāi)源平臺(tái)碼云,
https://gitee.com/openharmony
我也是第一次下載源代碼,研究了一晚上,順便寫了一個(gè)helloworld程序,順手提供了兩份鴻蒙的PR文檔。
當(dāng)然,我最感興趣的是鴻蒙JS框架ace_lite_jsfwk,這是一個(gè)非常輕量級(jí)的框架,從它的名字就可以看出來(lái)。官方將其作為“輕量級(jí)JS核心開(kāi)發(fā)框架”引入。
看源代碼的時(shí)候發(fā)現(xiàn)真的很輕。它的核心代碼只有5個(gè)js文件,大概是300-400行代碼。(沒(méi)有單元測(cè)試)
從名稱中可以看出,代碼實(shí)現(xiàn)了一個(gè)觀察者模式。換句話說(shuō),它實(shí)現(xiàn)了一個(gè)非常輕量級(jí)的MVVM模式。響應(yīng)系統(tǒng)采用類似vue2的屬性劫持技術(shù)實(shí)現(xiàn)。這應(yīng)該是當(dāng)前培訓(xùn)班的“三個(gè)自我實(shí)現(xiàn)”之一。(自己實(shí)現(xiàn)Promise、vue和react)utils定義了一個(gè)觀察者堆棧,其中存儲(chǔ)了觀察者。主體定義了被觀察的人。當(dāng)我們觀察一個(gè)對(duì)象時(shí),也就是劫持對(duì)象屬性的操作,我們還包括一些數(shù)組函數(shù),比如push,pop等等。這個(gè)文件應(yīng)該有最多的代碼,160行。觀察者的代碼更簡(jiǎn)單,五六十行。
我們?cè)陂_(kāi)發(fā)的同時(shí),通過(guò)Toolkit將開(kāi)發(fā)人員編寫的HML、C SS、JS文件編譯成JSBundle,然后解析運(yùn)行JSBundle到C nativeUI的View組件中進(jìn)行渲染。
“通過(guò)支持三方開(kāi)發(fā)者使用聲明式API進(jìn)行應(yīng)用開(kāi)發(fā),數(shù)據(jù)驅(qū)動(dòng)視圖變化,避免了大量的視圖操作,大大降低了應(yīng)用開(kāi)發(fā)的難度,提升了開(kāi)發(fā)者的開(kāi)發(fā)體驗(yàn)”?;旧鲜切〕绦蜷_(kāi)發(fā)體驗(yàn)。
在src \ core \ base \ framework _ min _ js . h文件中,這個(gè)編譯好的js被編譯到運(yùn)行時(shí)中。編譯的js文件比3K少,真的很輕量級(jí)。
Jsruntime不使用V8和jscore。我反而選擇了JerryScript。JerryScript是一個(gè)超輕量級(jí)的物聯(lián)網(wǎng)JavaScript引擎。它可以在內(nèi)存小于64KB的設(shè)備上執(zhí)行ECMAScript5.1源代碼。這就是為什么文件說(shuō)鴻蒙JS框架支持ECMAScript5.1
總的來(lái)說(shuō),這個(gè)js框架使用了大約96%的C/C代碼和1.8%的JS代碼。用htm文件編寫的組件被編譯成原生組件。而app_style_manager.cpp和七八個(gè)同級(jí)別的文件用來(lái)解析css,最后生成原生布局。
雖然SDK里有幾個(gè)weex包,但是我們也發(fā)現(xiàn)了react的影子。但是在C/C代碼中,沒(méi)有瑜伽相關(guān)的內(nèi)容(在全局搜索中找不到)。而SDK中的那些包只是作為加載器使用,可能是為了在Web Pack打包把htm的模板編譯成js代碼時(shí)解析htm組件。
總的來(lái)說(shuō),比我預(yù)想的要好。