99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

HarmonyOS JS應(yīng)用開發(fā)需要關(guān)注哪些線程?官方解析來啦~

話說科技 ? 來源:話說科技 ? 作者:話說科技 ? 2021-09-06 15:25 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

作者:wuyawei,華為軟件開發(fā)工程師

HarmonyOS 2提供了對兩種開發(fā)語言的支持:Java和JavaScript(下文簡稱JS)。從事過Android開發(fā)的同學(xué)對Java都很熟悉了,其多線程特性能夠讓多任務(wù)并行執(zhí)行,充分利用硬件資源開發(fā)出高性能的應(yīng)用。在HarmonyOS 2上,JS目前無法像Java一樣直接創(chuàng)建新的Thread,那么使用JS語言開發(fā)HarmonyOS應(yīng)用是否會(huì)遇到硬件資源無法充分利用的情況呢?

雖然使用JS語言目前無法直接創(chuàng)建新的Thread,但是HarmonyOS的JS UI框架提供了多線程的宿主環(huán)境,可以幫助應(yīng)用開發(fā)豐富的業(yè)務(wù)邏輯。在開發(fā)HarmonyOS 2應(yīng)用時(shí),開發(fā)者除了需要了解JS線程外,還需要關(guān)注哪些線程?這些線程之間的關(guān)系又是什么樣的?下面讓我們一起來研究一下。

一、HarmonyOS的JS UI框架

HarmonyOS的JS UI框架包括應(yīng)用層(Application)、前端框架層(Framework)、引擎層(Engine)和平臺(tái)適配層(Porting Layer),如下圖所示:

HarmonyOS JS應(yīng)用開發(fā)需要關(guān)注哪些線程?官方解析來啦

  • Application

應(yīng)用層表示開發(fā)者使用JS UI框架開發(fā)的FA應(yīng)用,這里的FA應(yīng)用特指JS FA應(yīng)用。https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ui-js-fa-developing-0000001063300612

  • Framework

前端框架層主要完成前端頁面解析,以及提供MVVM(Model-View-ViewModel)開發(fā)模式、頁面路由機(jī)制和自定義組件等能力。

  • Engine

引擎層主要提供動(dòng)畫解析、DOM(Document Object Model)樹構(gòu)建、布局計(jì)算、渲染命令構(gòu)建與繪制、事件管理等能力。

  • Porting Layer

適配層主要完成對平臺(tái)層進(jìn)行抽象,提供抽象接口,可以對接到系統(tǒng)平臺(tái)。比如:事件對接、渲染管線對接和系統(tǒng)生命周期對接等。

二、JS UI框架的線程模型

每個(gè)HarmonyOS JS應(yīng)用,都是通過JS UI框架進(jìn)行加載渲染的。HarmonyOS的JS UI框架包含了JS線程、UI線程、GPU線程、IO線程這4個(gè)線程,并且在JS UI框架外還會(huì)存在一類后臺(tái)任務(wù)線程。

