[Javascript] 數據處理: Immutable.js

Immutable.js
https://github.com/facebook/immutable-js

Immutable.js web
https://facebook.github.io/immutable-js/

Immutable.js 簡介
https://rhadow.github.io/2015/05/10/flux-immutable/

Immutable.js瞭解一下?
https://juejin.im/post/5ac437436fb9a028c97a437c

處理 JavaScript 複雜物件:深拷貝、Immutable & Immer
https://juejin.im/post/5bbad07ce51d450e894e4228

Immutable.js 用過嗎,真的很好?
https://cnodejs.org/topic/5a547e96afa0a121784a8aa7

Immutable Data 就是一旦創建,就不能再被更改的資料。對 Immutable 物件的任何修改或添加刪除操作都會返回一個新的 Immutable 物件。Immutable 實現的原理是持久化資料結構(Persistent Data Structure),也就是使用舊資料創建新資料時,要保證舊資料同時可用且不變,也就是不可變資料類型。同時,為了避免 deepCopy 把所有節點都複製一遍帶來的性能損耗,Immutable 使用了結構共用(Structural Sharing),即如果物件樹中一個節點發生變化,只修改這個節點和受它影響的父節點,其它節點則進行共用。

不可變資料類型是源於函數式程式設計中的,是一條必備的準則。函數式對資料處理的時候,通過把問題抽象成一個個的純函數,每個純函數的操作都會返回新的資料類型,都不會影響之前的資料,保證了變數/參數的不可變性,增加代碼可讀性。

但要注意的是,為了發揮 Immutable.js 持久化資料結構的優點,就得嚴格使用 Immutable.js 的 API 進行資料處理,也要知道這是需要應用於不可變資料類型的場景,或是轉向結合函數式編程的開發方式。若不是,例如想要結合其他套件進行資料處理時,就只能進行數據來回轉換,也不符合主流 ES6 原生代碼的格式,這些也是不小的代價。


#Immutable.js, Javascript, Persistent Data Structure, Structural Sharing, DeepCopy, 持久化資料結構

留言