ImmutableJS

簡介

 JavaScript中的不可變集合

不可變數據一旦建立就不能改變,這樣可簡化應用開發、無防護複製、啓用更先進的內存方案,以及使用更簡單的邏輯檢查更新。持久化數據提供可修改的API,這些API不在原地更新數據,而是產生新的更新後的數據。node

Immutable.js提供了不少持久化不可變數據結構,包括: List, Stack, Map, OrderedMap, Set, OrderedSet以及Record。git

這些數據結構在現代JavaScript虛擬機都很是高效的,使用的是經過hash映射以及向量嘗試,和Clojure和Scala中流行的那些同樣,最小化須要拷貝和緩存的數據。github

Immutable.js也提供了惰性Seq, 容許有效的方法鏈式操做,例如map和filter,不用建立中介變量。使用Range和Repeat建立一些Seq。typescript

更多的信息,可參閱Immutable.js官網。npm

以上是從官網上翻譯過來的一段描述文字。下面將從代碼的層面進行簡單剖析。json

 Immutable.js源碼分析

源碼地址爲:https://github.com/facebook/i...。 對於JavaScript包來講,首先咱們能夠先看看package.json文件,看看構建相關的腳本命令以及作了哪些操做。gulp

...
  "main": "dist/immutable.js",
  "typings": "dist/immutable-nonambient.d.ts",
  "typescript": {
    "definition": "dist/immutable.d.ts"
  },
  "scripts": {
    "build": "run-s build:*",
    "build:dist": "run-s clean:dist bundle:dist copy:dist stats:dist",
    "build:pages": "gulp --gulpfile gulpfile.js default",
    "stats:dist": "node ./resources/dist-stats.js",
    "clean:dist": "rimraf dist",
    "bundle:dist": "rollup -c ./resources/rollup-config.js",
...

經過npm install immutable安裝這個包以後,咱們在引入這個包的時候,實際上定位的文件是dist/immutable.js, 若是使用TypeScript定義信息,對應於dist/immutable.d.ts。segmentfault

而後看看scripts部分,能夠看到build是構建目標代碼的命令, 這裏使用了run-s build:*。緩存

這裏咱們使用的是npm-run-all。 這裏咱們只須要知道,這個命令能夠並行或串行的運行一系列的npm腳本就好了。 更詳細的介紹,直接進它裏邊的github頁面進行查看便可。數據結構

npm run build執行三件事,打包源代碼到dist/immutable.js中, 複製TS定義到dist/immutable.t.ds, 最後還作了dist-stats。

其中構建目標代碼這塊使用的rollup打包工具實現的, 暫時不深刻rollup的詳細信息, 感興趣的能夠參考後面的鏈接。

這裏咱們是將src中的源代碼Immutable.js打包到dist/immutable.js中去。

src項目結構

+-- utils 工具包
|-- Collection.js    Collection數據結構
|-- CollectionImpl.js    
|-- Hash.js    
|-- Immutable.js  該包的主文件
|-- Iterator.js    
|-- List.js
|-- Map.js
|-- Math.js
|-- Operations.js
|-- OrderedMap.js
|-- OrderedSet.js
|-- Predicates.js
|-- Range.js
|-- Record.js
|-- Repeat.js
|-- Seq.js
|-- Set.js
|-- Stack.js
|-- TrieUtils.js
|-- fromJS.js
|-- is.js

 關鍵詞

  • 不可變數據: Immutable Data
  • 無防禦數據拷貝: no defensive copy
  • 先進內存方案: advanced memoization
  • 檢測更新技術: change detection techniques

未完待續......

參考連接

相關文章
相關標籤/搜索