我是功能编程和功能反应式编程的新手。
我多次阅读功能反应式编程的强大功能。
奥基;是可读的,避免副作用等。
但是......我不知道如何以功能/反应的方式改进我的代码,以比命令式方式更快地执行。 有可能吗?也许我想念一些东西?因为在我的函数式编程中代码是针对每个任务进行迭代:对于filter,map,reduce ......而且这个问题比较慢。 可以迭代一次吗?也许使用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>
输出:
答案 0 :(得分:11)
在我看来,功能反应式编程的强大功能
与速度和性能无关。这里有两件事,功能编程和反应式编程,上述编程范例的好处都与执行速度无关。
在极端情况下,如果您想要最佳的执行速度,那么您所针对的特定处理器/体系结构的汇编语言将无法被打败。那么C就是那些接近处理器级别的语言非常高效,一般来说编译语言(因为它们将你的代码转换为汇编语言)比解释语言更高效。
因此,选择函数式编程与命令式编程的合理性不是一个单一的标准选择。其他标准是:
我可以充分利用这个和那个的不同优点,但我不想重复计算机科学文献中已经无处不在的东西。 Programming Languages: Principles and Paradigms
书很好读,但还有很多其他书。
回到你的问题,用Rxjs
写一些东西不一定比命令更快(尽管你的Rxjs代码仍然是命令式代码,但是我们不要提及)尽管它仍然可以在某些情况下。然后,仅对数组上的操作使用rxjs
没有多大意义。当存在高级别的异步时,Rxjs(和反应式编程)会发光,这对于数组上的简单操作来说就不存在了。