赞
踩
模版的编写方面template 更接近原生html,对于新手上手Vue更友好
模版的预编译方面Vue3.0 提出的动静结合的 DOM diff 思想,编辑模板时,就为静态模版作标记,这样在更新时,进行新旧虚拟dom对比时,对于静态模版不做对比,就能够大大提高对比的效率。
React 采用JSX,虽然说提供了一定的灵活性,但是也导致了其更新就只能是局部重新渲染,从而它也就无法从模版层面进行静态分析。
当然,React 并不是没有意识到这个问题,他们在积极的同 prepack 合作。力求弥补构建优化的先天不足。
prepack 让你编写普通的 JavaScript 代码,它在构建阶段就试图了解代码将做什么,然后生成等价的代码,减少了运行时的计算量,就相当于 JavaScript 的部分求值器。
更新的优化方向Vue 由于进行数据拦截/代理,因此对于数据的变化更敏感、更精确;你动了多少数据,就触发多少更新,它默认的就是最优的更新。
React 是由开发者手动调用 setState ,触发局部刷新的,同时,React 暴漏给开发者 shouldComponentUpdate这个方法,来让开发者自主判断该组件是否需要更新,从而来避免不需要的重新渲染,以达到最优的更新效果,这样就给开发者带来了额外的负担,需要让大家考虑更多,以达到最优的效果。
这样来看,Vue更省心。
事件的处理方面React 事件系统庞大而复杂。其中,它暴漏给开发者的事件不是原生事件,是 React 包装过合成事件,对所有事件都进行了代理,将所有事件都绑定 document 上。
同时,React 中事件处理函数中的 this 默认不指向组件实例,这个需要你去手动修改。
Vue 事件处理函数中的 this 默认指向组件实例,这样更省事。
实现复用的方式上复用可以具体分为UI的复用和逻辑的复用。
UI的复用,通过对组件的复用,即可实现对UI的复用;逻辑的复用,先后经历了 Vue2中的Mixin/extend ----> Vue3中的基于函数的相应的API、React中的Hooks(函数式编程),从而将逻辑复用和UI复用在一定程度上解耦,使其组合性更灵活。参考链接:https://www.zhihu.com/question/301860721/answer/724759264
不支持不支持 IE8 及以下浏览器-----由于底层基于 Object.defineProperty 实现响应式,而这个 api 本身不支持 IE8 及以下浏览器
不利于 SEO的优化-------- 由于百度等搜索引擎爬虫无法爬取 js 中的内容,故 SPA(单页面渲染)先天就**不利于 SEO的优化。
首屏加载的性能问题------------csr 的先天不足,首屏加载的性能问题,例如:白屏时间过长
CSR:客户端渲染
SSR:服务器端渲染
参考地址:https://blog.csdn.net/weixin_39786582/article/details/83753225
**
使用 虚拟DOM (Virtual DOM)
为什么Virtual DOM的能提高页面渲染性能?
Virtual DOM是一个映射真实DOM的JavaScript对象
如果需要改变任何元素的状态,那么首先在Virtual DOM上进行改变(而不是直接改变真实的DOM)
然后,计算新旧Virtual DOM之间的差别(算法)
最后,根据这些差别对真实的DOM增加、删除、修改、移动。
提供了响应式 (Reactive) 和组件化 (Composable) 的视图组件。
中心思想相同:一切都是组件,组件实例之间可以嵌套。
每个组件都提供合理的钩子函数,可以让开发者定制化地去处理需求。
专注于核心库,而将其他功能如路由和全局状态管理交给相关的库。
Vue + Vue-Router + Vuex
React + React-Router + Redux
不同点1、数据绑定: 单向、双向
React: 基于JSX编码, 单向数据绑定, 不能直接更新状态数据,必须通过setState()更新指定数据
2、模板管理:JSX、template模版
Vue所有的模板使用的是近似常规HTML,只不过是新添加了一些属性

React所有的模板使用的是JavaScript的语法扩展——JSX书写

3、虚拟 DOM的区别
它在渲染过程中,会跟踪每一个组件的依赖关系,不需要重新渲染整个组件树。每当应用的状态被改变时,全部子组件都会重新渲染。当然,这可以通过 PureComponent/shouldComponentUpdate 这个生命周期方法来进行控制,但 Vue 将此视为默认的优化。4、高阶组件的写法
react 可以通过高阶组件(HOC)来扩展,
Vue 需要通过 mixins、extends 来扩展
5、构建工具不同
React ==> Create React APP
Vue ==> vue-cli
6、跨平台—app开发
Vue结合Weex框架,进行app的开发。
React结合自身的React-native,进行app的开发。
参考链接 http://caibaojian.com/vue-vs-react.html
MVC是Model-View- Controller的简写。即模型-视图-控制器。M和V指的意思和MVVM中的M和V意思一样。
C即Controller指的是页面业务逻辑。
使用MVC的目的就是将M和V的代码分离。
MVC是单向通信。也就是View跟Model,必须通过Controller来承上启下。
MVP 模式与 MVC 唯一不同的在于 Presenter 和 Controller。
在MVC 模式中使用观察者模式,来实现当 Model 层数据发生变化的时候,通知 View 层的更新。这样 View 层和 Model 层耦合在一起,当项目逻辑变得复杂的时候,可能会造成代码的混乱,并且可能会对代码的复用性造成一些问题。
MVP 的模式通过使用 Presenter 来实现对 View 层和 Model 层的解耦。MVC 中Controller 只知道Model 的接口,因此它没有办法控制 View 层的更新,MVP 模式中,View 层的接口暴露给了 Presenter 因此可以在 Presenter 中将Model 的变化和 View 的变化绑定在一起,以此来实现 View 和Model 的同步更新。
这样就实现了对 View 和 Model 的解耦,Presenter 还包含了其他的响应逻辑
MVVM即Model-View-ViewModel的简写。即模型-视图-视图模型。
模型(Model)指的是后端传递的数据。
视图(View)指的是所看到的页面。
视图模型(ViewModel)是mvvm模式的核心,它是连接view和model的桥梁。它有两个方向:一是将模型(Model)转化成视图(View),即将后端传递的数据转化成所看到的页面。实现的方式是:数据绑定。二是将视图(View)转化成模型(Model),即将所看到的页面转化成后端的数据。实现的方式是:DOM 事件监听。
这两个方向都实现的,我们称之为数据的双向绑定。
为什么会出现MVVM
前端开发中暴露出了三个痛点问题:
1、开发者在代码中大量调用相同的 DOM API,dom操作比较繁琐。
2、大量的 DOM 操作使页面渲染性能降低,加载速度变慢,影响用户体验。
3、 当数据频繁发生变化, 开发者需要主动进行dom操作将其更新到 视图上 ;
当用户的操作导致 数据 发生变化,开发者同样需要将变化的数据同步到 指定的数据变量中;
这样的工作不仅繁琐,而且很难维护复杂多变的数据状态。
其实,早期 jquery 的出现就是为了前端能更简洁的操作 DOM,但它只解决了第一个问题,
另外两个问题始终伴随着前端一直存在。直到MVVM 的出现,完美解决了以上三个问题。
MVVM的优点
MVVM的缺点
并不是VM完全取代了C,
而是在MVC的基础上,VM抽离Controller中展示的业务逻辑,而不是替代Controller,其它视图操作业务等还是应该放在Controller中实现。
也就是说MVVM实现的是业务逻辑组件的重用,使开发更高效,结构更清晰,增加代码的复用性。
作者:Aniugel
链接:https://www.jianshu.com/p/4db4b191de06
来源:简书
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。