精华内容
下载资源
问答
  • JAvASCript程序设计 参考资料 一选择题共20小题每小题 1.5分共 30分 1.c 2.d 3.d 4.c 5.a 6.d 7.b 8.b 9.c 10.b 11.c 12.c 13.d 14.b 15.a 16.b 17.c 18.c 19.c 20.a 二判断题共 10 小题每小题 2 分共 20 分 1....
  • vue2.0实战案例之高级教程-老孟编程

    千次阅读 2017-06-10 21:39:51
    vue2.0实战案例之高级教程 008:vue.js前端框架安装和使用范围。 vue版本升级和使用方式,vue和jquery.js,和zepto.js的优劣势分析。 vue为什么无法在开发小程序里无法使用,Windows对象分析。 Vue.js 的目标是通过尽...

    vue2.0实战案例之高级教程

    008:vue.js前端框架安装和使用范围。
    vue版本升级和使用方式,vue和jquery.js,和zepto.js的优劣势分析。
    vue为什么无法在开发小程序里无法使用,Windows对象分析。
    Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。


    009:vue各种基础指令使用技巧
    vue.js是什么,vue.js的声明式语法,条件与循环,from表单渲染语法。


    010: v-model实际使用案例,开发登录页面
    登录界面的v-model绑定或渲染数据,实际流程分析。


    011:v-if,v-bind实战使用案例,典型登录页面的逻辑实现。
    v-bind:class,v-if else,执行流程分析。
    vue实现典型的登录页面效果,模仿当当,京东登录效果,根据用户的输入监听登录按钮和可操作行为。
    在实际项目开发中可以直接参考,拿来用。


    012:v-for的高级使用,实战使用案例,典型的列表页面的逻辑实现
    结合传统list页面,来对v-for进行实际项目中的渲染,模拟今日头条的数据列表来实行,加深对v-for的灵活使用。
    v-for实现下拉刷新,上拉加载实现。
    在开发当当网商城项目中,商品列表,订单列表等等v-for的使用无处不在。


    013:v-on:click()的高级使用,典型购物车列表页面删除,添加操作
    v-on:click结合v-for使用,绑定list中每一条数据,删除list中的某一条,n条数据操作,
    使用场景为订单list中,删除一条订单。购物车删除一条数据等等在操作list的使用。
    vm.list删除一条数据后指针的变化,vm对象会对指针进行重置。
    特别强调,vm对象中关于this关键词的使用。


    014:vue之$watch()的高级使用场景之下拉菜单
    $watch()的使用原则和场景,能用但不能滥用,主要使用场景为。
    当click事件监听不到的时候而又不得不观察某个变量的变化,重点是配合下拉菜单操作来使用。


    015: vue之form表单绑定实际案例
    普通文本插值,单选绑定,多选绑定,修饰符之 .number, .trim的使用技巧。
    特别强调;文本区域插值( <textarea></textarea> ) 并不会生效,应用 v-model 来代替。
    vue组件模式不适合于APIcloud开发app,APIcloud在打包的过程中会影响vue的组件化,建议用原始引入的方式来使用vue。


    016:vue的ajax类库vue-resource的引入使用上,vue-ajax的使用案例
    vue-resource的下载和引入,怎么看文档,和测试代码。
    目前git上的vue-resource其实是兼容vue1.0和vue2.0的,都是可用得。
    结合数据列表页面和api接口数据,实战引入vue-resource的操作。
    vue-resource提供ajax组件默认是没有解决跨域问题的,需要自行处理或则后台开发人员做服务端的跨域处理。


    017:vue的ajax类库vue-resource的引入使用下,vue-ajax的使用案例
    vue-resource ajax 跨域跳过的坑,php版本的问题,导致我们写的php接口代码没有生效。
    特别强调:php版本也是需要测试,选一个稳定的版本。
    回调接受参数的固定写法
    var ret = JSON.parse(response.data);得到api返回的完整json数据


    018:vue之ajax加载数据loading框组件引入
    自动给vue-resource的ajax请求添加loadingbar。
    每一个ajax请求,都应该有一个加载框或者等待图标,更友好的引导用户,更好的用户体验。
    默认请求时间超过300毫秒才显示,可以手动配置延迟的时间


    019:vue之Filters过滤器使用,格式化Linux时间戳
    针对api接口返回的linux时间戳,利用filters过滤器,格式化成我们想要的样式。


    020:vue之mounted取代apiready(),原生js与jquery文档加载完毕的写法
    vue之mounted()取代apiready(),原生JS与jQuery文档加载完毕的写法
    能用vm变量的时候,我们不用this关键字,容易和其他类库污染,引起this指针的迁移。


    021:vue之get方法,set方法,典型的全选单选代码实现
    vue之get方法,set方法,实现典型的全选单选代码实现,set(),get()方法相当于自动触发行为,比较实用,做很多业务层面的逻辑。


    022:vue1.0版本项目升级2.0版本跳过的坑
    1:作用域的更改和性能提升
    2:v-for循环变量和索引的坑
    3:$index的废弃


    023:Gulp配置和node.Js的安装,构建本地小型http服务器+自动刷新技术
    何为前端自动化、和前端自动化的意义
    Gulp环境配置-和node.Js的安装
    构建本地小型http服务器+自动刷新
    Gulp 多屏自动刷新技术


    024:vue之页面tab选项卡效果实现
    v-for和v-bind:class配合使用来实现


    025:vue引入Layer-Mobile框架
    场景包括:信息框,提示层,询问框,页面层,底部对话框,底部提示,loading带文字,自定义标题风格等等。






    前端开发人员


    快速使用vue框架开发简单的项目


    老孟学堂教育总监:资深架构师,高级php开发工程师。
    精通php+mysql后台系统开发,thinkphp社区有开源的系统发布。apicloud,decloud开发app方面有独到的见解,主要开源项目有蚂蚁订货系统。




    孟老师带你100分钟搞定vue入门。
    vue.js是一套构建用户界面的 渐进式框架,与其他重量级框架不同的是,vue 采用自底向上增量开发的设计。
    vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合。另一方面,vue 完全有能力驱动采用单文件组件和 vue 生态系统支持的库开发的复杂单页应用。
    尤其vue在webapp开发的过程中发挥着巨大的优势。
    技术交流群:495654168
    展开全文
  • Javascript高级程序设计第四版详细测评

    千次阅读 多人点赞 2020-10-12 08:00:00
    简介哈喽大家好, 我是大圣,上次做了一个js的书籍测评,评价还不错,在做css和node之前,再做几本书的详细推荐吧, 国庆今天又在家好好读了几本具有代表性的javascript高级程...

    简介

    哈喽大家好, 我是大圣,上次做了一个js的书籍测评,评价还不错,在做css和node之前,再做几本书的详细推荐吧,  国庆今天又在家好好读了几本具有代表性的

    1. javascript高级程序设计【红宝书】

    2. javascript忍者秘籍

    3. 你不知道的javascript 【小黄书】

    4. javascript语言精粹与编程实践【绿皮书】

    5. how javascript works

    6. javascript20年(电子八卦书)

    img

    先来红宝书吧,这本书一直都是体系化学习js必备的书籍,第四版相比于第三版,多了很多,整本书分成三个大模块,全面使用最新的语法, 国庆又详细的看了一遍

    1. Ecmascript语法

      1. 基础内容

      2. 进阶操作

      3. 新增了迭代器,代理反射,期约(Promise)三个章节

    2. bom和dom

      1. 浏览器宿主环境的相关api

    3. javascript api

      1. js相关的进阶api

      2. 新增了模块和工作者线程(web worker)

      3. 最佳实践

    这本书详细的构建了整个javascript开发者所需要的知识体系,所以建议这本书作为体系化学习的开始, 读2~3遍后,再去阅读其他进阶和垂直领域的js书籍,效果倍棒

    image-20201008061120962

    版本

    image-20201006214121858

    我手里有的只有234三本  ,第四版换作者了,精彩依旧,体系化依旧是是红宝书的最大特点,借鉴winter的书评,这本书最大的特点就是体系化的前端教程,它是可以用来做教材的,javascript这几年很多好书,都是讲单点的,建议大家用这本书来构建前端开发的知识体系,再去看别的书和框架,构建前端程序员的核心竞争力 推荐给大家

    第四版的另外一个特色,是很多章节都带上了二维码,扫码可以看到官方对这一节的解读,体验不错, 不过如果视频能换成大妹子+露脸就更好了

    Ecmascript

    前三章

    第一章相关的历史更推荐《javascript20年》,第二三章是基础,有js基础的随便翻翻就好,值得注意的是第二章增加了symbol,第三章的位运算,这些都是在vue3源码里出现的,位运算关系到vue3的组合静态标记中的patchFlag和react源码中的EventFlag,一定要搞明白,而且位运算本身就是做组合权限教研的最佳实践,按位或授权,按位与校验权限,除了理解vue3和react源码外,我们做组件开发的时候也用的到

    image-20201005070058425
    image-20201005064951859

    变量作用域与内存

    这一章和第三版差不多,主要是讲清楚原始类型和引用类型,一个图就能搞明白,帮我们理解传参至关重要,除了undefined,null,boolean,number ,string,symbol是原始值,传递的时候是影分身, 其他都是引用,还是指向你自己, 修改会有副作用

    let obj1 = new Object();
    let obj2 = obj1;
    obj1.name = "lsp";
    console.log(obj2.name);  // "lsp"
    

    还有就是作用域链的查询,配合乱遭的变量提升、块级作用域、闭包,是众多骚包面试官喜欢的笔试题,与其刷题不如一次性搞清楚,配合小黄书上册,基本就通了

    最后是垃圾回收,机制有点像《寻梦环游记》,一个人的死亡并不是重点,被所有人遗忘后,才会被清理,变量也是如此, 如何利用垃圾回收机制去优化自己的代码,书中也给出了几个中肯的建议

    内置引用类型

    这两张主要是介绍内置各种乱遭的数据类型,比如Date,Regex,math,以及集合的引用类型arr,obj,set,map等,值得注意的是weakmap的讲解,会让大家对vue3的源码理解有所帮助

    看到书里解释weak是弱弱的拿着,所以不会阻止垃圾回收的时候,我笑了,翻译还是挺萌的,并且书里对定型数组的讲解,还是蛮不错的

    image-20201005212616083

    迭代器、生成器、面向对象、代理

    自带的for循环比较明显的劣势就是需要知道如何迭代,es6之后的迭代器就是为了解决这个问题,没有代码讲起来比较飘忽

    大概意思就是,定义了可迭代的协议,只要我们实现了这个协议的要求,也就是规定好【Symbol.iterator】这个key的行为,就可以通过迭代器去消费,不一定非得是数组或者对象

    image-20201005214820288

    生成器也贼牛逼,可以在一个函数内部暂停,也就是一个用*定义的生成器函数,内部遇见yield,就会暂停执行,知道调用next来恢复执行

    关于对象讲解了对象的configurable,enumberable,wirtable,value几个数据属性,分别对应着数据的能否删除,能否通过for in循环访问,能否修改和实际的值,介绍了一堆es6+的增强语法,然后详细讲解了原型链和继承,还加上了es6的class语法,配合小黄书上册,以后相关的问题你就是专家,和面试官谈笑风生

    然后就是学习vue3必备的Proxy和Reflect了, 响应式必备 快去看书吧,看完这章再去研究vue3的reactivity模块巩固一下,效果更佳

    函数和promise

    然后函数章节大家基本都会了,大部分内容大家都耳熟能详了,关于尾递归优化的小节值得关注,然后就是热度最广的期约与异步函数了,包括基本的使用,promise的合成策略呀,一些第三方的扩展等,

    关于promise的翻译,上个测评我讲过了,我问过hax,是future+promise的结合体, 我也觉得没必要翻译,但是如果翻译的话,我觉得期约还是挺准确的,毕竟总有一天这些术语都要翻译,否则技术书籍里的英文单词会越来越远

    配合promise和async await,我们可以写出更简洁和容易理解的代码,也是现代前端必备的技能了,这一章配合小黄书中册,以及绿皮书对promise的剖析,绝对是进阶必备

    以上都是js的语言规范,然后推荐大家关注tc39的github,会有很多新语法的讨论,了解新语法的来龙去脉,stage3的浏览器就基本是先了,stage2就是非常有潜力的天,我比较关注的比如Temporal处理事件,class fields

    能在语言的设计阶段就能围观甚至参与,绝对是装逼必备技能,这里推荐关注我的技术偶像之一hax,tc39委员会成员

    image-20201006215835219
    image-20201006215913089

    bom和dom

    bom和客户端检测

    然后就是浏览器环境了,所谓的bom和dom,bom没啥多介绍的,大家耳熟能详了,window,location控制导航,navigator了解浏览器,history操作浏览历史等

    客户端检测章节主要就是判断各个浏览器,这一块我建议大家阅读司徒正美的《javascript框架设计》,关于浏览器检测讲的最深入,不过现在这个现代浏览器横行的时代,这块内容过一下就好

    dom

    这块大部分内容也就是复习了,包括nodeType的12个数字都是啥意思,常见的dom操作,去瞅瞅dom启蒙作为复习资料也不错

    有一个新的MutationObserver接口值得关注,可以观察dom的变化,比如属性,子节点的变化,都可以记录下来,这个用来做用户行为监控,以及做fmp的性能统计,也就是首屏啥时候渲染出来,还可以设置不同元素的权重,比如video权重高等,统计出一个现在关键的性能治疗fmp,都是很好用的api

    然后就是一些扩展,大家也都很熟悉了,比如querySelector啥的,值得一提的是关于dom的遍历,使用NodeIterator和TreeWalker可以非常方便的进行dom深度优先遍历,还有范围选择api,都值得一读,这些新的api可能会对后续的vue和react的虚拟dom实现有一些影响

    然后关于事件就当复习了,里面关于ie兼容性的内容为觉得有些多余,总的来说事件的方方面面都介绍到了,dom2和dom3的规范,界面事件,鼠标事件,滚轮,键盘还有合成事件,触摸事件等乱糟的, 不过还是有些细节没介绍到, 比如once配置可以只触发一次, 这个也是我看vue3源码才知道的

    image-20201006080650548
    image-20201006080056529

    然后就是canvas,webgl的入门,表单脚本和错误处理调试,处理xml,这部分第三版其实都有没啥多说的

    Javascript API

    剩下的部分统称为javascript api,基本都是比第三版多出来的内容,非常推荐阅读了解

    比如20章就是一堆html5的新api入门,编码,文件,媒体元素,拖放,通知,页面显隐,web component

    然后网络请求部分除了xmlhttprequest,跨域之外,多了fetch api,beacon api和websocket

    客户端存储除了cookie还有localstorage和indexdb

    新增的es6模块值得关注,讲解了模块系统的发展史,但是没讲到我喜欢的seajs ,差评

    除了es6本身的模块系统知识外,也介绍了浏览器里面的script,加上type=module后,就直接支持了import语法,这个就是vue3配套的vite工具的原理了,我写过一个vite源码的文章,欢迎移步, 通过拦截import的请求实现工程化,在不远的未来可能会取代webpack的地位,还不快去好好学习

    然后就是web worker,翻译成工作者线程,感觉还不如叫影分身,囧,这一章还是蛮有必要的,大部分js开发者都没有多进程的概念,学完这个我们就知道碰见耗时的任务偷桃子,我们完全可以用猴子猴孙去做,不耽误主进程去和七仙女去讲述葫芦娃从石头里蹦出来的故事,比如我们常见的面试题,大文件上传,计算文件md5这个任务用webworker就是比较合理的场景

    image-20201006222338112

    最后的最佳实践 没啥说的了,就是常见的优化策略,这部分只是一个入门,后续需要看别的书看进阶,后面框架的推荐竟然还有mooltools等过时的库,所以不看也罢,不如我以后做一起现代的工具推荐

    总结

    总的来说这本书绝对是前端的重要参考书,借鉴winter的书评,这本书最大的特点就是体系化的前端教程,它是可以用来做脚踩的,javascript这几年很多好书,都是讲单点的

    建议大家用这本书来构建前端开发的知识体系,再去看别的书和框架,构建前端程序员的核心竞争力 推荐给大家

    image-20201006144255843

    下期预告  忍者书和小黄书 or javascript20年

    参考资料

    1. tc39  https://github.com/tc39

    2. hax知乎 https://www.zhihu.com/people/he-shi-jun/answers

    3. 《前端会客厅》hax专场  https://www.bilibili.com/video/BV1xT4y1L7ui

    4. Javascript书籍全测评  https://juejin.im/post/6877712145757896717

    ❤️看完三件事

    如果你觉得这篇内容对你挺有启发,我想邀请你帮我三个小忙:

    1. 点赞,让更多的人也能看到介绍内容(收藏不点赞,都是耍流氓-_-)

    2. 关注公众号“前端劝退师”,不定期分享原创知识。

    3. 也看看其他文章

    劝退师个人微信:huab119

    也可以来我的GitHub博客里拿所有文章的源文件:

    前端劝退指南:https://github.com/roger-hiro/BlogFN一起玩耍呀

    展开全文
  • 3.proxy和reflect,代理和反射,vue3.0的绑定原理。 4.函数新增了箭头函数用法,和判断函数是否为new调用的new.target,递归。 5.介绍了promise和async-await实现异步。 6.DOM和BOM是变化最少的吧,DOM增加了...

    前言

    距离学习完第三版还没过多少时间,第四版就到了,看看有什么新的功能吧。

    第四版和第三版的区别

    先说基本数据类型,基本数据类型新增一个symbol变成了六个。
    引用数据类型新增了Map,WeakMap,Set,WeakSet,数组附加了处理二进制的ArrayBuffer和数据视图DataView。
    其它:
    1.新增迭代器symbol.iterator也是实现generator函数的原理。
    2.介绍了引用class定义的类。
    3.proxy和reflect,代理和反射,vue3.0的绑定原理。
    4.函数新增了箭头函数用法,和判断函数是否为new调用的new.target,递归。
    5.介绍了promise和async-await实现异步。
    6.DOM和BOM是变化最少的吧,DOM增加了MutationObserver(DOM修改的回调),遍历器NodeIterator等。
    7.canvas新增了requestAnimationFrame和webGL的介绍。
    8.表单新增了富文本编辑内容。
    9.javascriptApI章节全是新的东西,太多了就不列出来了。
    10.XML好像也新增了点东西,不过我之前都没关注过,毕竟实际上用得太少。
    11.网络请求新增了fetch方法请求,Beacon API(页面离开自动调用请求),Web Socket
    12.客户端存储新增了indexedDB。
    13.es6的模块化开发介绍。
    14.工作线程webworker。

    总结

      这版新增了许多HTML5,ES6的新特性。对一些流行的用法也有提炼。内容量还是很大的,接下来可以慢慢学习。
    
    展开全文
  • 【课程简介】 课程目标:提高vue实战技术和学习uniapp开发 课程特色:该门课程属于中高级进阶课程,课程开发一个仿阿里飞猪旅游app的微信小程序,该课程使用uni-app框架结合小程序云开发,开发语言使用vue,使用...
  • 转载声明:本文翻译自尤雨溪微博链接原文,主要介绍了Vue 3的设计过程。对原文感兴趣的可查看原文(英文版):The process: Making Vue 3。翻译不当之处敬请参考原文予以纠正。 Vue 3的设计过程 重写Vue.js下个主...

    转载声明:本文翻译自尤雨溪微博链接原文,主要介绍了Vue 3的设计过程。对原文感兴趣的可查看原文(英文版):The process: Making Vue 3。翻译不当之处敬请参考原文予以纠正。

    Vue 3的设计过程

    重写Vue.js下个主版本的经验总结
    作者:尤雨溪
    创作日期:2020年5月

    在过去的一年里,Vue团队一直在开发Vue.js的下一个主版本,我们打算在2020年上半年发布它(原文注释:在写作本文时,这个工作仍在继续)。与新的Vue主版本有关的想法是在2018年底成形的,那时Vue 2的代码库大约诞生了两年半。对于一个通用软件的整个生命周期来说,这个时间不算长,但是在这段时期内,前端技术已经发生了翻天覆地的变化。

    设计(和重写)Vue的下一个主版本主要基于两点考虑:1. 主流浏览器中JavaScript新特性的普遍可用性;2. 随着时间的推移,当前代码库的设计和结构上的缺陷逐渐暴露了出来。

    为什么要重写?

    – 利用新的语言特性

    随着ES2015的标准化,以及JavaScript(正式名称为ECMAScript,缩写为ES) 进行了重大升级,主流浏览器也开始对这些新特性提供不错的支持。其中一些为我们提供了极大提升Vue性能的机会。

    其中最值得注意的是Proxy,它允许框架拦截对对象的操作。Vue的一个核心特色就是能监听用户自定义state的变化,并且响应式地更新DOM。Vue 2通过替换state内对象属性的getters和setters来实现这一点。使用Proxy实现可以帮助我们消除现有的限制,比如无法检测新添加的属性,并且它还可以改善Vue的性能。

    不过,Proxy是一个原生的语言特性,在旧浏览器中无法被完全 polyfill 。为了使用它,我们必须调整框架所支持的浏览器范围,这是一个只有在新的主版本中才可以做出的重大改变。

    – 解决架构问题

    在维护Vue 2的过程中,我们积累了大量由于当前架构的限制而无法解决的问题。例如,模板编译器的编写方式使得生成正确的 source-map 非常有挑战性。另外,虽然Vue 2在技术上支持编写高阶渲染函数,从而面向无DOM(non-DOM)平台使用,但为了实现它,我们必须创建代码库分支,并复制大量的代码。在当前版本中修复这些问题需要进行大规模、高风险的重构,这几乎相当于重写框架。

    与此同时,各个模块内部和一些似乎不属于任何地方的浮动代码存在隐式耦合,这积累了一些技术债务。这使得单独理解代码库的一部分变得很困难,并且我们注意到,很少有贡献者有信心对框架做出重要的改变。重写给了我们重新思考代码组织结构的机会。

    初始原型阶段

    我们在2018年底开始构建Vue 3的原型,初步目标是验证以下问题的解决方案。

    – 切换到TypeScript

    Vue 2最初是由原生ES编写的。在原型阶段过后不久,我们意识到类型系统对这种规模的项目是非常有用的。类型检查大大降低了在重构过程中引入意外bug的几率,也可以帮助贡献者增强做出重大改进的信心。我们选择了FaceBook的Flow type checker ,因为它可以逐步添加到已经存在的纯ES项目中。Flow起到了一定的作用,但是带来的好处不如我们预期的那么多;特别是Flow不断进行的重大修改使得升级非常痛苦。相比于TypeScript与Visual Studio Code的深度集成,Flow对集成开发环境的支持也不够理想。

    我们还注意到,同时使用Vue和TypeScript的用户在不断增长。为了支持他们的使用场景,我们必须独立于源代码编写和维护使用了不同类型系统(译者注:相对于Flow而言)的TypeScript声明。切换到TypeScript使得我们可以自动生成声明文件,以降低维护的负担。

    – 解耦内部包

    我们还在由多个内部包构成的框架内使用了单一设置,尽管这些包拥有各自的私有API、类型定义和测试代码。我们希望使模块之间的依赖关系更加明确,使它更易于被开发者阅读、理解和修改。这是我们努力降低为项目做贡献的难度并提高其长期可维护性的关键。

    – 启用RFC流程

    在2018年末,我们创建了一个有着新的响应式系统和虚拟DOM渲染器的工作原型。我们已经验证了我们想要的内部架构的改进,但是公开API(public-facing API,译者注:指面向开发者的API)部分只有一个大致草稿,是时候把它们变成具体的设计了。

    我们知道我们必须尽快并且谨慎地做这件事。Vue的大量使用意味着重大改变会带来巨大的迁移成本和潜在的框架生态分裂。为了确保用户能对重大变化提供反馈,我们在2019年初启用了RFC(Request For Comments)流程。每个RFC使用一个固定模板,包括方案目的、设计细节、方案权衡和采用的策略。由于该过程是在GitHub仓库中进行的,建议以pull request的形式提交,相关讨论会在评论中展开。

    RFC在构建一个成熟框架的过程中是非常有用的,它迫使我们对一个变化的所有方面进行全面的考虑,并允许我们的社区参与设计过程,提交经过深思熟虑的功能设计。

    更快,更小

    性能对前端框架极其重要。尽管Vue 2在性能方面已经很有竞争力,但是通过新的渲染策略,重写使得性能可以进一步提升。

    – 克服虚拟DOM的瓶颈

    Vue有一个相当独特的渲染策略:它提供一个接近HTML(HTML-like)的模板语法,并最终把它编译为一个可以返回虚拟DOM树的渲染函数。该框架通过递归遍历两个虚拟DOM树并比较每个节点上的每个属性来确定实际DOM的哪些部分需要更新。感谢现代JavaScript引擎所执行的高级优化,这个有些粗糙的算法通常执行得很快,但是更新过程仍然涉及很多不必要的CPU操作。当你观察一个包含大量静态内容而只有少量动态绑定的模板时,效率低下问题就会变得很明显 – 整个虚拟DOM树仍然需要递归遍历来算出哪里发生了变化。

    幸运的是,模板编译步骤给了我们分析静态模板和动态部分的机会。Vue 2通过跳过静态子树在一定程度上做到了这一点,但是由于编译器架构过于简单,更进一步的优化很难实现。在Vue 3中,我们用更合适的AST转换管道(AST transform pipeline)重写了编译器,它使得我们能以转换插件的形式进行编译时优化。

    随着新架构的实施,我们希望找到一种开销尽可能低的渲染策略。一个选择是舍弃虚拟DOM,直接生成必要的DOM操作,但是那会丧失直接编写虚拟DOM渲染函数的能力,而我们发现这个能力对高级用户和库的开发者非常有用。另外,这又将是一个重大更新。

    接下来最好的方法是消除不必要的虚拟DOM树遍历和属性比较,而这在更新过程中的性能损耗是最大的。为了实现这一点,编译器和运行时必须同时工作:编译器分析模板和生成带有优化提示的代码,同时,运行时拾取这些提示,并采取尽可能快的更新策略。这里主要有三个优化:

    第一,从树的层面看,我们注意到,在没有使用可以动态改变树结构的指令(例如v-if和v-for)的情况下,节点结构是完全静态的。如果我们将模板划分为由这些结构指令分隔的嵌套“块”,那么每个“块”中的节点结构又会变成完全静态的。当我们在一个“块”内部更新节点时,我们不再需要递归遍历整棵树 – 因为“块”内的动态绑定可以在一个扁平数组(译者注:即一维数组)中被追踪到。通过将需要执行的树遍历运算减少一个数量级,这种优化规避了虚拟DOM的大部分开销。

    第二,编译器会主动监测模板中的静态节点、静态子树甚至数据对象,并且把它们提取到结果代码中的渲染函数之外。这避免了在每个渲染函数中重新创建这些对象,极大的改善了内存使用,降低了垃圾回收频率。

    第三,从标签元素的角度来说,编译器还会根据需要执行的更新类型为每个元素动态绑定生成一个优化标志。例如,一个有动态class和一些静态属性的元素会被标记为只需要进行类名检查。运行时会拾取这些提示并采取专门的快速更新策略。

    结合这些技术,Vue 3占用的 CPU时间 还不到Vue 2的十分之一,极大地改善了我们的渲染更新基准测试性能。

    – 最小化包体积

    框架的体积同样影响它的性能。这是web应用程序遇到的一个独特问题,因为资源需要在使用时下载,并且在浏览器解析完必要的JavaScript代码之前,应用无法产生交互。对于单页面应用程序来说尤其如此。尽管Vue一直以来是比较轻量的 – Vue 2xx版本的运行时使用gzip压缩后只有23KB,我们还是注意到两个问题:

    第一,不是所有人都会用到框架的所有功能。例如,一个不需要使用transition组件的应用仍然需要付出下载和解析与transition有关代码的代价。

    第二,随着我们不断增加新特性,框架也在不断增长。当我们在权衡新特性的利弊时,包的体积必须考虑在内。最终,我们倾向于只添加大多数用户会用到的功能。

    理想情况下,用户应该能够在构建时删除那些未使用的框架特性相关的代码 – 也叫tree-shaking,只留下他们用到的东西。这也使得我们可以在不增加其他用户成本的情况下,为一部分用户提供有用的特性。

    在Vue 3中,我们通过把大部分全局API和内置帮助程序(internal helpers)转移到ES模块中来实现这一点。这允许现代打包器静态地分析模块依赖关系,并删除与未使用的特性相关的代码。模板编译器也可以生成tree-shaking友好的代码,它只会在模板中实际使用了该特性时才导入与该特性相关的帮助程序。

    框架中的一些部分永远不能被tree-shaken,因为它们对任何一个应用都是必要的。我们称这些不可缺少的部分的体积为基准体积。尽管增加了大量的新特性,但Vue 3的基准体积用gzip压缩后只有大约10KB - 比Vue 2的一半还小。

    解决对规模化的需求

    我们还想提升Vue应对大型应用的能力。我们最初的Vue设计专注于较低的准入门槛和平缓的学习曲线。但是随着Vue的使用越来越广泛,我们意识到支持包含数百个模块以及由数十名开发者维护的大型项目是必要的。对这类项目,像TypeScript这样的类型系统,以及干净地组织可重用代码的能力是至关重要的,然而Vue 2在这方面的支持不够理想。

    在Vue 3设计的早期阶段,我们尝试通过支持使用类编写组件来改进TypeScript集成。挑战在于,class所依赖的许多语言特性,例如类字段和修饰器,仍处于建议阶段。而在成为正式的JavaScript标准之前,这些特性仍然可能变化。这些问题所涉及的复杂性和不确定性让我们怀疑添加类API是否真的合理,因为它除了提供稍好的TypeScript集成之外,没有带来任何好处。

    我们决定研究解决规模化问题的其他方法。受React Hooks的启发,我们考虑通过暴露更底层的响应式和组件生命周期API,来启用一种更自由的方式编写组件逻辑,我们称之为Composition API。与通过指定一长串option来定义组件不同,Composition API允许用户自由地像编写函数一样表达、组合和重用有状态组件逻辑,并且这些都提供了很好的TypeScript支持。

    我们对这个想法感到兴奋。尽管Composition API设计出来是为了解决某些特定的问题,但在编写组件时只使用这类API来实现(译者注:指完全使用Composition API来编写组件)在技术上也是可行的。在提案的第一稿中,我们有些超前地提出可能会在后续的发布中使用Composition API替换已存在的Options API。这遭到社区成员的强烈反对,同时这也给了我们一个宝贵的教训,就是要清楚地表达长期计划和意图,以及理解用户的需要。在听取了社区的反馈后,我们彻底修改了这个提案,明确表示Composition API将会是Options API的修改和补充。修订后的提案得到的反响要积极得多,并收到了许多建设性的建议。

    寻求平衡

    在Vue的用户群中,有超过100万的开发人员是对HTML/CSS只有基本知识的初学者,或由jQuery转型而来的专业人士,或从其他框架迁移而来,或寻求前端解决方案的后端工程师,以及处理大规模软件的软件架构师。开发者的多样性造成了使用场景的多样性:一些开发人员可能希望在遗留应用程序上增加交互性;而另一些人则可能从事开发周期很短但维护时间有限的一次性项目;架构师可能必须处理大型、多年的项目,以及面对在项目生命周期中变化不定的开发团队。

    当我们在各种权衡之间追求平衡的同时,Vue的设计也不断被这些需求不断塑造。Vue的口号:“渐进式框架”,含义就是封装由此过程产生的分层API设计。初学者可以通过一个CDN脚本、基于HTML的模板语法和直观的Options API获得一个平滑的学习曲线,而高级用户可以用全功能CLI、渲染函数和Composition API设计大规模的应用。

    要实现我们的愿景,还有很多工作要做 – 最重要的是要更新支持库、文档和工具,以确保顺利迁移。在接下来的几个月里,我们将会努力工作,我们已经迫不及待地想看看Vue 3社区将会创造什么了。

    展开全文
  • vue高级使用

    2019-12-24 09:41:30
    vue高级使用自定义组件1. 属性 prop2. 插槽 slot3. 自定义事件 event4. 组件的通讯对象和数组的动态更新自定义UI库( 模仿 element-ui)1、前置知识2、搭建目录3、编写组件4、暴露组件5、组件测试6、库模式打包7、...
  • 对于前端经典书籍《JavaScript高级程序设计》是慕名已久,几天前收到某社区消息推送,即入手了最新的第四版中文版纸质和电子书,希望能好好系统的学习一下这门技术,并将学习笔记记录于此。
  • uniapp开发仿阿里飞猪旅游微信小程序vue高级课程 五年互联网实战开...
  • 任务二 Vue-cli&ElementUI 1.Vue-cli 1.1 什么是Vue-cli Vue cli是基于Vue的应用开发提供的一个标准的脚手架工具.为应用搭建基础的框架结构,提供插件、开发服务、Preset、构建打包功能 Vue cli 背后集成了现代化...
  • 首先来思考一个问题:是否有一种方法可以从子组件填充父组件的插槽?最近一位同事问我这个问题,答案很简单:可以的。但我的解决方案可能和你想的完全不一样,这是涉及一个棘手的Vue架构问题,但也...
  • mpvue是一款使用Vue.js开发微信小程序的前端框架。使用此框架,开发者将得到完整的 Vue.js 开发体验,同时为H5和小程序提供了代码复用的能力。如果想将 H5 项目改造为小程序,或开发小程序后希望将其转换为H5,mpvue...
  • 本人是2021届毕业生目前在准备毕业设计中,但由于是一个光说不做的人,所以即将毕业了还毫无建树。这是我的第一篇博客,其实更多是对自己慢慢转变的一种记录。 之后,会根据毕业设计中遇到的各种问题进行记录,同时...
  • Vue项目中,所有核心的代码都是在src目录下完成,为了更好的了解Vue的底层实现,我们首先来了解一下src目录下代码的组织情况,从全局入手,在脑海里留下简单的印象,方便后续的学习。(注意:当前使用Vue的版本为...
  • 在之前笔者发布的一篇文章中(Vue全局手动挂载组件封装(Message, Loading, Spin类组件))有介绍到在 vue 中实现全局手动挂载登录组件的实现,这样做的好处是可以在任何页面的业务逻辑中轻松调用一行代码便拉起了...
  • 【毕业设计】基于Vue.js画作交流平台的设计与实现

    千次阅读 多人点赞 2020-06-08 17:33:55
    文章目录摘要Abstract引言系统开发理论基础开发语言简介HTML5JavaScriptLessPHPRPythonGo框架简介Vue.jsThinkPHPFlaskPlumberCordova系统分析需求分析服务端系统架构设计服务端功能结构客户端功能结构功能模块服务端...
  • [译]Vue3的设计过程

    千次阅读 2020-05-28 15:08:15
    在过去的一年中,Vue团队一直在研究Vue.js的下一个主要版本,我们希望在2020年上半年发布该版本。(在撰写本文时,这项工作仍在进行中)。 Vue的主要版本于2018年底形成,当时Vue 2的代码库已有两年半的历史了。在...
  • 能够构建出色的单页应用程序(SPA)是 Vue.js 最具有吸引力的功能之一。SPA 非常好,因为它们不需要在每次更改路由时都去加载页面。这就意味着一旦加载了全部内容,就可以真正快速地对视图进行切换,并提供出色的用户...
  • 因此,对单页应用来说模块化的开发和设计显得相当重要。 单页 Web 应用的优点: 提供了更加吸引人的用户体验:具有桌面应用的即时性、网站的可移植性和可访问性。 单页应用的内容的改变不需要重新加载整个页面,web...
  • Lessons from rewriting the next major version of Vue.js 在过去的一年中,Vue团队一直在研究Vue.js的下一个主要版本,我们希望在2020年上半年发布该版本。(在撰写本文时,这项工作仍在进行中)。 Vue的主要版本...
  • 在《JavaScript高级程序设计》一书中有这样的一个例子: function throttle (method, context) { clearTimeout((method.tId)) method.tId = setTimeout(function () { method.call(context) }, 100) } ...
  • Vue3官网-高级指南(一)Vue 与 Web Components 文章目录Vue3官网-高级指南(一)Vue 与 Web Components1. Vue 与 Web Components在 Vue 中使用自定义元素跳过组件的解析传递 DOM Property使用 Vue 构建自定义元素...
  • VUE面试题

    2021-02-17 21:39:29
    比较一下vue和react vue组件之间的通信种类,通信实现方式 说说对vuex的理解 说说Vue的MVVM实现原理 答案 1比较一下vue和react 相同点: 都是组件化开发,都有虚拟dom 都支持props进行父子组件之间数据通信 都支持...
  • Vue笔记--高级入门

    2020-12-17 22:58:25
    Vue-cli 什么是vue-cli vue-cli官方提供的一个脚手架,用于快速生成一个vue的项目模板; 预先定义好的目录结构及基础代码,就好比咱们在创建Maven项目时可以选择创建一个骨架项目,这个骨架项目就是脚手架,我们的...
  • Javascript高级程序设计
  • 4、jQuery、javascript、Vue的区别5、Vue框架构造三、Vue的使用1、Vue环境搭建2、插值表达式3、指令(Directives)1、什么是指令2、指令API1、v-cloak 解决插值闪动2、v-text 填充纯文本3、v-html :填充HTML片段4、...
  • 公园应用 2021年高级设计项目的停车应用程序
  • 适用于Gridsome / Vue.js的移动友好型,易破解,极简但功能齐全的博客样式单页应用程序网站模板,该模板使用Strapi CMS编写内容并将GraphQL用作数据层。 您可以使用Strapi支持的任何数据库(默认SQLite) 没有云...
  • 我在整理javascript高级程序设计的笔记的时候看到面向对象设计那章,讲到对象属性分为数据属性和访问器属性,我们平时用的js对象90%以上都只是用到数据属性;我们向来讲解下数据属性和访问器属性到底是什么? 数据属性:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,202
精华内容 4,080
关键字:

vue高级程序设计

vue 订阅