其中GPU線程與IO線程主要是JS UI框架初始化與頁面加載渲染的過程需要的,為JS UI框架內(nèi)部的專有線程,不會(huì)被應(yīng)用直接操作到,應(yīng)用不需要特別關(guān)注;UI線程、JS線程和后臺(tái)任務(wù)線程會(huì)與應(yīng)用開發(fā)代碼相關(guān),后面著重分析這三個(gè)線程的作用和關(guān)系。

  • UI線程:負(fù)責(zé)應(yīng)用界面的繪制刷新,與應(yīng)用的進(jìn)程號(hào)相同,又叫主線程。如果開發(fā)JS+JAVA的混合編程(https://developer.harmonyos.com/cn/docs/documentation/doc-references/js-apis-fa-calls-pa-mechanism-0000001050022401),需要特別注意的是JAVA PA(Particle Ability)的onStart/onConnect等Ability生命周期回調(diào)便是運(yùn)行在主線程,若在這些聲明周期回調(diào)上執(zhí)行耗時(shí)操作則會(huì)導(dǎo)致JS UI的繪制刷新卡住。

  • JS線程:應(yīng)用的JS代碼會(huì)被JS引擎解析執(zhí)行,并運(yùn)行在JS線程上,目前我們工程中看到的所有的JS代碼都會(huì)執(zhí)行在這個(gè)進(jìn)程下唯一的JS線程上。

  • 后臺(tái)任務(wù)線程:這是對JS UI框架外部的后臺(tái)線程的一個(gè)統(tǒng)稱,并不單指一個(gè)線程,也并不唯一。它包含了Java PA中onRemoteRequest()業(yè)務(wù)邏輯的執(zhí)行線程、文件操作API、網(wǎng)絡(luò)訪問API內(nèi)部實(shí)現(xiàn)等相關(guān)線程。

下面我們結(jié)合測試代碼的來看一下這3個(gè)應(yīng)用開發(fā)需要關(guān)注的線程之間的關(guān)系。

三、JS線程與UI線程的關(guān)系

為了驗(yàn)證JS線程與UI線程的關(guān)系,我們準(zhǔn)備了一個(gè)實(shí)驗(yàn)性質(zhì)的Demo,主要代碼以及運(yùn)行過程的Log如下:

首先我們在IDE建立一個(gè)Empty Ability(JS)模板的HelloWorld工程,在生命周期、按鈕響應(yīng)回調(diào)方法里增加Log以觀察線程情況。剛創(chuàng)建的app.js中Application生命周期默認(rèn)已經(jīng)有Log,無需額外添加。

我們需要在自動(dòng)創(chuàng)建的MainAbility.java中onStart/onTouchEvent回調(diào)函數(shù)增加HiLog打?。?/p>

HiLog.info(LABEL_LOG, "MainAbility::onStart");

HiLog.info(LABEL_LOG, "MainAbility::onTouchEvent");

我們只需要在主界面index.js文件中onInit增加日志:

CoffeeScript

console.info('page.default onInit');

然后在index.hml中增加一個(gè)button以及會(huì)一直進(jìn)行動(dòng)畫的progress組件:

I'm a button

最后在index.js中增加按鈕點(diǎn)擊響應(yīng)事件以及Log,并且嘗試sleep阻塞js線程:

function sleep(delay) {

for (var t = Date.now(); Date.now() - t <= delay; );

}

onButtonClick() {

console.info('onButtonClick begin');

sleep(1000);

console.info('onButtonClick end');

}

我們將應(yīng)用運(yùn)行起來,點(diǎn)擊一次按鈕,會(huì)發(fā)現(xiàn)progress組件動(dòng)畫并不會(huì)因?yàn)閛nButtonClick阻塞了1秒鐘而有任何暫停,我們一起來分析一下這個(gè)過程中的Log:

15:30:07.323 15870-15870/com.blancwu.test I 01100/MainAbility: MainAbility::onStart

15:30:07.342 15870-18938/com.blancwu.test I 03B00/JSApp: app Log: AceApplication onCreate

15:30:07.352 15870-18938/com.blancwu.test I 03B00/JSApp: app Log: page.default onInit

15:30:31.006 15870-15870/com.blancwu.test I 01100/MainAbility: MainAbility::onTouchEvent

15:30:31.041 15870-15870/com.blancwu.test I 01100/MainAbility: MainAbility::onTouchEvent

15:30:31.104 15870-15870/com.blancwu.test I 01100/MainAbility: MainAbility::onTouchEvent

15:30:31.106 15870-15870/com.blancwu.test I 01100/MainAbility: MainAbility::onTouchEvent

15:30:31.112 15870-18938/com.blancwu.test I 03B00/JSApp: app Log: onButtonClick begin

15:30:32.113 15870-18938/com.blancwu.test I 03B00/JSApp: app Log: onButtonClick end

從輸出的Log中,時(shí)間點(diǎn)后面跟著的便是我們執(zhí)行日志的代碼行所在的進(jìn)程號(hào)與線程號(hào),剛才我們增加的日志均在15870這個(gè)進(jìn)程下,這個(gè)進(jìn)程下又存在15870線程以及18938線程。其中15870與進(jìn)程號(hào)相同,這便是我們說的UI線程;我們在.js文件中增加的日志全都會(huì)在18938線程上打印出來,這個(gè)便是JS線程。

HarmonyOS JS應(yīng)用開發(fā)需要關(guān)注哪些線程?官方解析來啦

