3

私は関数型プログラミングと関数型リアクティブプログラミングの方が新しいです。RxJSは命令よりも高速ですか?

私は多くの時間を読む機能的な反応性プログラミングの大きな力

Okey;副作用を避けることができます。

...しかし、機能的/反作用の方法でコードを改善して、命令的な方法より速く実行する方法はわかりません。 可能でしょうか?多分私は何かが恋しいですか?私の関数プログラミングのコードでは、すべてのタスクを反復処理しています:フィルタ、マップ、縮小...そしてこれは遅いです。 すべてのことを一度繰り返すことは可能ですか?おそらくcompose()を使用していますか?

ありがとうございました。

性能試験:FP FRP

var array = []; 
 
var i, l; 
 

 
//INIT ARRAY 
 
for (i = 0; i < 15000; i += 1) { 
 
    array[i] = i; 
 
} 
 

 
// WITH IMPERATIVE 
 
console.time("IMPERATIVE"); 
 
var sum = 0; 
 
var a; 
 
var result = []; 
 
for (i = 0, l = array.length; i < l; i += 1) { 
 
    a = array[i]; 
 
    if (a % 2 === 0) { 
 
    result.push(a * 10); 
 
    sum += a * 10; 
 
    } 
 
} 
 
console.log(sum); 
 
console.timeEnd("IMPERATIVE"); 
 

 
// WITH DECLARATIVE: FUNCTIONAL PROGRAMMING 
 
console.time("FUNCTIONAL"); 
 
var r = array 
 
    .filter(function(x) { 
 
    return x % 2 === 0 
 
    }) 
 
    .map(function(x) { 
 
    return x * 10 
 
    }) 
 
    .reduce(function(x, y) { 
 
    return x + y 
 
    }) 
 

 
console.log(r); 
 
console.timeEnd("FUNCTIONAL"); 
 

 
//WITH DELARATIVE: FUNCTIONAL REACTIVE PROGRAMMING 
 
console.time("REACTIVE") 
 
Rx.Observable 
 
    .fromArray(array) 
 
    .filter(function(x) { 
 
    return x % 2 === 0 
 
    }) 
 
    .map(function(x) { 
 
    return x * 10 
 
    }) 
 
    .reduce(function(x, y) { 
 
    return x + y 
 
    }) 
 
    .subscribe(function(x) { 
 
    console.log(x) 
 
    }); 
 
console.timeEnd("REACTIVE");
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/4.1.0/rx.all.js"></script>

対出力対命令型:

Output

+1

任意のライブラリがオーバーヘッドが追加されますので、私は、パフォーマンス上の理由RxJsを選択しないだろう。ただし、正しく使用すると生産性が向上します。 –

+0

あなたは**感知できない**正しいGUIアプリケーションでms'の10年代 'ことに気づきましたか?あなたは、エンドユーザーが経験できないことを心配する時間を無駄にしています。 –

+0

@BryanChenさて、この場合には、私はフィルタを使用するよりもRxJSライブラリを使用してメリットを理解していない、... –

答えて

8

官能性反応性プログラミングの偉大な力

は、実際に私の意見では速度とパフォーマンスに関連していません。ここでは関数型プログラミングとリアクティブプログラミングの2つのことがあり、前述のプログラミングパラダイムの利点のどれも実行速度と関係しません。

最高の実行速度を望むなら、あなたが書いている特定のプロセッサー/アーキテクチャーのアセンブリー言語は殴られません。そして、プロセッサレベルに近い言語であるCは、パフォーマンスが良く、一般にコンパイルされた言語を話す(コードをアセンブリ言語に変換するため)、インタープリタ言語よりもパフォーマンスが優れています。

したがって、関数型プログラミングと命令型プログラミングの選択の合理性は、1つの基準の選択ではありません。追加の基準は:

  • プログラマーの生産性です。これには、コードを書く時間も含まれますが、コードの見直しと理解、バグの検出と除去、そのコードの機能拡張(メンテナンスと拡張性)の時間も含まれます。
  • 品質保証。いくつかのパラダイムは、彼らが特化しているいくつかの種類のバグの蔓延を防ぎ、気晴らしと品質を損なう大きな原因となります。ここで、静的型と動的型の別の区別を導入する必要があります。いくつかの言語は、並行性の懸念(共有状態への同時アクセス)、他の分散システムの懸念(フォールトトレランス)などを扱うことに特化し、それらの懸念に関連するバグの種類を減らすことに焦点を当てています。

私はこの長所とそれとは異なる長所があるかもしれませんが、コンピュータサイエンスの中ですでに遍在していることを繰り返すことは望ましくありません。 Programming Languages: Principles and Paradigms本は良い読書ですが、他にもたくさんあります。

Rxjsで何かを書くことは、必然的にはそれほど高速ではありません(本当にあなたのRxjsコードは依然として必須コードですが、それは言及しません)。すると、それだけアレイ上の操作にrxjs使用するので、あまり意味がありません。単にアレイ上の簡単な操作のためにそこにないasynchronocityの高レベルがあるときRxjs(及び反応プログラミング)が光ります。

+0

ありがとう –

関連する問題