TOGOUTECH

javascript - RxJS 比命令式更快吗?

coder 2024-07-18 原文

<分区>

我是函数式编程和函数式响应式编程方面的新手。

我读了很多遍函数式响应式编程的强大力量

好的;可读性强,避免副作用等。

但是...我不知道如何以功能性/ react 性方式改进我的代码,以便比命令式方式执行得更快。 这可能吗?也许我错过了什么? 因为在我的函数式编程代码中,每个任务都在迭代:对于过滤器、映射、缩减……这比较慢。 是否可以将所有事情迭代一次?也许使用 compose()

谢谢。

性能测试:命令式 vs FP vs 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 RXJS 4")
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 RXJS 4");

console.time("REACTIVE RXJS 6")
rxjs.of(array).pipe(
    rxjs.operators.filter(function(x) {
      return x % 2 === 0
    }),
    rxjs.operators.map(function(x) {
      return x * 10
    }),
    rxjs.operators.reduce(function(x, y) {
      return x + y
    }))
  .subscribe(function(x) {
    console.log(x)
  });
console.timeEnd("REACTIVE RXJS 6");
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.1.0/rxjs.umd.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/4.1.0/rx.all.js"></script>

输出:

有关javascript - RxJS 比命令式更快吗?的更多相关文章

  1. javascript - 重变量应该放在函数之外吗? - 2

    我目前有一个运行大约200次的函数。函数如下所示:functionGetB(av,bol){varbxes=[["11","12","13","21","22","23","31","32","33"],["14","15","16","24","25","26","34","35","36"],["17","18","19","27","28","29","37","38","39"],["41","42","43","51","52","53","61","62","63"],["44","45","46","54","55","56","64","65","66"],["47",

  2. javascript - 我可以在对象上运行大写方法吗? - 2

    我有一个对象。有没有办法在它的所有键上运行toUppercase?我正在做的是尝试将此对象中的每个元素都大写JSON.stringify(JSONObj.people).toUpperCase()我还没有得到上面的命令来为我工作。我对此有点陌生,非常感谢您的帮助! 最佳答案 Object.withUpperCaseKeys=functionupperCaseKeys(o){//thissolutionignoresinheritedpropertiesvarr={};for(varpino)r[p.toUpperCase()]=o[

  3. javascript - 听起来适合我的纯 js javascript 游戏吗? - 2

    是否可以在不使用flash或HTML解决方法的情况下在我的javascript游戏中播放声音?当我搜索谷歌时,它给了我各种插件或使用flash的方法,但我想用纯js来做,同时能够并行播放许多声音。 最佳答案 HTML5元素有fairlydecentsupport,还有一个音频API(允许高级音频操作)有点落后。甚至还有一个tutorialonusingitinaJSgame. 关于javascript-听起来适合我的纯jsjavascript游戏吗?,我们在StackOverflow上找

  4. javascript - 我能以更好的方式运行这个嵌套函数吗? - 2

    我只是想知道我是否可以以更好的方式运行这些函数,我的意思是我不喜欢那里的函数集合:setTimeout(function(){$(self.header_buttons_classes[0]).addClass(self.animations[15]);setTimeout(function(){$(self.header_buttons_classes[1]).addClass(self.animations[15]);setTimeout(function(){$(self.header_buttons_classes[2]).addClass(self.animations[15

  5. javascript - 在此受限设置中,eval() 会导致安全问题吗? - 2

    我正在编写一个包含一些数学练习的网站。我不太在乎用户是否试图作弊,所以我正在通过Javascript更正答案在我的具体情况下,我在表单中有一个字段。我想让用户输入一个数学表达式(例如3/2)并使用其结果来判断用户是否正确。为此,我会使用eval。我的javascript永远不会直接从URL中读取,而只是从表单中读取。此页面的任何结果都不会存储以显示给任何用户(也许我们稍后会保留统计分析的结果,然后通过PHP存储在数据库中,但话又说回来,我可能需要清理PHP本身的任何输入,怕用户直接使用POST)有什么可能出错?=P 最佳答案 您需要

  6. javascript - Backbone.js 应该从 URL 获取 GET 参数吗? - 2

    我正在尝试为我的网站实现搜索功能。当用户在input框中键入搜索词foobar并提交时,他将被重定向到http://mydomain.com/search?query=foobar。问题::我应该如何从URL中获取GET参数query,并将其发送到后端并以JSON响应的形式返回一组结果?我应该这样做吗?我目前在下面的尝试甚至没有触发search功能。路由器varAppRouter=Backbone.Router.extend({routes:{'search?query=:query':'search'//...andsomeotherroutes},search:function(q

  7. javascript - 这是 Closure 的正确陈述吗? - 2

    引自StoyanStefanov的面向对象的JavaScript(第84页):Ifyou'reatpointa,you'reinsidetheglobalspace.Ifyou'reatpointb,whichisinsidethespaceofthefunctionF,thenyouhaveaccesstotheglobalspaceandtotheF-space.Ifyou'reatpointc,whichisinsidethefunctionN,thenyoucanaccesstheglobalspace,theF-spaceandtheN-spaceYoucannotreach

  8. javascript - 可以使用 websharper 作为 JS 的替代品吗? - 2

    是否可以使用websharper作为javascript的直接替代品,而无需sitelets或ASP.NET的额外复杂性?例如,我能否将以下websharper库编译为.js文件并从我的html中的javascript脚本block中调用hello()函数?namespaceWebSharperLibopenIntelliFactory.WebSharpermoduleHelloWorld=[]lethello()=IntelliFactory.WebSharper.JavaScript.Alert("HelloWorld") 最佳答案

  9. javascript - 明确的 ".prototype"真的需要吗? - 2

    我经常在别人的脚本中看到这样的东西:bar=Array.prototype.slice.call(whatever,1)但是,以下较短的符号也可以正常工作:bar=[].slice.call(whatever,1)这两个结构是否完全等价?是否存在以不同方式对待它们的引擎(浏览器)? 最佳答案 是的,完全等同。碰巧通​​过.prototype的访问稍微快一些,因为不需要创建新的对象实例。然而,这就是我们所说的微优化。完全摆脱深度链接的一个好方法是调用Function.prototype.bind。例子(function(slice){

  10. javascript - 我可以使用 jquery 确定设备是纵向模式还是横向模式吗? - 2

    我想根据用于查看网站的设备是纵向/垂直还是横向/水平模式/方向,有条件地更改用户在我要创建的照片库网站上看到的内容。这可能吗? 最佳答案 尝试使用orientationchange事件处理程序,如下所示:$(window).bind("orientationchange",function(evt){alert(evt.orientation);});这是jQueryMobileentry检测并触发orientationchange事件。 关于javascript-我可以使用jquery

随机推荐