首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么setTimeout()让我的应用变得迟缓,而Rxjs timer().subscribe(...)不是吗?

setTimeout()是JavaScript中的一个函数,用于在指定的时间后执行一段代码。它的工作原理是将代码放入事件队列中,等待指定的时间后执行。然而,由于JavaScript是单线程的,当执行时间到达时,如果此时主线程正在执行其他任务,setTimeout()的代码就会被延迟执行,导致应用变得迟缓。

相比之下,RxJS是一个响应式编程库,timer()是其中的一个操作符,用于创建一个定时器。它的工作方式是创建一个Observable对象,该对象会在指定的时间后发出一个值,然后完成。通过使用subscribe()方法订阅这个Observable对象,我们可以在指定的时间后执行相应的操作。

RxJS的timer().subscribe(...)不会导致应用变得迟缓的原因是,它是基于事件驱动的异步编程模型。它会在指定的时间后触发一个事件,而不会阻塞主线程的执行。这意味着即使在定时器触发之前,主线程仍然可以继续执行其他任务,不会导致应用的延迟。

总结起来,setTimeout()会导致应用变得迟缓的原因是它的执行方式会阻塞主线程,而RxJS的timer().subscribe(...)不会阻塞主线程,因此不会导致应用变得迟缓。

腾讯云相关产品和产品介绍链接地址:

  • 云函数(Serverless):https://cloud.tencent.com/product/scf
  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云数据库 MySQL 版(CMYSQL):https://cloud.tencent.com/product/cdb_mysql
  • 云原生应用引擎(TKE):https://cloud.tencent.com/product/tke
  • 云存储(COS):https://cloud.tencent.com/product/cos
  • 人工智能(AI):https://cloud.tencent.com/product/ai
  • 物联网(IoT):https://cloud.tencent.com/product/iotexplorer
  • 移动开发(移动推送):https://cloud.tencent.com/product/umeng
  • 区块链(BCS):https://cloud.tencent.com/product/bcs
  • 元宇宙(QingCloud):https://cloud.tencent.com/product/qingcloud
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

3 分钟温故知新 RxJS 【创建实例操作符】

