当前位置: 首页 > Web前端 > vue.js

《前端会客厅》对话Winter和游玉玺,深入探究Vue3设计思想(上)

时间:2023-03-31 20:25:05 vue.js

前端会议室第一期B期地址前端会议室是我和Winter设计的技术方案,每期会请客聊前端技术B站友达的最后一场直播讲解了很多Vue3的新设计。幸运的是,前端会议室的第一场会议邀请了友达,从另一个角度来谈谈vue3。我也为Vue3的新特性准备了一些代码演示。相当于买手秀,我最近会录个视频放B站上。欢迎关注toc体验vue3的三种姿势。组成ApiFragmentTeleport悬念大小。vue-cli官方webpack-previewvite详细步骤#vue-clinpminstall-g@vue/clivuecreate01-vue3-clicd01-vue3-clivueaddvue-nextnpmrunserve#webpackgitclonehttps://github.com/vuejs/vue-next-webpack-preview.git01-vue3-webpackcd01-vue3-webpacknpminstallnpmrundev#vitenpminstall-gcreate-vite-appcreate-vite-app01-vue3-vitecd01-vue3-vitenpm安装npmrundevVite是现代浏览器的开发工具,告别繁琐的开发环境等待。模块支持导入,允许浏览器处理es6导入。好处是当前页面引用多少,编译多少。项目越大,优势越大。Rollup依然是编译用的,但是生产环境其实尽量使用es6import。当你在做懒加载和分包的时候,如果浏览器不支持,动态引入polyfilled->热加载基本在100ms以内。和webpack2S做大项目的体验相比,有很大的差距友达愿意在vite这样的工具上投入精力,这是一件非常好的事情。大家在webpack上折腾了很久vie也给了我一个启发,就是优达的命名艺术。vue和vite都是法式的,风格很浓。以后我会开源Vue3。决定我的下一个开源项目叫cuir.jsPerformanceVue2通过defineProperty初始化所有数据,vue3使用proxy动态判断返回什么并做拦截,减少初始工作量,提高组件实例化是还是很明显,先把代码mount一会儿,看看vue2和vue3的update对比代码。vdom重写了动态和静态模板。v-for拆分出区块,区块内部节点结构不变。我们可以直接维护数组中的动态节点。一个大模板可能嵌套十层,但是如果没有v-if或者v-for,整个模板只需要记录一个数组,包括动态节点。所以vue2也有静态标记优化,但并不完美。Vue3设计了块的概念。update只与动态内容强相关,与静态内容解耦。大多数项目中的静态节点比你想象的要多,比如一些为了布局而存在的div等。这之后我会专门发一篇文章来解释测试组件。官方说更新1.3~2次,测试结果更好。看来裕达还是比较保守的。与vue2相比,SSRSSR有2~3倍的差距。客厅当时就提到了这个,特别是ssr的新实现,还是很自豪vue3可以静态stringify所有静态字符串,只有一个buffer,vue2之前,即使是字符串,也还是有一个虚拟节点里面的处理逻辑,用wrk测qps,详细代码文章vue2和vue3ssr直接上结论130VS288,也是2.x倍的差距。组件复杂后,这种差距会越来越明显。可以考虑自己试一下500个组件的压测//vue212个进程,300并发,按10秒?~wrk-t12-c400-d10shttp://localhost:9092/运行10s测试@http://localhost:9092/12个线程和400个连接^[[线程统计平均StdevMax+/-Stdev延迟1.48s442.21ms1.80s89.88%Req/Sec24.6220.5688.0059.73%10.10s中的1319个请求,173.65MB读取套接字错误:connect157,read183,write0,timeout74Requests/sec:130.58Transfer/sec:17.19MB//vue312个进程,300个并发,按10秒?~wrk-t12-c400-d10shttp://localhost:9093/运行10秒测试@http://localhost:9093/12个线程和400个连接ThreadStatsAvgStdevMax+/-StdevLatency770.76ms165。36ms1.89s89.11%Req/Sec63.9956.81252.0074.34%2912requestsin10.10s,411.12MBreadSocketerrors:connect157,read31,write0,timeout0Requests/6MB0/sec4动态性能更新:传输三对一,第一屏幕渲染对比,更新性能对比包括dom操作,如果去掉dom操作,性能对比更明显,可能是日常业务场景的3倍以上,静态组件会比你意识到的多,比如一些用到的div在某些css布局中值得期待。详细的代码内部结构层次分明,monorepo编译层+运行时优化自定义渲染器api。由于mpvue框架的发布,如果要修改vue2的编译器和运行时,必须完全fork一个vue,然后再改,小优17年的微博,还说以后这些都会被反汇编.用了20年的vue3来实现这个,写一些文章是很有必要的。下集先放图片和代码先睹为快组合api实战片段组件递归响应式骚操作自定义渲染器自定义渲染器实际用户问答+八卦反应与Vuex关系类基础API杀心之旅Vue3设计流程小友如何学习和拓展推荐https://www.yuque.com/woniupp...