主要比较参数:
  • 库体积,打包项目体积
  • 开发体验
  • 性能对比

在对比参数前首先分析一下redux和mobx的设计模式,redux和mobx都没有使用传统的mvc/mvvm形式,而且他们使用flux结构也略有不同,这个也是造成redux和mobx各项参数不同的缘由之一。

mvc/mvvm和flux的对比

 
mvc设计图
 
flux设计图

如图可知,mvc在处理多数据和复杂业务是有一定局限性的,一个view层可能会调用到无数个model层,当然解决这个问题的方法也是有的,我们可以将多个model抽象成一个model,例如处理基础数据的model合成一个基础model,但这样编写也会造成代码的冗余以及没必要的性能损耗。

flux对比mvc,代码结构更加简单、一目了然。action处理数据请求,然后将请求dispatch到store中,这样设计也十分契合react单向数据流的概念。在本文提到的两个框架redux和mobx也都是基于flux的设计概念,不同的是mobx在store和view中处理数据是使用的双向绑定,如下图。

 
mobx设计图

双向绑定无疑会增加性能消耗,但是mobx在双向绑定的同时禁掉了react自身的刷新,要知道react shouldupdate生命周期是性能优化的大头,mobx禁掉了这个性能会直接大幅提升,但这个和双向绑定的性能消耗相比谁占用的性能更高,让我们用数据比较。

库体积,打包项目体积

我选用了两个相似的项目,一个使用redux开发,一个mobx(之所以没用两个框架把一个项目写两遍是因为我太懒了)。

 
mobx项目

表红的部分是抽出的lib和打包的js,一个是64.2k,一个是29.2k。

 
redux项目

这个项目redux lib是webpack手动打包的,没有像mobx项目用打包版本,体积是43.2k,app.js由于比mobx项目多使用了一个svg库(32k),体积达到了62.3k,减去多的一个库大概30.3k。

综上,redux比mobx打包体积略大,几乎可以忽略不记,但是lib包比mobx小20k,所以这轮redux胜,ヾ(==)ノ。

开发体验

  • 学习成本:mobx基本看一遍,看看demo就能上手写了;redux看两天,写了个练手demo才勉强会。
  • 开发效率:由于mobx是双向绑定的,开发的时候你会觉得mobx写的都是有效代码;redux写同一个功能会多写很多代码,代码逻辑绕啊绕。
  • 代码质量:redux直接写,不做react渲染优化是个大坑,但是react渲染优化又比较繁琐,可能还要添加第三方插件,增加不必要的代码量。mobx基本不做渲染优化,渲染更新,是否更新的生命周期都被禁用了,还优化个屁。。。。

综上 开发体验上mobx比redux领先太多。

性能对比 此次比较是redux项目已经优化,mobx项目未优化的情况下进行的,mobx项目优化后会补坑

  • 初始渲染
    感官是mobx更快,但是实际....下面上图。下面两张图是初次渲染的图,明显mobx在内存占用上更大,我考虑的原因mobx和redux渲染部分都是靠的react,这部分差别不大,主要是mobx多了双向绑定导致最大内存数值很高。在布局和渲染方面mobx优势明显,主要得益于mobx禁用了react大部分的生命周期,很大程度的减少了刷新次数,这次用的redux项目已经是优化过了渲染次数的,但还是渲染这么多次不禁汗颜。javascript与事件这块没有做太多了解,待填坑。
 
redux性能图,最大大小133.69mb
 
mobx性能图,最大大小162mb
  • 内存稳定后测同样操作的性能。
    redux最大内存162,但渲染次数还是惊人。
    mobx内存最大290,唯一欣慰的是渲染次数比较少。
 
redux性能图
 
mobx性能图

总结

优化过后的redux项目性能比较好,mobx暂时还没想到特别好的优化方案,找到了会补坑;框架体验,开发效率,学习成本方面mobx更好,希望优化过后的mobx性能有所提升;代码打包体积redux确实要小点,但是如果项目比较庞大,redux开发代码会比mobx多不少,体积这方面基本可以忽略。

