<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          沐思:Cocos 在線教育大廳 + 子游戲開(kāi)發(fā)實(shí)戰(zhàn)

          共 3310字,需瀏覽 7分鐘

           ·

          2021-01-16 11:19

          一個(gè)月前 Cocos 「十周年系列沙龍」廣州站完美落幕,此前來(lái)自騰訊開(kāi)心鼠 ABCmouse 在線教育部研發(fā)負(fù)責(zé)人潘偉洲,傾情分享了基于 FFmpeg 的 Cocos Creator 視頻播放器實(shí)現(xiàn)細(xì)節(jié)。


          今天 C?姐搬運(yùn)了我們的另一位嘉賓,來(lái)自沐思科技的資深架構(gòu)師吳彧的演講內(nèi)容,為大家?guī)?lái)沐思少兒在線教育的 Cocos 實(shí)戰(zhàn)分享。



          沐思選擇?Cocos 制作課件極大提升了開(kāi)發(fā)效率,且課件制作中客戶(hù)端的原生能力,讓用戶(hù)體驗(yàn)更好。


          并且課件只需要寫(xiě)一套代碼就可以實(shí)現(xiàn)跨平臺(tái)大大降低了開(kāi)發(fā)成本。那么過(guò)程中有什么困難呢?

          ?


          在線教育的困局是:


          • 課程無(wú)法按時(shí)上架,影響孩子上課。。

          • 用戶(hù)體驗(yàn)糟糕,課件的更新需更新 App 才能體驗(yàn)。

          • App 包體越來(lái)越大,用戶(hù)下載的時(shí)間過(guò)長(zhǎng),且無(wú)關(guān)課程也需全部下載。

          ?

          破局的方式是我們引入了熱更新,使用差異下載,減少更新時(shí)間。從而課件到達(dá)用戶(hù)速度提升,用戶(hù)體驗(yàn)提升。

          1
          熱更新


          Cocos Creator 熱更新是對(duì)遠(yuǎn)程版本和本地版本的版本號(hào)進(jìn)行對(duì)比,本地版本號(hào)小于遠(yuǎn)程版本號(hào)就需要行熱更新,版本號(hào)如何而來(lái)呢?


          答案是在 manifest 文件里獲取,我們把攜帶高版本號(hào)的 manifest 文件和最新的構(gòu)建資源放到遠(yuǎn)程服務(wù)器,同時(shí)本地的包內(nèi)留有版本較低和舊的資源。


          當(dāng)在需要檢查熱更的時(shí)候,Cocos Creator 會(huì)先初始化本地包內(nèi)的 manifest 文件,同時(shí)創(chuàng)建指定目錄的臨時(shí)文件夾和緩存文件夾,比如緩存文件夾是 hxy,臨時(shí)文件夾則為 hxy.temp。


          下載遠(yuǎn)程的 version.manifest 文件緩存到本地 ,獲取版本號(hào)與本地存在的版本進(jìn)行比較,遠(yuǎn)程版本高,則下載攜帶資源信息的 project.manifest 文件到臨時(shí)文件夾 hxy.temp 下。


          接著對(duì)比本地 project.manifest 與從遠(yuǎn)程下載到臨時(shí)文件夾中的 project.manifest 資源列表,即當(dāng)中的 assets 表,然后生成差異列表。通過(guò) downloader 進(jìn)行下載差異列表中的文件到本地。


          文件下載成功后,對(duì)下載的文件進(jìn)行校驗(yàn)。接著通知下載進(jìn)度、保存下載進(jìn)度,檢查是否有失敗的資源。如果沒(méi)有,則拷貝臨時(shí)文件夾的所有內(nèi)容到設(shè)定的緩存目錄,如果更新失敗則不拷貝臨時(shí)資源到緩存目錄,避免了污染原有的本地緩存資源。


          Cocos Creator?會(huì)使用 manifest 文件標(biāo)示每個(gè)資源的狀態(tài)(未開(kāi)始/下載中/下載完成)。如果熱更中途網(wǎng)絡(luò)中斷,重新啟動(dòng)熱更。


          Cocos Creator 會(huì)檢查臨時(shí)文件夾中是否有未完成的更新,校驗(yàn)版本是否和遠(yuǎn)程匹配之后,則使用臨時(shí)文件夾中的 manifest 作為遠(yuǎn)程 manifest 繼續(xù)更新(前提是臨時(shí)文件中已經(jīng)下載了 project.manifest。在臨時(shí)文件夾中的命名會(huì)有一個(gè) .temp 后綴)此時(shí)對(duì)于下載狀態(tài)為完成的不會(huì)重新下載,對(duì)于下載中的文件一般是從頭開(kāi)始下載。


          更新完成后 Cocos Creator 將遠(yuǎn)程的版本文件 project.manifest 作為當(dāng)前本地的 project.manifest,下次更新即用最新的 manifest 文件的版本號(hào)對(duì)比。


          1.下載的過(guò)程是差異下載,可以減少下載時(shí)間,那么差異下載是指什么呢?


          ?

          上圖是差異下載中的文件差異操作流程圖,左半部分是刪除和修改的部分,主要本地與遠(yuǎn)程文件列表做對(duì)比,判斷是否有文件刪除和文件是否被修改過(guò)


          如果存在這些操作,就放進(jìn)一個(gè)不同文件列表存儲(chǔ)起來(lái);右半部分主要是判斷增加文件的流程,它用遠(yuǎn)程文件列表跟本地已有的文件列表做對(duì)比。


          如果未找到說(shuō)明有增加的文件,就放入不同文件列表存儲(chǔ)起來(lái)


          經(jīng)過(guò)這兩個(gè)步驟,所有下載的的文件中存在差異下載文件都放入那個(gè)不同文件列表,之后就走下載的步驟,這就是差異下載中的文件差異操作流程。

          ????????????????

          2.可版本回退版實(shí)際操作。


          在實(shí)際項(xiàng)目中,更新版本可能不小心攜帶了意外的 bug。要想快速還原,那就需要回退到上個(gè)版本。


          實(shí)際上 Cocos Creator 的熱更新默認(rèn)如果遠(yuǎn)程版本大于本地版本才會(huì)進(jìn)行熱更,那么如何實(shí)現(xiàn)回退?


          這個(gè)問(wèn)題可以修改版本檢查函數(shù)的邏輯,即只要版本不同就熱更。這樣可以通過(guò)服務(wù)器傳給客戶(hù)端要回退的版本即可更新到熱和版本了。


          關(guān)鍵代碼:

          ???????????????

          ?

          2
          Cocos Creator 大廳+子游戲模式

          ? ??

          熱更新已經(jīng)可以做到不發(fā)包,隨時(shí)可以上架課程和修復(fù)一些問(wèn)題。那為何又要做大廳子游戲呢?看下面一張圖:

          ??

          ?


          從圖中可以看出,如果一個(gè)熱更新包的話,包體隨著時(shí)間越來(lái)大,下載時(shí)間也就更長(zhǎng),用戶(hù)下載一個(gè)包花了幾十分鐘,想而知,體驗(yàn)是非常糟糕的。


          所以單個(gè)熱更新在教育 App 存在些問(wèn)題:


          第一:包體增大,下載時(shí)間很長(zhǎng),一次更新需要幾十分鐘,不僅在浪費(fèi)用戶(hù)的時(shí)間,也將自己的產(chǎn)品體驗(yàn)做得糟糕;


          第二:成本高。如果只有熱更新沒(méi)有 Cocos 大廳-子游戲模式,課件之間關(guān)聯(lián)太大,做不到獨(dú)立,導(dǎo)致開(kāi)發(fā)成本高。


          此外影響范圍大,只有一個(gè)熱更新的話每次更新新課件或者修復(fù)某個(gè)問(wèn)題,所有人都要更新,包括上無(wú)關(guān)的課的用戶(hù),這明顯就是綁架用戶(hù)行為,體驗(yàn)很不好。


          接下來(lái)解釋一下什么叫大廳+子游戲模式:

          1. 將大廳單獨(dú)作為一個(gè)完整的項(xiàng)目,不同的子游戲,則為不同的項(xiàng)目;?

          2. 然后要實(shí)現(xiàn)不同項(xiàng)目之間的互調(diào),即大廳調(diào)子游戲,或者子游戲調(diào)大廳;?

          3. 資源共享,共用的資源放在大廳項(xiàng)目中,并且子游戲中可以調(diào)用;


          ?

          上圖是大廳子游戲的目錄結(jié)構(gòu)和大廳加載的流程圖。


          大廳子游戲好處:


          1.每個(gè)子游戲獨(dú)立,減少下載時(shí)間;

          2.提高熱更新的效率(打開(kāi)指定子游戲,才會(huì)更新子游戲);

          3.降低項(xiàng)目的耦合性(如果不共享資源,子游戲完全可以隨時(shí)抽取出來(lái)作為一個(gè)單獨(dú)的包使用)


          現(xiàn)在大多數(shù)大廳子游戲模式為下圖:


          ??????????????

          上圖中都是以課件類(lèi)型為子游戲,這樣做會(huì)不會(huì)存在什么問(wèn)題?我們以荷小魚(yú)大語(yǔ)文為例,下圖是大語(yǔ)文部分課程:

          ?


          從圖中可以看到,大語(yǔ)文下面的課件比較多,而且還有存在增加課程。


          這樣開(kāi)發(fā)下去大語(yǔ)文就越來(lái)越大課程,導(dǎo)致包體積越來(lái)越大。


          如果以大語(yǔ)文為子游戲的話,隨著時(shí)間的推移,下載會(huì)變得越來(lái)越慢,而且這個(gè)方案也存在無(wú)法按需下載的問(wèn)題。


          這個(gè)體驗(yàn)跟沒(méi)有引入大廳子游戲差不多,只是沒(méi)有熱更新那么嚴(yán)重,增長(zhǎng)的速度也較慢,但慢慢也會(huì)走上那條道路,并未做到按需下載,所以這個(gè)子游戲方案存在不合理。


          我們需要改進(jìn),看下面方案。


          從上圖可以看到,我們不對(duì)大課件作為子游戲,而是對(duì)他下面的每個(gè)課件作為子游戲來(lái)


          這樣就把每個(gè)課件拆分為 N 個(gè)子游戲,我們以拆分到不能拆為止,以它為單位來(lái)作為子游戲,而且包體也非常小,做到按需下載,不會(huì)影響到不需要上這個(gè)課程的用戶(hù)。?


          拆那么細(xì)的好處有:


          1. 可以做到每個(gè)課件獨(dú)立,課件間無(wú)任何聯(lián)系。如果需要用到的課,可以直接使用,無(wú)需再開(kāi)發(fā),提高開(kāi)發(fā)效率

          2. 單個(gè)包體積變得很小,下載的速度很快,用戶(hù)短時(shí)間即可體驗(yàn)課程;

          3. 做到按需下載,更新內(nèi)容只針對(duì)用戶(hù)需要的更新,其他更新不影響未使用用戶(hù),這樣用戶(hù)體驗(yàn)就會(huì)非常好。


          3
          Cocos Runtime


          不難發(fā)現(xiàn)通過(guò)以上模式,我們就能很好地實(shí)現(xiàn)課件的開(kāi)發(fā),并保障用戶(hù)體驗(yàn),同時(shí)輕松實(shí)現(xiàn)跨平臺(tái),大大降低開(kāi)發(fā)成本。


          Cocos 針對(duì)教育行業(yè)子課件的需求,提供了一體化的解決方案:Cocos Runtime,通過(guò) Cocos Runtime 可以快速實(shí)現(xiàn)上文所有功能。


          具體信息可以掃描下方二維碼聯(lián)系 Cocos 商務(wù)同學(xué)咨詢(xún)噢!




          ?

          以上就是今天的沐思在線教育課件熱更方案分享,再次感謝吳彧大大。


          很遺憾疫情的反撲中止了?Cocos 「十周年系列沙龍」的腳步。


          但沒(méi)關(guān)系,相信很快春暖花開(kāi),我們會(huì)有更多的旅程可以一起奔赴。希望廣大開(kāi)發(fā)者們工作的同時(shí),保重身體。祝眉目舒展,順問(wèn)冬安

          瀏覽 42
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美日韩黄色一级视频 | 国产精品久久久久久最猛 | 三级国产在线 | 精品无码少妇一区二区三区 | 北条麻妃久久 |