在應(yīng)用初始化時(shí),首先進(jìn)入MainAbility.java的onStart生命周期回調(diào),然后才進(jìn)入AceApplication、Page等JS代碼邏輯;應(yīng)用初始化完畢后,UI線程上便會(huì)持續(xù)刷新progress組件的動(dòng)畫,當(dāng)用戶點(diǎn)擊按鈕觸發(fā)onButtonClick阻塞1秒時(shí),因?yàn)樽枞膬H僅是JS線程,所以UI線程上progress組件的動(dòng)畫刷新并不會(huì)有任何影響,還是在持續(xù)刷新。所以我們可以確定JS線程與UI線程的相互調(diào)用應(yīng)該是通過某種消息機(jī)制完成的,而不是阻塞式的調(diào)用。

四、JS線程與后臺(tái)任務(wù)線程的關(guān)系

JS UI框架提供了JS FA(Feature Ability)調(diào)用Java PA(Particle Ability)的機(jī)制,該機(jī)制提供了一種通道來傳遞方法調(diào)用、處理數(shù)據(jù)返回以及訂閱事件上報(bào)的機(jī)制,Java PA運(yùn)行在一個(gè)獨(dú)立的后臺(tái)任務(wù)線程,可以支撐應(yīng)用開發(fā)多線程的業(yè)務(wù)邏輯。我們同樣制作一個(gè)Demo來驗(yàn)證JS線程與Java PA線程的關(guān)系:

在上一個(gè)Demo基礎(chǔ)上,我們修改onButtonClick的JS代碼,通過FeatureAbility.callAbility拉起并調(diào)用了名為一個(gè)類名為ServiceAbility的Java PA,并拿到返回結(jié)果:

var action = {};

action.bundleName = 'com.blancwu.test';

action.abilityName = 'com.blancwu.test.ServiceAbility';

action.messageCode = 1001;

action.abilityType = 0;

action.syncOption = 0;

console.info('FeatureAbility.callAbility begin' + JSON.stringify(action));

FeatureAbility.callAbility(action).then(function (value) {

console.info('FeatureAbility.callAbility async result ' + JSON.stringify(value));

})

console.info('FeatureAbility.callAbility end' + JSON.stringify(action));

在ServiceAbility的onRemoteRequest中增加Log輸出,并sleep 1秒種,以便觀察線程情況與之間關(guān)系:

@Override

public boolean onRemoteRequest(int code, MessageParcel data, MessageParcel reply, MessageOption option) throws RemoteException {

HiLog.info(LABEL_LOG, "onRemoteRequest begin " + code);

if (code == 1001) {

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

Map result = new HashMap();,>,>

result.put("result", 1);

reply.writeString(ZSONObject.toZSONString(result));

}

HiLog.info(LABEL_LOG, "onRemoteRequest end " + code);

return super.onRemoteRequest(code, data, reply, option);

}

以上代碼完成后,我們進(jìn)行執(zhí)行,progress組件的動(dòng)畫同樣不會(huì)被打斷,得到的Log如下:

06-25 13:31:48.090 4133-5887/com.blancwu.test I 03B00/JSApp: app Log: FeatureAbility.callAbility begin{"bundleName":"com.blancwu.test","abilityName":"com.blancwu.test.ServiceAbility","messageCode":1001,"abilityType":0,"syncOption":0}

06-25 13:31:48.094 4133-5887/com.blancwu.test I 03B00/JSApp: app Log: FeatureAbility.callAbility end{"bundleName":"com.blancwu.test","abilityName":"com.blancwu.test.ServiceAbility","messageCode":1001,"abilityType":0,"syncOption":0}

06-25 13:31:48.112 4133-4133/com.blancwu.test E 01100/ServiceAbility: [8187916a4418bed, 399b373, f521b3] ServiceAbility::onStart

06-25 13:31:48.126 4133-5837/com.blancwu.test I 01100/ServiceAbility: [8187916a4418bed, 171378f, 385abb1] onRemoteRequest begin 1079135572

06-25 13:31:48.126 4133-5837/com.blancwu.test I 01100/ServiceAbility: [8187916a4418bed, 171378f, 385abb1] onRemoteRequest end 1079135572

06-25 13:31:48.126 4133-5837/com.blancwu.test I 00000/RemoteObject: [8187916a4418bed, 171378f, 385abb1] Java onRemoteRequest called

06-25 13:31:48.143 4133-5837/com.blancwu.test I 01100/ServiceAbility: onRemoteRequest begin 1001

