本章主要搞懂在通过vue init webpack projectname 命令创建 vue 项目过程中有个选择。即关于如何选择:runtime+compiler和runtime+only。

现在我通过命令分别创建了这两个不同的项目,那么他们的主要区别点就是在main.js文件里面

通过compiler创建的:

通过compiler创建的vue实例下是有一个App组件和一个template,那么这个时候之前说过templat会替换掉index.html中div app挂载的标签元素。

那么它从创建到运行的这样一个过程实际上是经历了几个最要步骤,什么步骤呢?  

实际上它这一整个创建的vue实例中包括组件和template对象保存到vue底层的一个option里面,保存后就会解析成一个抽象语法树(abstract  syntax tree)然后通过编译render进行渲染我们这些template,此时它应该渲染到的是一个虚拟DOM(实际上是虚拟DOM树也是虚拟DOM节点),最后通过虚拟DOM树渲染成我们一个真实的DOM,也就是浏览器中最终形成的元素标签。

整个过程实际上是这样的:

vm.option.template-->(抽象语法树)ast-->render:function()-->虚拟DOM(virtual dom)-->真实DOM

通过only创建的:

对于这两个的区别,这里我可能口水话阐述比较多,见谅!

这里主要就是only下的render的区别。

我们都知道render是渲染的意思,这里的箭头函数相当于:

render:function(h)
{
return h(App)
}

那么这里的render实际上就等于通过compiler创建的时候vue运行过程中的第三步。也就是通过only创建的时候整个vue运行过程不需要走第一步template的保存以及第二步抽象语法树(ast)。那么显而易见,通过only创建的速度运行效率是比compiler要好的,而且创建出来的内存我没记错的话是少6kb的(实际上少的6kb就是没了前两步),所以打包起来也是比compiler创建的时候要小的。所以我们在区分这两个的时候一般是选择第二种only方式进行创建的。

还有一个就是这个render函数。我把h改成了createElement意思就是创建一个元素,实际上创建的元素就是我们最基础的html标签,字不过通过回调将整个app组件对象传了过去,实际上渲染的还是App组件里面的html标签,它在这里面已经给我们完成了这件事情,所以是不需要再去通过template以及抽象语法树去渲染到UI界面!(这里只需要知道它是这么创建的就行了)

由于这个比较重要,所以我单独抽出来作为一篇文章来记录。。。

.net工程师学习vue的心路历程(二)的更多相关文章

  1. .net工程师学习vue的心路历程(一)

    实习一年后,想做一个属于自己的博客网站,准备用core api去搭建服务端接口,前端准备采用vue这样的一个框架.本身时一个服务端程序员,所以来学习记录一些vue的知识点,有什么不足的希望大家指正,谢 ...

  2. .net工程师学习vue的心路历程(三)

    vue cli3没记错的话是在2019年8月份yyx个人正式声明发布. 接下来就开始我们的vue cli3的方式创建vue项目.明白一点,vue cli3遵循的一个原则就是 "0配置&quo ...

  3. 手牵手,从零学习Vue源码 系列二(变化侦测篇)

    系列文章: 手牵手,从零学习Vue源码 系列一(前言-目录篇) 手牵手,从零学习Vue源码 系列二(变化侦测篇) 陆续更新中... 预计八月中旬更新完毕. 1 概述 Vue最大的特点之一就是数据驱动视 ...

  4. 学习JS的心路历程-函式(一)

    前几天有间单提到该如何声明函式及在Hositing中会发生什么事,但是函式的奥妙不仅于此. 身为一个使用JS的工程师,我们一定要熟悉函式到比恋人还熟! 这几天将会把函式逐一扒开跟各位一起探讨其中的奥妙 ...

  5. 学习JS的心路历程-参数的传递(下)

    今天我们要来探讨JS到底是透过何种参数传递方式呢? 废话不多说,上示例!! 我们先声明原始型别和物件型别来看看两者是否会有不一样的差异: var myStr = 'Hola': var myObj = ...

  6. 学习JS的心路历程-参数传递方式(上)

    很多人认为JS的传递方式是值是Call by value, 物件及数组是Call by Reference.甚至还有人宣称其实JS是Call by sharing,那到底是哪一个呢? 这两天我们一一来 ...

  7. 学习JS的心路历程-范围Scope和提升(Hoisting)

    在上一篇提到了JS有三种声明变量的方式,分别是var.const及let,var和const let最大区别就是范围(scope)的限制.所以在这一篇我们会详谈何谓范围链及他们的复写优先级. 范围Sc ...

  8. 学习JS的心路历程-声明

    变量 在程序中将一个值指定(assign)给一个符号式的容器(symbolic container),叫做一个变量(variable). 声明在JS中目前提供了三种声明方式: var 声明一个变量,可 ...

  9. 学习JS的心路历程-类型

    前言 之前学JS时候都是靠着谷狗一路跌跌撞撞的学过来,从来没有去翻过MDN的文件,导致留了许多技术债给自己. 最近有幸遇到一位前辈并开始从头学JS,前辈表示学程序不看文件是想作死自己?于是我的第一份功 ...

随机推荐

  1. mysql安装教程,mysql安装配置教程

    MySQL的安装教程 一.MYSQL的安装 首先登入官网下载mysql的安装包,官网地址:https://dev.mysql.com/downloads/mysql/ 一般下载这个就好,现在的最新版本 ...

  2. C++默认参数静态绑定

    先来看这样一段代码 class Base { public: virtual void print(int a = 1) const { std::cout << "Base & ...

  3. MSSQL还原数据库,更改用户登陆权限

    有的时候还原完数据库后,使用账号登陆不进去,报告没有这个用户的时候,可以使用以下sql解决: sp_change_users_login 'update_one','username','userna ...

  4. 多项式(polynomial)

    多项式(polynomial) 题目大意: 给出一个 n 次多项式 \(f(x)=\sum_{i=0}^na_ix^i\) 对于\(k ≤ x ≤ k + l − 1\) 的\(l\) 个\(x\), ...

  5. MIPS流水线技术

    华中科技大学 - 计算机硬件系统设计 单周期指令运行动态 Instruction Fetch Instruction Decode Execution MEM Write Back 单周期时空图 设耗 ...

  6. 脚本注入2(post)

    终于写到非get类型的注入了. 不过,我懒得在这里搞代码审计了:留到存储型XSS原型的时候再来分析源码吧. 这次以Less-15为例. 框里随便输点东西,submit,抓包,发现包出现了一些改变: 同 ...

  7. 在 Windows 10 上安装 Coq 库 Mathematical Components

    初学 Coq 时看的是 Mathematical Components 这本书,它自带了一个 Coq 的库,这是它的安装教程 这个库的安装要用到 OCaml Package Manager (OPAM ...

  8. Scrum Meeting 0425

    零.说明 日期:2021-4-25 任务:简要汇报两日内已完成任务,计划后两日完成任务 一.进度情况 组员 负责 两日内已完成的任务 后两日计划完成的任务 qsy PM&前端 完成登录.注册A ...

  9. 方阵里面的dp

    打了一场luogu的信心赛,惊讶地发现我不会T2,感觉像这样在矩阵里面的dp看起来很套路的样子,但是仔细想想还是有很多需要注意的细节. 又想到之前貌似也考过一些类似的题目 然而我并没有改 ,于是打算补 ...

  10. BF算法和KMP算法

    这两天复习数据结构(严蔚敏版),记录第四章串中的两个重要算法,BF算法和KMP算法,博主主要学习Java,所以分析采用Java语言,后面会补上C语言的实现过程. 1.Brute-Force算法(暴力法 ...