在react项目中使用redux or mobx?的更多相关文章

  1. 如何在非 React 项目中使用 Redux

    本文作者:胡子大哈 原文链接:https://scriptoj.com/topic/178/如何在非-react-项目中使用-redux 转载请注明出处,保留原文链接和作者信息. 目录 1.前言 2. ...

  2. 如何优雅地在React项目中使用Redux

    前言 或许你当前的项目还没有到应用Redux的程度,但提前了解一下也没有坏处,本文不会安利大家使用Redux 概念 首先我们会用到哪些框架和工具呢? React UI框架 Redux 状态管理工具,与 ...

  3. 优雅的在React项目中使用Redux

    概念 首先我们会用到哪些框架和工具呢? React UI框架 Redux 状态管理工具,与React没有任何关系,其他UI框架也可以使用Redux react-redux React插件,作用:方便在 ...

  4. React项目中使用Mobx状态管理(二)

    并上一节使用的是普通的数据状态管理,不过官方推荐使用装饰器模式,而在默认的react项目中是不支持装饰器的,需要手动启用. 官方参考 一.添加配置 官方提供了四种方法, 方法一.使用TypeScrip ...

  5. redux在react项目中的应用

    今天想跟大家分享一下redux在react项目中的简单使用 1 1.redux使用相关的安装 yarn add redux yarn add react-redux(连接react和redux) 2. ...

  6. react项目中引入了redux后js控制路由跳转方案

    如果你的项目中并没有用到redux,那本文你可以忽略 问题引入 纯粹的单页面react应用中,通过this.props.history.push('/list')就可以进行路由跳转,但是加上了redu ...

  7. 深入浅出TypeScript(5)- 在React项目中使用TypeScript

    前言 在第二小节中,我们讨论了利用TypeScript创建Web项目的实现,在本下节,我们讨论一下如何结合React创建一个具备TypeScript类型的应用项目. 准备 Webpack配置在第二小节 ...

  8. react项目中实现元素的拖动和缩放实例

    在react项目中实现此功能可借助 react-rnd 库,文档地址:https://github.com/bokuweb/react-rnd#Screenshot .下面是实例运用: import ...

  9. React项目中实现右键自定义菜单

    最近在react项目中需要实现一个,右键自定义菜单功能.找了找发现纯react项目里没有什么工具可以实现这样的功能,所以在网上搜了搜相关资料.下面我会附上完整的组件代码. (注:以下代码非本人原创,具 ...

随机推荐

  1. 多智能体系统(MAS)简介

    1.背景   自然界中大量个体聚集时往往能够形成协调.有序,甚至令人感到震撼的运动场景,比如天空中集体翱翔的庞大的鸟群.海洋中成群游动的鱼群,陆地上合作捕猎的狼群.这些群体现象所表现出的分布.协调.自 ...

  2. Java假期样卷 简易通讯录

    score.java package score; public class score { String name; String num; int age; boolean sex; double ...

  3. 一个有意思的js块作用域问题

    1.问题 首先把问题放出来,昨天看了一个掘友发的一个问题,然后跟我同事一起研究了一下,没找出来是为什么,然后我回来一直在想为什么,然后各种找资料研究,从各个方面找为什么,比如js上下文,作用域,js垃 ...

  4. Java基础学习笔记(二) - 面向对象基础

    面向对象 一.面向对象概述 面向对象思想就是在计算机程序设计过程中,参照现实事物,将事物的属性特征.行为特征抽象出来,描述成计算机时间的设计思想.面向对象思想区别于面向过程思想,强调的是通过调用对象的 ...

  5. sort,uniq,wc,tr

    sort (选项)(参数)      sort是用来排序数据的. 以下面这个文本为例 [root@bogon ~]# cat a 123 4567 88 abc aaa AAA jk 777 777 ...

  6. pywintypes.com_error: (-2147352567, '发生意外 解决方案

    在使用win32com处理Excel的时候,遇到pywintypes.com_error: (-2147352567 错误. 百度.Google各种方法不得其解,和以下网页类似——http://blo ...

  7. Windows中利用共享内存来实现不同进程间的通信

    Windows中利用共享内存来实现不同进程间的通信 一.msdn详细介绍 https://docs.microsoft.com/zh-cn/windows/win32/memory/sharing-f ...

  8. B-概率论-条件概率

    目录 条件概率 一.条件概率简介 二.条件概率推广 更新.更全的<机器学习>的更新网站,更有python.go.数据结构与算法.爬虫.人工智能教学等着你:https://www.cnblo ...

  9. js中的toString和valueOf

    数据的转换 基本上,所有JS数据类型都拥有valueOf和toString这两个方法,null除外.它们俩解决javascript值运算与显示的问题 所有对象继承了两个转换方法: 第一个是toStri ...

  10. bugku 很普通的数独

    下载下是一个没有后缀的文件,使用winhex打开,头文件为50 4b 03 为zip文件,修改后缀,打开压缩包,是一大堆数独图片. 仔细看了好久,发现这几张图片像二维码,而且1 5 21这三张图的位置 ...