06-25 13:31:49.145 4133-5837/com.blancwu.test I 01100/ServiceAbility: onRemoteRequest end 1001

06-25 13:31:49.145 4133-5837/com.blancwu.test I 00000/RemoteObject: Java onRemoteRequest called

06-25 13:31:49.151 4133-5887/com.blancwu.test I 03B00/JSApp: app Log: FeatureAbility.callAbility async result "{"result":1}"

整個(gè)執(zhí)行過程可以描述如下圖:

HarmonyOS JS應(yīng)用開發(fā)需要關(guān)注哪些線程?官方解析來啦

我們觀察到本次運(yùn)行主進(jìn)程(UI線程)號(hào)為4133,JS代碼執(zhí)行在JS線程(5887),Java PA響應(yīng)onRemoteRequest執(zhí)行在另一個(gè)后臺(tái)任務(wù)線程(5837)。通過Log我們看到onRemoteRequst即使阻塞了后臺(tái)任務(wù)線程1s也不會(huì)影響JS線程的執(zhí)行以及主線程(UI線程)上動(dòng)畫的刷新,做到了JS線程與后臺(tái)任務(wù)線程上的任務(wù)并行處理。

五、JS的異步機(jī)制

上面從代碼實(shí)驗(yàn)角度觀察到了應(yīng)用開發(fā)中JS線程與其他線程的關(guān)系,那么JS線程是怎么與其他線程進(jìn)行異步通信的呢?我們先來看一下傳統(tǒng)的瀏覽器環(huán)境下的機(jī)制:

HarmonyOS JS應(yīng)用開發(fā)需要關(guān)注哪些線程?官方解析來啦

上圖中,JS線程中的函數(shù)調(diào)用會(huì)存在于棧(stack)中,棧中的函數(shù)可以調(diào)用瀏覽器環(huán)境提供的WebAPIs,包含了DOM、ajax、timeout等API,這些API會(huì)在瀏覽器環(huán)境提供的另外一個(gè)外部線程執(zhí)行,執(zhí)行完成后會(huì)在任務(wù)隊(duì)列(callback queue)中加入對應(yīng)的回調(diào)事件(如onClick、onLoad、onDone)。當(dāng)棧中的代碼執(zhí)行完畢,即棧清空后,JS線程又會(huì)通過event loop取出任務(wù)隊(duì)列中的下一個(gè)任務(wù)進(jìn)行執(zhí)行,以此類推完成整個(gè)的程序執(zhí)行。更具體的機(jī)制可以去看阮一峰老師介紹JS EventLoop的文章。

JS EventLoop的介紹

http://www.ruanyifeng.com/blog/2014/10/event-loop.html

HarmonyOS的JS UI框架同樣遵循上述最基本的EventLoop調(diào)度機(jī)制,并且提供了更多的機(jī)制和API,讓業(yè)務(wù)邏輯可以在外部線程執(zhí)行;包括上面提到的Java PA機(jī)制以及還未提及的支持異步回調(diào)的系統(tǒng)能力API。其中,支持異步回調(diào)的系統(tǒng)能力API包含文件系統(tǒng)操作和網(wǎng)絡(luò)操作等,感興趣的同學(xué)可以按照我們實(shí)驗(yàn)Demo類似的方法去嘗試一下。

● 文件系統(tǒng)操作API參考

https://developer.harmonyos.com/cn/docs/documentation/doc-references/js-apis-file-storage-0000000000629445

六、未來展望

目前HarmonyOS的JS應(yīng)用內(nèi)實(shí)現(xiàn)多線程的最佳方式是通過混合編程調(diào)用Java PA方式,但無法支持純JS應(yīng)用開發(fā)多線程業(yè)務(wù),純JS應(yīng)用目前僅可使用框架提供的異步API了,那么這些異步API能解決各種復(fù)雜場景的問題嗎?

JS線程加上異步API能夠很好解決單個(gè)I/O阻塞的問題,但是如果遇到大量的I/O事件,比如批刪除大量文件,通過for循環(huán)發(fā)起了大量異步任務(wù),也會(huì)降低執(zhí)行效率,甚至阻塞其他異步任務(wù)的執(zhí)行。并且如果要使用JS語言開發(fā)計(jì)算密集型的任務(wù),也無法在唯一的JS線程上進(jìn)行。

