从时间的角度如何处理异步事件中的时间状态?信任(trustable)和承诺(promise)承担两个功能AB,如果A先响应,就没有办法得到B的信息;如果B先响应,则无法获得A的信息。这两个功能形成了竞争关系。varuser;getUser(userId,functiononUser(userProfile){varorders=user?user.orders:null;user=userProfile;if(orders){user.orders=orders;}});getOrders(userId,functiononOrders(userOrders){if(!user){user={};}user.orders=userOrders;});时间就是状态,同步操作不需要考虑时间;而时间是异步中的状态,也是最难管理的状态。在Javascript中,解决异步问题的工具叫做promise。如何处理循环事件中的时间状态?在函数式和响应式编程中,除了网络事件之外,还有更多的例子可以通过去除时间以同步方式处理异步事件,例如循环或用户事件。勤奋的生产者:消费者希望当生产者改变时,他们能够相应地反映变化。这时候如果我们的生产者勤快一点,实时生产,消费者也可以实时消费。惰性生产者:把生产者当作一个被观察的对象。每当它发生变化时,就做出相应的反应,这是“函数式风格的异步模式”和“反应式风格的观察者模式”的结合。如何处理用户事件中的时间状态?在页面上动态加载内容时使用的一些方法。页面模块从加载到执行有4个步骤:1.加载,2.解析,3.编译,4.执行。动态导入:一种是可视化加载,一种是交互式加载。视觉加载:(LazyloadingLazyloading)常用于长页面,即不需要一上来就加载整个页面,而是在用户滑动到某个部分时才加载相关内容。交互加载:是用户??与页面交互时可能发生的加载,比如点击按钮。在初始加载时,通常关注首次渲染时间(FCP,FirstContentfulPaint)和最大内容渲染时间(LCP,LargestContentfulPaint),即页面首次加载时。在使用动态导入之前,一般应该考虑预加载(pre-load)或者预取(pre-fetch)。两者的区别在于前者是在页面开始加载的时候开始加载后面要用到的元素;后者在页面的主要功能加载完毕后加载后面要用到的素材。一种是浏览器渲染:在客户端渲染(CSR,clientsiderendering)模式下,我们先下载HTML、JS和CSS,包括数据,所有内容都在渲染之前下载。一种是服务器端渲染:SSR在服务器端渲染(SSR,serversiderendering)模式中,我们首先让用户看到一个完整的页面,但不能进行交互。只有从服务端加载相关数据并进行水合后,比如按钮添加相关事件处理后,才能进行交互。这个解决方案看起来比CSR好,但也不是没有问题。比如我们作为用户在使用一些应用的时候,有时会遇到类似的问题,就是在加载和水化前点击某个按钮,会发现某个组件没有响应。