这是参与「掘金日新计划 · 4 月更文挑战」第1天,点击查看活动详情。 ---- 前不久写了 3 篇关于 RxJS 入门级文章: 你就是函数响应式编程(FRP)啊?!...【附 RxJS 实战】 为什么说:被观察者是 push 数据,迭代者是 pull 数据? 探秘 RxJS Observable 为什么要长成这个样子?!...,包括链式调用、惰性输出值、隔离数据和操作、响应式编程等等; 它是函数式编程中 monad 一种实际应用;它是 promise 进化形态;它是理解 JS 异步、处理异步宝剑.........(resolve, reject) => { setTimeout(() => { resolve('Hello RxJS!')...// RxJS v6+ import { timer } from 'rxjs'; /* timer 接收第二个参数,它决定了发出序列值频率,在本例中我们在1秒发出第一个值, 然后每2秒发出序列值

61440

RxJS实现“搜索”功能

这是参与「掘金日新计划 · 4 月更文挑战」第5天,点击查看活动详情。 ---- 闲言少叙,直接开冲!...timer = setTimeout(() => { console.log('发起请求..'); },300) // 300 后毫秒触发; }) </script...) timer = setTimeout(() => { var searchText = e.target.value; $.ajax(...这个时候,只能献祭出终极解决方案:本篇主角 —— RxJS 了,其实不止有 JS RxJS,与之对应还有,RxJava、RxAndroid、RxSwift,它们都是处理异步编程【核武器库】; RxJS...,进行后续传递; 至此,我们可以得出:RxJS 代码变得十分简洁、可读,前提是,我们熟悉事件流这个东西,熟悉它 API~~ ---- OK,以上便是本篇分享,希望对你能有所帮助~觉得不错,给个三连吧

54410

Angular快速学习笔记(4) -- Observable与RxJS

介绍RxJS前,先介绍Observable 可观察对象(Observable) 可观察对象支持在应用发布者和订阅者之间传递消息。 可观察对象可以发送多个任意类型值 —— 字面量、消息、事件。...RxJSRxJS(响应式扩展 JavaScript 版)是一个使用可观察对象进行响应式编程库,它组合异步代码和基于回调代码变得更简单,RxJS 提供了一种对 Observable 类型实现...为什么NG使用observable不是Promise? 可观察对象不会修改服务器响应(和在承诺上串联起来 .then() 调用一样)。...如果已发出 AJAX 请求结果会因为后续修改变得无效,那就取消它。...如果使用承诺和其它跟踪 AJAX 调用方法会非常复杂,而使用可观察对象,这非常简单: import { pipe, range, timer, zip } from 'rxjs'; import {

5K20

Rxjs光速入门0. 前言1. Observable2. 产生数据源3. Hot & Cold Observable5. 操作符6. 弹珠图7. Subject总结

of比较常用,还有其他各种功能产生数据源方法如:repeat、generate、range、never、throw等(cold observable) 异步数据流常用方法:interval、timer...操作符 一个Observable对象代表一个数据流,对于实际应用一些复杂问题,我们当然不直接subscribe数据流,而是先让它经过一系列处理再subscribe。...、无副作用 那么很容易推理出来,底层实现是返回新Observable对象,rx世界中一切产生数据源方法都是基于create封装,操作符返回对象还具有subscribe方法。...因为有一个关键点,subject状态唯一统一,被自身实例subject.complete过后,再次subject.next也是无法被subscribe了。...,多个数据流协同、合并、连接,使得整个Rxjs应用在显得流程清晰 缺点: api较多,学习成本高,比较抽象 代码简洁以链式操作为主,维护性不如传统面向对象+模块化 库比较庞大,简单问题需要引入一系列api

91230

Rxjs光速入门

,还有其他各种功能产生数据源方法如:repeat、generate、range、never、throw等(cold observable) 异步数据流常用方法:interval、timer、fromPromise...操作符 一个Observable对象代表一个数据流,对于实际应用一些复杂问题,我们当然不直接subscribe数据流,而是先让它经过一系列处理再subscribe。...this、返回同类实例 函数式编程:纯函数、无副作用 那么很容易推理出来,底层实现是返回新Observable对象,rx世界中一切产生数据源方法都是基于create封装,操作符返回对象还具有subscribe...因为有一个关键点,subject状态唯一统一,被自身实例subject.complete过后,再次subject.next也是无法被subscribe了。...,多个数据流协同、合并、连接,使得整个Rxjs应用在显得流程清晰 缺点: api较多,学习成本高,比较抽象 代码简洁以链式操作为主,维护性不如传统面向对象+模块化 库比较庞大,简单问题需要引入一系列api

60620

如何使用 RxJS 更优雅地进行定时请求

实际业务场景是这样:前端需要轮循请求后端接口获取文件处理进度,并在前端用进度条展示。如下方所示: ? 首先想到肯定是使用 setTimeout 或者 setInterval 进行定时请求。...在之前工作中还没有遇到过这类需求,所以我并不是很清楚如果用传统方式应该如何解决。然而很庆幸RxJS 正好擅长处理这样问题。...立即翻了一下文档,interval 操作符可以处理定时任务,而且更强大是返回结果也是有顺序。...// 间隔 1s 请求 this.timer$ = interval(1000) .pipe( // 取消过时请求值 switchMap(() => {...最终效果很完美。 总结 RxJS 确实是一个非常强大工具库,尤其处理异步交互真的是省时省力,但是国内技术文章偏少,遇到疑难问题还需要查阅国外文章。欢迎大家评论交流。

2.2K40

Rxjs光速入门

,还有其他各种功能产生数据源方法如:repeat、generate、range、never、throw等(cold observable) 异步数据流常用方法:interval、timer、fromPromise...操作符 一个Observable对象代表一个数据流,对于实际应用一些复杂问题,我们当然不直接subscribe数据流,而是先让它经过一系列处理再subscribe。...this、返回同类实例 函数式编程:纯函数、无副作用 那么很容易推理出来,底层实现是返回新Observable对象,rx世界中一切产生数据源方法都是基于create封装,操作符返回对象还具有subscribe...因为有一个关键点,subject状态唯一统一,被自身实例subject.complete过后,再次subject.next也是无法被subscribe了。...,多个数据流协同、合并、连接,使得整个Rxjs应用在显得流程清晰 缺点: api较多,学习成本高,比较抽象 代码简洁以链式操作为主,维护性不如传统面向对象+模块化 库比较庞大,简单问题需要引入一系列api

58220

竞态问题与RxJs

,如果网络完全没有波动情况下,我们就可以正常按照顺序得到B、C弹窗,但是如果网络波动了呢,假设由于返回B数据包正常在路上阻塞了,C先返回来了,那么最后得到执行顺序可能就是C、B弹窗了。...为什么说尽量呢,因为如果用户中间停顿了300ms也就是下边设置值之后,再进行输入的话,依旧无法确保解决网络原因造成竞态问题,如果你把这个延时设置非常大的话,那么就会造成用户最少等待n ms才能响应...; return (...args) => { clearTimeout(timer); timer = null; timer = setTimeout...这样看起来是完全解决了竞态问题,但是似乎看起来并不是非常漂亮,追求完美的同学可能会眉头一皱,觉得事情并不简单,这一段代码执行结果依赖两个异步逻辑彼此执行顺序,需要我们编写其他代码去控制这个执行顺序...RxJs RxJs是Reactive Extensions for JavaScript缩写,起源于Reactive Extensions,是一个基于可观测数据流Stream结合观察者模式和迭代器模式一种异步编程应用

1.1K30

RxJs简介

; 纯净性 (Purity) 使得RxJS变得如此强大原因是它使用了纯函数,这意味着你代码很少会发生错误。正常情况下,你不会选择创建一个纯函数。...- RxJS Subject 是一种特殊类型 Observable,它允许将值多播给多个观察者,所以 Subject 是多播普通 Observables 是单播(每个已订阅观察者都拥有 Observable...调度器可以你规定 Observable 在什么样执行上下文中发送通知给它观察者。...这也解释了为什么发送给 finalObserver got value 1 发生在 just after subscribe 之后。...举例来说,from(array, scheduler) 可以你指定调度器,当发送从 array 转换每个通知时候使用。调度器通常作为操作符最后一个参数。

3.6K10

RxJS & React-Observables 硬核入门指南

Observable发出所有值都将被推送到Subject,Subject将把接收到值广播给所有的observer。...next: value => console.log(value) }); /* Output 1 2 3 4 5 */ 操作符 操作符使RxJS变得有用。...在Epic内部,我们可以使用任何RxJS可观察模式,这就是为什么redux-observable很有用。 例如:我们可以使用.filter操作符创建一个新中间可观察对象。...总结 如果你正在开发一个包含如此复杂用例Redux应用程序,强烈推荐使用Redux-observables。毕竟,使用它好处直接与应用程序复杂性成正比,这从上面提到实际用例中是显而易见。...坚信使用正确库集将帮助我们开发更干净和可维护应用程序,并且从长远来看,使用它们好处将超过缺点。

6.8K50

RxJS Subject

观察者模式 观察者模式,它定义了一种一对多关系,多个观察者对象同时监听某一个主题对象,这个主题对象状态发生变化时就会通知所有的观察者对象,使得它们能够自动更新自己。...我们已经知道了观察者模式定义了一对多关系,我们可以多个观察者对象同时监听同一个主题,这里就是我们时间序列流。当数据源发出新值时,所有的观察者就能接收到新值。...(); setTimeout(() => { subject.subscribe(observerB); // 1秒后订阅 }, 1000); 最后我们来介绍一下在 Angular 项目中,RxJS...Subject 应用。...Angular RxJS Subject 应用 在 Angular 中,我们可以利用 RxJS Subject 来实现组件间通信,具体示例如下: message.service.ts import {

2K31

深入浅出 RxJS 之 合并数据流

/Observable'; import 'rxjs/add/observable/timer'; import 'rxjs/add/operator/map'; import 'rxjs/add/observable...merge 应用场景 const click$ = Rx.Observable.fromEvent(element, 'click'); const touchend$ = Rx.Observable.fromEvent...数据积压问题 如果某个上游 source1$ 吐出数据速度很快,另一个上游 source2$ 吐出数据速度很慢,那 zip 就不得不先存储 source1$ 吐出数据,因为 RxJS 工作方式是...Observable 对象就是胜者, race 产生 Observable 就会完全采用胜者 Observable 对象数据,其余输入 Observable 对象则会被退订抛弃。...# startWith startWith 只有实例操作符形式,其功能是一个 Observable 对象在被订阅时候,总是先吐出指定若干个数据。

1.6K10

RxJS在快应用中使用

响应式编程在各个编程语言中都有对应实现,应用较为广泛是 RxJava 以及 RxJS。...上面的描述可能比较抽象,举一个类比现实生活例子来帮助理解这几个概念:购房者一直在密切关注房价,房价随时间波动,购房者可能会根据波动房价采取一系列行动,比如购入或者继续观望。...房价即为 Observable 对象; 购房者即为 Observer 对象; 购房者观察房价即为 Subscribe(订阅)关系; 如果理解了这个场景,那么就大概理解了 RxJS 基础概念,如果你没接触过需要更详细了解...请求超时 通常,我们处理请求超时会采用 setTimeout 方式来实现,这里我们来试试如何用 RxJS 方式来封装一个支持超时机制请求接口。...技术总结 RxJS 作为一个擅长处理事件库,函数式编程使得代码更加优雅,在需要处理多个事件并发时候,能够显现出其强大优势,本文中只使用了少部分操作符,就能将繁琐操作变得更加简洁。

1.8K00
领券