這時(shí)就需要一個(gè)真正的JS多線程處理機(jī)制了,雖然目前HarmonyOS 2還未支持,但未來HarmonyOS會(huì)考慮規(guī)劃出與HTML5類似提供支持WebWorker機(jī)制,支持開發(fā)出多線程的JS代碼,提供給應(yīng)用開發(fā)者更多的發(fā)揮空間。

fqj

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 線程
    +關(guān)注

    關(guān)注

    0

    文章

    508

    瀏覽量

    20242
  • HarmonyOS
    +關(guān)注

    關(guān)注

    80

    文章

    2126

    瀏覽量

    33140
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    HarmonyOS 5】桌面快捷方式功能實(shí)現(xiàn)詳解

    功能,是目前很常見的功能之一。 鴻蒙系統(tǒng)提供的**桌面快捷方式(Shortcuts)**功能,允許開發(fā)者為應(yīng)用內(nèi)常用功能創(chuàng)建直達(dá)入口,用戶通過長按應(yīng)用圖標(biāo)即可快速啟動(dòng)特定功能,大幅減少操作層級(jí)。 本文將結(jié)合地圖導(dǎo)航場景,詳細(xì)解析鴻蒙快捷方式的實(shí)現(xiàn)原理與
    的頭像 發(fā)表于 06-21 16:42 ?302次閱讀
    【<b class='flag-5'>HarmonyOS</b> 5】桌面快捷方式功能實(shí)現(xiàn)詳解

    鴻蒙5開發(fā)寶藏案例分享---Web開發(fā)優(yōu)化案例分享

    ,開發(fā)者需關(guān)注API更新或在設(shè)計(jì)預(yù)加載策略時(shí)利用此特性。 預(yù)下載 (Pre-Fetch/DownLoad) 痛點(diǎn): 頁面里的圖片、CSS、JS等資源,邊下載邊解析渲染,遇到大文件或慢
    發(fā)表于 06-12 17:20

    鴻蒙5開發(fā)寶藏案例分享---Web加載時(shí)延優(yōu)化解析

    鴻蒙開發(fā)寶藏:Web加載完成時(shí)延優(yōu)化實(shí)戰(zhàn) 大家好呀!今天在翻鴻蒙開發(fā)者文檔時(shí),發(fā)現(xiàn)了一個(gè)隱藏的 性能優(yōu)化寶藏區(qū) ——官方竟然悄悄提供了超多實(shí)戰(zhàn)案例!尤其是****Web加載完成時(shí)延分析這塊,簡直是
    發(fā)表于 06-12 17:11

    鴻蒙5開發(fā)寶藏案例分享---應(yīng)用并發(fā)設(shè)計(jì)

    ?** 鴻蒙并發(fā)編程實(shí)戰(zhàn)指南:解鎖ArkTS多線程黑科技** 嘿,開發(fā)者朋友們! 今天給大家扒一扒鴻蒙官方文檔里藏著的并發(fā)編程寶藏—— 100+實(shí)戰(zhàn)場景解決方案 !從金融理財(cái)?shù)接螒?b class='flag-5'>開發(fā)
    發(fā)表于 06-12 16:19

    HarmonyOS5云服務(wù)技術(shù)分享--ArkTS開發(fā)函數(shù)

    ) 最后說句掏心窩的話:本地調(diào)試真的能省下80%的打包等待時(shí)間,早用早輕松!開發(fā)過程中遇到任何問題,歡迎在評論區(qū)拍磚交流~ ? 祝各位開發(fā)者調(diào)試順利,BUG退散!下次咱們再聊聊云函數(shù)的高階玩法,記得關(guān)注哦~ ? (本文檔基于
    發(fā)表于 05-22 17:29

    HarmonyOS5云服務(wù)技術(shù)分享--ArkTS開發(fā)Node環(huán)境

    ? 你好呀,開發(fā)者小伙伴們!今天我們來聊聊如何在HarmonyOS(ArkTS API 9及以上)中玩轉(zhuǎn)云函數(shù),特別是結(jié)合Node.js和HTTP觸發(fā)器的開發(fā)技巧。文章會(huì)手把手帶你從零
    發(fā)表于 05-22 17:21

    OpenHarmony應(yīng)用開發(fā)精品課程第七期來啦

    OpenHarmony應(yīng)用開發(fā)精品課程第七期來啦
    的頭像 發(fā)表于 04-15 14:15 ?234次閱讀
    OpenHarmony應(yīng)用<b class='flag-5'>開發(fā)</b>精品課程第七期<b class='flag-5'>來啦</b>

    HarmonyOS NEXT 原生應(yīng)用/元服務(wù)-ArkTS代碼調(diào)試worker/taskpool調(diào)試

    代碼中設(shè)置斷點(diǎn)。 啟動(dòng)調(diào)試,當(dāng)代碼中斷點(diǎn)命中時(shí),調(diào)試窗口會(huì)新啟動(dòng)一個(gè)調(diào)試會(huì)話,顯示 taskpool 線程的堆棧信息。 本文主要參考與引用自HarmonyOS官方文檔。
    發(fā)表于 03-13 17:46

    HarmonyOS NEXT 原生應(yīng)用/元服務(wù)調(diào)試概述

    一、概述 DevEco Studio提供了豐富的HarmonyOS應(yīng)用/元服務(wù)調(diào)試能力,支持JS、ArkTS、C/C單語言調(diào)試和ArkTS/JS+C/C跨語言調(diào)試能力,并且支持三方庫源碼調(diào)試,幫助
    發(fā)表于 02-26 11:03

    HarmonyOS第一課》煥新升級(jí),賦能開發(fā)者快速掌握鴻蒙應(yīng)用開發(fā)

    注重理論與實(shí)踐的結(jié)合,提供讓開發(fā)者快速上手的codelab編程練習(xí),開發(fā)者能在實(shí)戰(zhàn)中鞏固所學(xué),系統(tǒng)掌握核心開發(fā)技能。完成課程后,開發(fā)者可參加官方
    發(fā)表于 01-02 14:24

    HarmonyOS開發(fā)指導(dǎo)類文檔更新速遞(下)

    伴隨著HarmonyOS 5.0.0 Release、HarmonyOS 5.0.1 Release版本的發(fā)布,HarmonyOS官網(wǎng)文檔也帶來了不少上新內(nèi)容。本期HarmonyOS
    的頭像 發(fā)表于 12-30 09:54 ?1171次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>開發(fā)</b>指導(dǎo)類文檔更新速遞(下)

    HarmonyOS Web開發(fā)性能優(yōu)化指導(dǎo)

    體驗(yàn)。 預(yù)渲染:預(yù)渲染指在后臺(tái)對需要加載的頁面進(jìn)行預(yù)先渲染,提前完成整個(gè)頁面加載的流程。當(dāng)用戶需要訪問該頁面時(shí),可以直接切換至前臺(tái)展示,實(shí)現(xiàn)頁面“秒開”的效果。預(yù)渲染要求在進(jìn)行DOM解析
    發(fā)表于 12-06 08:41

    今晚直播!OpenHarmony應(yīng)用開發(fā)精品課程第二期來啦~

    原文標(biāo)題:今晚直播!OpenHarmony應(yīng)用開發(fā)精品課程第二期來啦
    的頭像 發(fā)表于 11-20 15:24 ?518次閱讀

    鴻蒙跨端實(shí)踐-JS虛擬機(jī)架構(gòu)實(shí)現(xiàn)

    類似的框架,我們需要自行實(shí)現(xiàn)以確保核心基礎(chǔ)能力的完整。 鴻蒙虛擬機(jī)的開發(fā)經(jīng)歷了從最初 ArkTs2V8 到 JSVM + Roma新架構(gòu)方案 。在此過程中,我們實(shí)現(xiàn)了完整的鴻蒙版的“J2V8”和 基于系統(tǒng)JSVM的JS虛擬機(jī)框架
    的頭像 發(fā)表于 09-30 14:42 ?3010次閱讀
    鴻蒙跨端實(shí)踐-<b class='flag-5'>JS</b>虛擬機(jī)架構(gòu)實(shí)現(xiàn)

    推薦一個(gè)支持js的嵌入式設(shè)備開發(fā)平臺(tái)

    可以通過vscode開發(fā)js,實(shí)時(shí)推送js代碼到設(shè)備里運(yùn)行,無需編譯,支持屏幕,感興趣的可以看看 https://github.com/duoxianwulian/dxdop 提供很多js
    發(fā)表于 09-04 14:04