<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      從0開發(fā)3D引擎(六):函數(shù)式反應(yīng)式編程及其在引擎中的應(yīng)用

      大家好,本文介紹我們?yōu)槭裁词褂煤瘮?shù)式反應(yīng)式編程來開發(fā)引擎,以及它在引擎中的相關(guān)的知識點(diǎn)。

      上一篇博文

      從0開發(fā)3D引擎(五):函數(shù)式編程及其在引擎中的應(yīng)用

      下一篇博文

      從0開發(fā)3D引擎(七):學(xué)習(xí)Reason語言

      介紹函數(shù)式反應(yīng)式編程

      函數(shù)式反應(yīng)式編程又稱為“函數(shù)式響應(yīng)型編程”,英文縮寫為“FRP”。
      它的總體思想是一切都是流:可以把事件封裝為流,也可以把Promise封裝為流,還可以把集合(如數(shù)組、list等)封裝為流。可以用 merge、concat、map等operater對流進(jìn)行函數(shù)式操作。
      本質(zhì)上,F(xiàn)RP是把時間線上的數(shù)據(jù)建模為流,即:

      流 = 時間 + 數(shù)據(jù)
      

      我們在對流進(jìn)行一系列操作后,最后會subscribe該流,處理流的三個事件:next、error、complete。
      舉例來說:
      我們把數(shù)組[|1,2,3|](在Reason中,數(shù)組的語法是“[||]”,list的語法是“[]”)封裝為流并subscribe,則該流會依次觸發(fā)3次next事件,值分別為:1、2、3;在最后一次next事件觸發(fā)后,會觸發(fā)complete事件,完成該流;該流不會觸發(fā)error事件,因?yàn)闆]有錯誤發(fā)生。

      函數(shù)式反應(yīng)式編程學(xué)習(xí)資料

      該文通俗易懂,建議讀者通過該文來入門FRP。

      該文舉了一個FRP的例子,并比較了“FRP”和“回調(diào)函數(shù)callback”這兩種處理異步的方式。該文適合讀者進(jìn)一步學(xué)習(xí)FRP。

      讀者可以通過該問題的討論,了解為什么要用FRP。

      函數(shù)式反應(yīng)式編程的優(yōu)點(diǎn)與缺點(diǎn)

      優(yōu)點(diǎn)

      • 抽象層面更高

      FRP以流為單位,封裝了時間序列和具體的數(shù)據(jù),隱藏了“狀態(tài)的同步”、“異步邏輯的具體實(shí)現(xiàn)”等底層細(xì)節(jié)。

      • 和函數(shù)式編程配合使用

      能夠使用組合,像管道處理一樣處理各種流,符合函數(shù)式編程的思維。

      缺點(diǎn)

      • 學(xué)習(xí)成本高,需要用戶轉(zhuǎn)換思維,用流來思考

      我當(dāng)時用了1個月學(xué)習(xí)FRP,并模仿Rxjs,使用Typescript寫了一個FRP庫:Wonder-FRP
      掌握FRP確實(shí)不容易,但一旦掌握,異步處理就會變得非常容易和健壯,值得我們學(xué)習(xí)它!

      異步處理的其它方法

      除了用“FRP”處理異步,還可以用:
      1)回調(diào)函數(shù)
      過多的回調(diào)會導(dǎo)致嵌套層次太深,容易陷入回調(diào)地獄,不易維護(hù)。
      2)await,aync
      通過這兩個關(guān)鍵字,把所有異步操作變?yōu)橥讲僮鳌?br> 這樣雖然簡化了邏輯,但是損失了異步帶來的性能優(yōu)勢(如把兩個并行操作變?yōu)閮蓚€串性操作,增加了時間開銷)

      為什么使用Most庫

      要在Javascript中使用FRP,有兩個庫可以選擇:

      • RxJS
        該庫用的人很多,功能齊全。
      • most
        該庫性能更好,而且更輕量。雖然功能要少點(diǎn),不過夠用,

      為了更高的性能,本系列使用most庫來開發(fā)引擎,并封裝了它的FFI

      引擎中相關(guān)的函數(shù)式反應(yīng)式編程知識點(diǎn)

      引擎使用函數(shù)反應(yīng)式編程來處理異步

      FRP的流來自于:

      • Promise
        如將“加載圖片”封裝為Promise,再用most.fromPromise將其轉(zhuǎn)換為流。

      • Dom事件
        如對于“鼠標(biāo)click”事件,使用most.fromEvent將其轉(zhuǎn)換為流。

      • 集合
        使用most.from將集合(如數(shù)組或者list)轉(zhuǎn)換為流。

      FRP的應(yīng)用場景包括:
      1)處理事件
      2)處理多個線程的執(zhí)行順序
      3)讀寫資源

      參考資料

      用函數(shù)式編程,從0開發(fā)3D引擎和編輯器(二):函數(shù)式編程準(zhǔn)備

      posted @ 2020-01-10 10:56  楊元超  閱讀(741)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 精品国产伦理国产无遮挡| 99久久国产宗和精品1上映| 夜夜爽日日澡人人添| 精品一卡2卡三卡4卡乱码精品视频 | 亚洲av午夜成人片| 久久天天躁狠狠躁夜夜躁2012| 亚洲sm另类一区二区三区| 欧美大屁股喷潮水xxxx| 少妇被粗大的猛烈进出视频| 中文字幕一区二区久久综合| 少妇无套内谢免费视频| 大洼县| 国产精品色三级在线观看| 精品一区二区亚洲国产| 亚洲爆乳精品无码一区二区 | 起碰免费公开97在线视频| 国产日韩综合av在线| 亚洲欧美日韩一区在线观看| 亚洲小说乱欧美另类| 国产草草影院ccyycom| 中文字幕日韩国产精品| 男人猛躁进女人免费播放| 日韩区一区二区三区视频| 中日韩精品视频一区二区三区| 日韩精品有码中文字幕| 国产一区一一区高清不卡| 亚洲va久久久噜噜噜久久狠狠| 少妇高潮毛片免费看| 国产精品午夜福利免费看| 精品人妻av中文字幕乱| 国产欧美精品一区二区三区-老狼| 欧美人与zoxxxx另类| 日韩精品福利一二三专区| 成人性生交片无码免费看| 国产精品va无码一区二区| 中文字幕亚洲精品第一页| 国产精品人成视频免费播放| 久久人人97超碰精品| 无码国内精品久久人妻蜜桃| 国产三级a三级三级| 无码福利写真片视频在线播放|