当前位置:   article > 正文

Vue3.0和vue2的区别详解_vue3什么时候发布的

vue3什么时候发布的

vue3发布于2020年9月18号

一.vue3和 vue2的区别

1.vue3.x性能上有很大提升

2.打包减少了41%

3.初次渲染相比vue2快了55%,更新快了13%

4.内存使用减少了54%

5..使用了组合(composition)api 代替了vue2得选项(option)api

6.vue3比vue2代码更容易维护

7.响应式原理不同 

Vue2.0使用Object.defineProperty

原理:通过使用 Object.defineProperty 来劫持对象属性的 geter 和 seter 操作,当数据发生改变发出通知

  1. // 数据
  2. let data = {
  3. title: '',
  4. // 备份数据
  5. _data: {}
  6. }
  7. // 定义特性
  8. Object.defineProperty(data, 'title', {
  9. // 定义特性属性或者特性方法
  10. // 取值方法
  11. get() {
  12. // console.log('get')
  13. // 注意:不能通过自身属性取值
  14. // return this.title
  15. // 返回备份的数据
  16. return this._data.title;
  17. },
  18. // 赋值方法
  19. set(value) {
  20. // this指向对象
  21. // 注意:不能为自身属性赋值
  22. // this.title = value
  23. // 我们可以向备份数据中存储
  24. this._data.title = value;
  25. // console.log('set')
  26. // 更新视图
  27. updateView(this._data)
  28. }
  29. })
  30. // 视图模板
  31. let tpl = document.getElementById('app').innerHTML
  32. // 实现更新视图的方法
  33. function updateView(data) {
  34. // 处理模板
  35. let html = tpl.replace(/{{(\w+)}}/g, (match, $1) => {
  36. //data中获取数据
  37. return data[$1] || ''
  38. })
  39. // 更新视图
  40. document.getElementById('app').innerHTML = html;
  41. }

vue3使用ES6的新特性porxy

原理:通过ES6的新特性proxy来劫持数据,当数据改变时发出通知

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="yingaxiang" content="width=device-width, initial-scale=1.0">
  6. <title>vue3.0数据双向绑定</title>
  7. </head>
  8. <body>
  9. <div>
  10. <input type="text" id="input">
  11. <span id="text"></span>
  12. </div>
  13. </body>
  14. </html>
  15. <script>
  16. var obj = {};
  17. var obj1 = new Proxy(obj, {
  18. // target就是第一个参数obj, receive就是返回的obj(返回的proxy对象)
  19. get: function (target, key, receive) {
  20. // 返回该属性值
  21. return target[key];
  22. },
  23. set: function (target, key, newVal, receive) {
  24. // 执行赋值操作
  25. target[key] = newVal;
  26. document.getElementById('text').innerHTML = target[key];
  27. }
  28. })
  29. document.addEventListener('keyup', function (e) {
  30. obj1[0] = e.target.value;
  31. });
  32. </script>

 

总结

Vue2.x版本中的双向绑定不能检测到下标的变化
proxy可以劫持整个对象,并返回一个新对象

8.vue3的源码使用了typescript进行了重构 更好的支持ts

9.vue3真正的实现了按需导入

10.vue3兼容vue2的所有语法

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/365708
推荐阅读