powerbuilder提示不是下拉窗口_为什么过去状态管理不是问题?

78ced7549769f641ff483399dc12ab17.png

2-tier 架构

远古时期,状态是完全由数据库管理的。数据库提供的连接是有状态的,打开页面的时候开连接,页面上的改动直接提交到当前的数据库连接。数据库连接的状态就是页面状态。

2ebfcc7db07b5c8e9d50fe134ffb7f32.png

3-tier 架构

后来因为互联网类型的应用的发展,数据库无法承受更多的连接。所以页面打开的时候不再开数据库连接了,仅仅在渲染和提交操作的时候才开连接拿数据。在服务端 jsp 直接渲染页面的 B/S 架构年代,状态是这样分布的

6b204c14124cf0d4840f2460c7f58666.png

这样的架构下,状态管理仍然是非常简单的。虽然有 database / jsp / html 三份状态,但是数据源只有 database 一个。所有的改动都需要先提交到 database,然后重服务端 jsp 重新渲染,客户端的 html 重新绘制。从数据迁移的角度来说,database => jsp 的网络带宽是非常高的,在内网情况下甚至 N+1 查询都不是太大的事情。如果查询实在太多了,手工写几个大 SQL 优化一下特定几个 jsp 页面的查询就好了。

4-tier 架构

静态 html 页面的问题是 I/O 太慢了。所有的操作都需要提交到 database,然后再完整重新渲染。虽然 Ruby on Rails 有 Render Partial 之类的优化,可以用 jquery 做一个局部 div 的全刷新。但是仍然需要在网络走一个完整的来回。现代的 Web Ui 需要操作更立即响应,需要在前端浏览器进行本地的计算和状态管理。这就事实上变成了 4 tier 的架构。

3790e4a4c70518fd9652658cb934f97d.png

React + Redux 自身是有状态的一层。然后由单向数据流绑定到了 DOM 上,DOM 本身是没有独立的状态的,完全由 React 驱动。这个架构改动的冲击是非常大的。不是所有的改动都立即提交到数据库了,而是有的时候提交到前端的 store 里就可以重新渲染了,有的时候需要提交命令给后端改数据库。同时数据状态迁移也更难做,外网的带宽低延迟高,不能像 jsp 连数据库那样随意查询。Java 提供的 JSON 接口也需要定义更复杂的数据结构来支持前端页面的渲染需求,以及提供数据校验的结果。再加上前后端分工引起的团队人员上的隔离,这个“带宽低延迟高”的特点也体现在了跨角色的沟通上。

大部分 no code / low code 的解决方案是无法给开发者提供足够的状态控制能力的。因为让开发者独立管理前端状态,比起页面绑定数据库要难太多了。所以市面上的 no code / low code 的平台从状态管理的角度来看是和远古时期的 PowerBuilder / FoxPro 非常类似的理念。

5-tier 架构

更现代的 Ui 要求在界面上有更及时的动效反馈。例如滑动的时候可以有弹簧的效果,页面切换的时候可以有滑出的效果。动画的特点是要求至少 30 fps,也就是在 1000 / 30 ms 的时间内要计算出一帧的数据状态,然后拿去做重渲染。用 javascript 勉强可以达到流畅,但是如果加上 React 的 virtual dom 计算就做不到流畅了。所以在 React / DOM 之间又架了一层“动画状态”层,比如 react-spring。这一层控制动效的状态可以理解为 5th tier。

feb27168837e1f52caccd4da1b895efc.png

从 2-tier 到 5-tier 的驱动力至始至终都是相同的,就是 I/O 开销。因为动画计算不能发送到 React 端去计算,必须在 DOM 内本地计算,也是一种对 I/O 的优化。而不断优化 I/O 的背后是用户对 Ui 体验越来越苛刻的要求。

未来的 N-tier 架构

未来会怎么发展?会不会因为 5G 网络的发展使得 3-tier 架构复兴?目前来看,光速短期只能无法被克服,面向延迟优化的倾向是不会变的,除非现代物理学有重大突破。同时因为大家对于跨屏融合体验的要求越来越高,家里有小度的音箱,有投影仪,有手机。我们预期的是这些设备的体验是一体的,和你在一个显示器上的多个窗口不应该有本质区别。这样带来的结果必然是 5-tier 上还要再架上几层。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/409671.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kali字典_kali黑客系统wpscan工具扫描wordpress漏洞入侵攻击测试教程

WPScan是Kali Linux默认自带的一款漏洞扫描工具,它采用Ruby编写,能够扫描WordPress网站中的多种安全漏洞,其中包括主题漏洞、插件漏洞和WordPress本身的漏洞。最新版本WPScan的数据库中包含超过18000种插件漏洞和2600种主题漏洞,并…

mysql df_MySQL主从复制实战

什么是主从复制使用两个或两个以上的数据库,一部分数据库当做主数据库,而另一部分数据库当做从数据库。系统在主数据库中进行写操作,从数据库记录在主库上所有的写操作,使得主从数据库的数据保持一致。一旦主数据库出现问题时&…

python logistic回归_logistic回归介绍与源码分析

1. 介绍(由线性模型引出logistic回归)首先介绍一下什么是线性模型呢?线性模型的定义如下:给定 个属性描述的样本 , 代表样本在第 个属性上的取值。线性模型的目的是学习一个函数,它可以通过属性的线性组合来…

Activity、BroadcastReceiver、Service共同工作的简单例子

? Activity 好像是應用程式的眼睛,提供與User 互動之窗。 ? BroadcastReceiver 好像是耳朵,接收來自各方的Intent。 ? Service 好像是手,提供符合Intent 意圖之服務。 10.2.1 操作情境: 1. 此程式一開始,畫面出現兩…

线程执行一半断了_有的线程它死了,于是它变成一道面试题

----本文首发于公众号,关注文末公众号阅读体验更佳有些线程它活着,但它躺在池中碌碌无为;有的线程它死了,于是它变成一道面试题。这次的文章,要从一次阿里的面试说起。我记得那天是周一,刚刚经历过周末过的…

C#中的扩展方法,Linq,IO和多线程的定义和实例

前段时间学C#的上转型,泛型,lambda表达式这些应用的理解很费劲。学过之后我多多的练习了几天,接下来继续复习C#的其他一些概念,说实在的这些知识点学过之后很容易忘,但是都是很重要的,所以发表在博客上没事…

准确率 召回率_吴恩达深度学习笔记(61)-训练调参中的准确率和召回率

单一数字评估指标(Single number evaluation metric)无论你是调整超参数,或者是尝试不同的学习算法,或者在搭建机器学习系统时尝试不同手段,你会发现,如果你有一个单实数评估指标,你的进展会快得多,它可以快…

探讨LoadRunner的并发用户和集合点

探讨LoadRunner的并发用户和集合点 近来跟踪一个项目,发现同事们在执行性能测试时,比较热衷于使用集合点,从概念上认为要得到并发用户就必须设置集合点,认为在执行一个压力测试脚本时,设置了集合点才算是有效的并发用…

spring gateway 鉴权_通过spring实现service变成controller,代码得到了简化

在网上发现了一个牛X的思路,在做restful的时候,如果业务改变,需要每次都修改controller,后来方便了,直接透传的方式,其实也比较麻烦,每次都要写controller。需求变了接口也发生了改变&#xff0…

java中return返回值_Java中return的用法

展开全部一、return语句总是用在方法中,有两个作用。一个是返回方法指定类型的值(这个值总62616964757a686964616fe59b9ee7ad9431333366306434是确定的)。一个是结束方法的执行(仅仅一个return语句)。二、实例1 。返回一个String。private String gets(){String s …

java 事件分发线程_深入浅出Java多线程(2)-Swing中的EDT(事件分发线程) [转载]...

本系列文章导航本文主要解决的问题是:如何使其Swing程序只能运行一个实例?抛开Swing, 我们的程序是通过java 命令行启动一个进程来执行的,该问题也就是说要保证这个进程的唯一性,当然如果能够访问系统的接口&#xff0…

java redis 分布式锁_使用Redis单实例实现分布式锁

一、前言在同一个jvm进程中时,可以使用JUC提供的一些锁来解决多个线程竞争同一个共享资源时候的线程安全问题,但是当多个不同机器上的不同jvm进程共同竞争同一个共享资源时候,juc包的锁就无能无力了,这时候就需要分布式锁了。常见…

设计一个按优先数调度算法实现处理器调度的程序_计算机中的程序都是怎么运行的,来深入了解一下吧...

在现代计算机操作系统中,总是会保持多道程序环境。一个作业被提交后,通常经过作业调度和进程调度后,才能获得处理机。有时为提高内存利用率,还会设置中程调度。那我们先来了解一下处理机调度的层次吧。高级调度,又称作…

mysql 查看锁_SQL-mysql锁等待与死锁

一 前言本篇是MYSQL高级进阶篇内容第二篇,学习本篇的基础是知识追寻者之前发布过的文章,尤其是《MYSQL架构入门篇》重中之重;《SQL-你真的了解什么SQL么?》《SQL-小白最佳入门sql查询一》《SQL-小白最佳入门sql查询二》《SQL- 多年…