为什么要学 React/VUE?

2022-12-30 14:02:45 +08:00
 tool2d
这两个框架的本质是什么?就是对比虚拟 DOM 的 diff 变动,来映射浏览器真实的 DOM 节点。

所以写程序一定需要这个吗?其实并不需要。

一个变量变动后,把变量的 flags 设置为脏就可以了。然后把所有依赖这个变量的函数,都自动计算一次。

如何自动计算?就是每帧都调用 update()函数,里面有一系列类似 if (var_A.is_dirty) call_some_function(); 的语句。

这些变量依赖语句,都可以通过源代码预处理器,来进行自动推导和生成。

使用 React/VUE 框架,能较好的组织你的代码,但是并不能让你的程序跑的更快。
2944 次点击
所在节点    前端开发
26 条回复
kop1989smurf
2022-12-30 14:19:59 +08:00
很大程度上,就是《康威定律》
既:即系统设计本质上反映了企业的组织机构。

vue 、React 等这些框架工具束缚了开发人员的手脚,让相同功能的实现的方式尽量复用与标准化、模块化。
从而做到了生产角度上的解耦、统一和通用。

大公司恰恰就需要的是人才与产出二者的解耦与通用。
kop1989smurf
2022-12-30 14:21:37 +08:00
勘误:即系统设计本质上反映了企业的组织结构(不是机构)。
tool2d
2022-12-30 14:22:47 +08:00
web developer 里的 UI 有两种模式,分别是 Retained Mode 和 Immediate Mode ,你可以在 youtube 找到解释。

React 就是 Retained Mode ,主要工作就是维护各种变量的当前状态。

而很少有人会提到 Immediate Mode ,这是基于游戏那种每帧更新的模式,完全不需要保存状态。为什么?因为每帧更新的情况下,你能直接通过和上一帧对比,知道那几个变量被设置和改动了,就不需要额外保存和维护状态了。
retrocode
2022-12-30 14:28:10 +08:00
问题在于: 使用框架并不是为了更快, 至少更快不是优先级最高的考虑, 而是为了工程化, 为了开发更快, 修改更便捷, 移植更方便, 降低心智负担
wu67
2022-12-30 14:32:17 +08:00
为什么不想一想, 如果 vue react angular 没有出现, 网页会是怎样的?
答案是 jsp asp php, 或者 ejs pug 这样的模版.
从 seo 方面来说, 服务端渲染确实比客户端渲染要好一点.
在服务器资源占用没达到瓶颈之前, 加载速度也确实比客户端渲染要好.
但是 ajax 方面呢, 前端开发者需要手工操作 DOM, 势必造成更大的心智负担. 当然你也可以直接丢掉心智负担, 流水线式面条逻辑 if else 一把梭, 那么手工操作 DOM 的性能问题就暴露出来了.
为了拉高 DOM 操作的性能下限, 势必会写各种各样的工具库、制定约束规范, 到了最后, 造出来的轮子, 其实就是一个简易版的 3 大框架, 恭喜你重新发明了 vue react angular !
loading
2022-12-30 14:33:02 +08:00
说个冷知识:
浏览器操作 dom 效率非常低。
TWorldIsNButThis
2022-12-30 14:36:50 +08:00
性能上来说
精确更新 dom > v-dom diff > 粗粒度更新 dom
Mexion
2022-12-30 14:40:12 +08:00
@loading 说个冷知识:浏览器操作 dom 效率低,但是框架并不能让 dom 操作效率变高。
rabbbit
2022-12-30 14:41:33 +08:00
前端工程化
Java 不一样么,为了工程化所以啰嗦.
weiwoxinyou
2022-12-30 14:51:12 +08:00
可以先进行检索再提问,知乎上已经有非常棒的回答了。

我个人的理解就是:
1. mvvm 优于 mvc 的好处之一就是把逻辑和页面分离,你可以试试写一个纯 js 的 TODOList 再把他转化为 react/vue 版本,你可以明显感觉到项目组织上的提升,对大型项目而言这点就更重要了。
2. 框架通过浏览器操作 dom 的方式更新 dom ,但是框架比原生操作更快的原因就是它会把能合并的操作合并完再去操作,对大部分人而言都比原生操作 dom 更快。
3. “源代码预处理器”并没有你以为的那么智能,本质上只是将你的代码通过词法分析语法分析进行了 AST 的抽取,这个 update 函数如果你觉得写的不好,你完全可以进行重写。
terranboy
2022-12-30 14:53:35 +08:00
C 语言做的东西很快啊 我写网站也用 C 语言?
MossFox
2022-12-30 14:56:21 +08:00
"使用 React/VUE 框架,能较好的组织你的代码,但是并不能让你的程序跑的更快。"

……确实就是为了更好地组织代码和方便开发的。与 1L 说的一样,如果没有这两个架子在这,也就很难有那些大家喜闻乐见的组件库了(特指含交互控件的那种组件库,不是单纯 CSS 为主的库)。

然后,React/Vue 开发的应用有 view = f(state) 的特点,在 state 不发生变化的时候,页面不会占用额外的处理器资源来处理渲染相关事项。用户操作带来 state 变化、再进行重渲染,这样耗费的资源可以尽可能少。游戏那种按帧刷新的,放在常见的网页应用场景下面会有性能问题。
loading
2022-12-30 15:14:53 +08:00
@Mexion #8 但某些框架可以减少低层次开发人员的一些多余 DOM 操作。
wonderfulcxm
2022-12-30 15:16:15 +08:00
我也不知道,大家学我就学了。🐶
“人们在可以自由行事时,往往互相模仿。”——埃里克·霍弗
GzhiYi
2022-12-30 15:22:26 +08:00
我觉得使用 react 和 vue 可以让你和程序跑的“更快”。
1. 可以让你更轻松流畅的完成项目任务,同样让你接手其他同事写的代码时不会那么杂乱无章。
2. 同一个功能,如果使用框架封装的 api ,即便本质是操作 vnode 等对象来更新 DOM 节点,也会比纯用 js 操作 DOM 节点来的高效,这里的高效可以考虑复用性和可读性等等。死抠“虚拟 DOM 最后都是更新 DOM 节点,所以速度<=js 操作 DOM 节点”是没意义的。
在现在的 web 开发上,效率是远大于那点性能损耗的。
libook
2022-12-30 15:36:02 +08:00
实际上,对于任何技术来说,都是先有需求再考虑选型,而不是先拿到选型再考虑是不是需要。

任何技术都有其适用或不适用的场景。如果只是写个简单交互页面,使用原生 API 也能很快写出来。框架通常都是用于复杂的交互场景,减少重复工作。
mozhizhu
2022-12-30 16:14:58 +08:00
因为💴,要是无法带来💴,jquery 一把梭
awesomes
2022-12-30 16:18:58 +08:00
这个问题很难理解吗?项目的性能并不是第一位的,可维护性才是最重要的。为什么要用 sass 、tailwind ?难道是因为他们的性能更好吗
Feiex
2022-12-30 17:24:30 +08:00
能减少 bug 就行了,尤其是后台系统,那字段太多了,用 jq 写就得吭哧吭哧调
nomagick
2022-12-30 17:30:02 +08:00
现在的前端行业有严重的结构性问题

React 和 Vue ,怎么较好组织代码使项目可维护了,
还有人提 tailwind ,这东西更毒。

就现在前端的写法,那个可读性,
任何一个稍微复杂的项目,你能找出第二个人接前一个人的代码而不用重写算我输。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/905576

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX