BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース パフォーマンスとモジュラリティの向上したRxJS 6リリース

パフォーマンスとモジュラリティの向上したRxJS 6リリース

原文(投稿日:2018/05/16)へのリンク

読者の皆様へ: 皆様のご要望にお応えするべく、ノイズを削減する機能セットを開発しました。皆様が関心をお持ちのトピックを、EメールとWeb通知で受け取ることができます。新機能をぜひお試しください。

RxJSチームが6.0リリースを発表した。モジュラリティに対するプロジェクトとしてのアプローチの改善、パフォーマンスの合理化、アップグレードを容易にするための後方互換性パッケージの追加、TypeScriptユーザのためのコードマイグレーションのサポートなどが行われている。

RxJS 5から6へのマイグレーションを簡単にするため、rxjs-compatパッケージがこれらのバージョン間の互換性レイヤを提供する。

RxJS 6と互換性レイヤは、npm経由でインストールされる。

npm install rxjs@6 rxjs-compat@6 --save

互換性層により、コードを変更することなくバージョン6へのアップグレードが可能になるが、アプリケーションを本番稼働に展開する前にはソースコードを変更して、RxJSのソースバンドルのサイズを小さくするべきだろう。

RxJSの構造によるメリットとして、Angular 6のユーザは、Angular 6のng updateメカニズムを使ってrxjs-compatをアプリケーションに自動インストールすることができる。

モジュールのインポートパスが、いくつかのカテゴリに再編成された。

  • rxjs: 生成メソッド、タイプ、スケジューラ、ユーティリティ
  • rxjs/ajax: RxJS HTTPリクエストの実装
  • rxjs/operators: パイプ構成の可能なRxJS演算子
  • rxjs/testing: RxJSテストユーティリティ
  • rxjs/webSocket: RxJS WebSocket実装

RxJSのTypeScriptユーザには、バージョン5から6へのインポートパスのリファクタを支援するrxjs-tslintの使用が推奨されている。

もうひとつの大きな変更は、パイプ構成の可能なAPIを使用する演算子への移行である。従来のRxJSではプロトタイプオペレータを繋ぐチェーン構造を採用していたが、グローバルであるという問題や、WebpackのTree-Shaking機能を最適化する上での問題、Lintツールでの問題などを抱えていた。

例えば、RxJS 5の次のような例は、

source
  .map(x => x + x)
  .mergeMap(n => of(n + 1, n + 2)
    .filter(x => x % 1 == 0)
    .scan((acc, x) => acc + x, 0)
  )
  .catch(err => of('error found'))
  .subscribe(printResult);

RxJS 6では次のようになる。

source.pipe(
  map(x => x + x),
  mergeMap(n => of(n + 1, n + 2).pipe(
    filter(x => x % 1 == 0),
    scan((acc, x) => acc + x, 0),
  )),
  catchError(err => of('error found')),
).subscribe(printResult);

プロジェクトのリーダを務めるBen Lesh氏は先日、RxJS 6について講演し、プロジェクトを変更した動機について説明した。

RxJSは、Observableを使用して非同期ないしコールバックベースのコードを構成する、リアクティブプログラミング用のライブラリである。JavaScriptの将来バージョンの一部としてRxJSのObservableを標準化する活動が始まっているが、Observable提案はまだ広い支持を得るには至っていない。

RxJSはApache 2ライセンスで使用することができる。詳しいことはRxJSのWebサイトを参照してほしい。RxJS GitHubプロジェクトを通じてのコントリビューションも大歓迎だ。



 

 
 

この記事を評価

採用ステージ
スタイル
 
 

この記事に星をつける

おすすめ度
スタイル

BT