经过技术选型研究,我们放弃了 React,转向 Vue

2018-12-22 14:39:22 +08:00
 nohup

因为几个项目下来,我们发现前端的应用过于卡顿,甚至还不如上一版本 JQuery Easy UI 做出来。在项目经理的会议主持下,我和前端同学在会议上就React 是否符合我们需求的问题充分交换了意见,最终会议决定放弃 React,转向 Vue。
具体原因如下: 我们应用需要每个 tab 内容显示 1000 个列表条目,每个条目显示一个文本状态和背景颜色,1000 个条目里随机每秒有一个改变文本状态。
之前有一版是用 JQ 的。JQuery 做出来的就初次只卡顿 2s,而 React 作出来每点击一次 button 却要卡的四五秒。经过前端深入对 React 研究之后,他认为这是 React 的缺陷-->无法很好地解决高频率渲染大量组件内容。

为什么无法解决呢?我不是前端,我这里拷贝一下前端的原话:

因为 React 在进行状态更新的时候,会进行判断每一个 listitem 的状态是否有改变。当然一两个组件这样就没啥问题,但是要是有 1000-1500 个小方块同时显示,而且每秒还要更新客户订单量,这样统计就会很卡了。你可以自己试一下,for 循环 1 到 1000,只输出一个文本,都会卡成狗屎,更别说 React 判断过程中不只判断一个 prop 属性呢,他要判断 N 个属性,你要在 1000*N 的判断之后,才进行渲染呢!我一开始就说用 Vue 会比较好,React 在 ERP 有嗯用完全搞不定那么多高频率的渲染需求的。“

而且我也觉得用 React 的大部分都是为了 CRUD 吧?如果像一些实时的高频率的刷新,抱歉,我和前端没看到哪一个大厂用 React 来做,感觉真的卡成狗屎。既然前端觉得 Vue 很 ok,那就让他去试试。

所以,各位认同 React 不适合大数据高频率的论点吗?

58180 次点击
所在节点    程序员
325 条回复
passerbytiny
2018-12-22 15:43:47 +08:00
大概率:一段时间后,经过技术选型研究,我们放弃了 Vue,转向原生 HTML+Javascript ;再一段时间后,经过技术选型研究,我们放弃了网页端,转向客户端。

显示 1000 行还要能随机刷新,这基本上属于特殊需求了,通用轮子一般都不能完美解决,要自造轮子。

你不是前端,直接下了结论,后面又只当前端的传话筒,所以我很想问你一句经典的话:关你屁事?
chinvo
2018-12-22 15:44:42 +08:00
@chenqh #39 很不可以了(
chinvo
2018-12-22 15:45:43 +08:00
@chenqh #38 你看网络就明白了(
lsido
2018-12-22 15:48:02 +08:00
前端怎么还没回复,大伙儿等着看戏呢
reus
2018-12-22 15:51:06 +08:00
@nohup 问你的前端,去图书馆找书,是不是从头一本本找。1000 个元素,递归拆分成树,有元素更新时,shouldComponentUpdate 只需要执行数次,哪来的一个个判断。所以我一开始就说他不懂二分查找。
chenqh
2018-12-22 15:52:02 +08:00
@chinvo 看不明白,逃
creanme
2018-12-22 15:54:01 +08:00
别盲目换框架啊,问题解决不了发群里,或者社区,先咨询一下能否解决再说啊。
janxin
2018-12-22 15:56:52 +08:00
我觉得是 JS 不能多线程导致的渲染效率过低
nohup
2018-12-22 15:56:57 +08:00
@passerbytiny 的确不关我事,但我要把抛弃 React 的理由拿出来 6 一 6,看看大家的意见
frozen2013
2018-12-22 15:57:55 +08:00
我看过一篇介绍 react-fiber 的,里面提到过 fiber 架构出来之前的性能问题,跟你们公司遇到的类似,但是人家做实验 demo 的 dom 个数是 100000 个,10 万个啊!!!
你们 1000 个就遇到明显卡顿,是不是先花点时间看看如何优化?!突然换框架重写的成本我觉得也是很大的。

https://www.infoq.cn/article/what-the-new-engine-of-react
xiaojie668329
2018-12-22 15:59:00 +08:00
这肯定不是 react 的锅。。代码写不好用 vue 同样也会卡。
nohup
2018-12-22 15:59:22 +08:00
回复 by 前端:

@reus 现在元素需要更新,但是你就是不知道更新的元素有哪些,所以才一个个用 shouldComponentUpdate 去判断的嘛,这跟元素查找有什么关联吗,难道是我理解错了?
j717273419
2018-12-22 15:59:30 +08:00
你们别这样。。。回头前端要找工作了。。。
codermagefox
2018-12-22 16:04:42 +08:00
@nohup #52 不好意思,是我偏激了.你们前端其实这么想是正常的,毕竟我是闲着无聊才经常看源码.

如果你们真是这种特殊需求,你可以让他去看看 Fiber 架构.这玩意我不懂,但是面试的时候已经被问到了,似乎就是用来解决你们这种特殊需求的.
reus
2018-12-22 16:08:30 +08:00
@nohup 用二叉树式组件去表示列表,更新一个元素,那就只有那个元素路径上的 shouldComponentUpdate 会执行。说到这个份上都还不理解,那我就没办法了。
passerbytiny
2018-12-22 16:08:37 +08:00
@nohup #44 先下结论再看意见,拿出来的理由是自己不懂的,你这是“看看大家意见”的态度?
说下你的职位类型吧,你要是项目经理或者管开发进度的,我理解你,只忽略该主题,要不是,就上 block 了。
scofieldpeng
2018-12-22 16:12:49 +08:00
一般来说都是技术不行,然后又不愿意承认,只好怪框架。坐等楼主上相关不涉及机密的 demo 代码来得出一个严谨的结论
hlwjia
2018-12-22 16:14:57 +08:00
找了个古老的项目,改了一下录了个视频

<amp-vimeo data-videoid="307826445" layout="responsive" width="16" height="9"></amp-vimeo>
这个是每秒从后端获取 1200 个颜色变化
beyoung
2018-12-22 16:15:12 +08:00
你们真的经过了技术研究? 而不是主观感受
lihongjie0209
2018-12-22 16:15:33 +08:00
@janxin js 和渲染有什么关系, 渲染是浏览器的工作

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

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

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

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

© 2021 V2EX