[译]为什么Vue不支持templateURL
Vue的新用户最常问的一个问题,特别是以前使用Angular的用户,是“我可以使用” templateURL吗?这个问题我回答过很多次,现在写一个统一回复。
在Angular中,templateURL或ng-include允许用户在运行时动态加载远程模板文件。作为Angular的内置功能,这似乎非常方便,但让我们重新考虑一下这种方式解决的问题。
是否有必要将html模板和js分离?
首先,它允许我们在一个单独的HTML文件中编写我们的模板。这在编辑器中给出了正确的语法高亮,这可能是为什么许多人喜欢这样做。但是分割您的JavaScript代码和模板真的是最好的方法吗?对于一个Vue.js组件,它的模板和它的JavaScript是紧密耦合的 - 实际上,如果事情只是在同一个文件,其实更简单。两个文件之间来回跳转的上下文切换实际上使得开发体验变得更糟。在概念上,组件是Vue.js应用程序的基本构建块,而不是模板。每个Vue.js模板都耦合到一个伴随的JavaScript上下文中 - 没有必要将它们分开。
本段大意是:将html模板和js分离,html有语法高亮、代码提示,开发体验好。但是因为html模板和js是紧密耦合的,把它们分开反倒不好。
templateURL会造成多次网络请求,导致加载缓慢
第二,因为templateURL在运行时通过Ajax加载模板,所以您不需要构建步骤来分割文件。这在开发过程中很方便,但是当您要将其部署到生产中时,这将会非常费力。在普遍支持HTTP / 2之前,HTTP请求的数量仍然是应用程序初始加载性能中最重要的因素。现在想象你使用templateURL对于您的应用程序中的每个组件 - 浏览器需要执行数十个HTTP请求,甚至可以显示任何内容!如果您不知道,大多数浏览器都会限制它可以对单个服务器执行的并行请求数。当您超过这个限制时,您的应用程序的初始渲染将受到浏览器等待的每次额外往返的影响。当然,有一些构建工具可以帮助您预先注册所有这些模板,$templateCache但是这给我们展示了一个构建步骤,实际上对于任何严重的前端开发来说是不可避免的。
正确姿势
那么,没有templateURL,我们如何处理开发体验问题?将模板作为内联JavaScript字符串编写是可怕的,伪造的模板<script type="x/template">也感觉像一个黑客。那么也许现在是游戏的一部分,并使用像Webpack或Browserify这样的正确的模块捆绑器。如果你以前从来没有处理过这件事,可能看起来很难,但是相信我是值得的。如果要构建任何大型和可维护的组件,则必须正确的模块化。更重要的是,您可以将Vue组件写入单个文件,具有适当的语法突出显示,以及自定义预处理器,热重新加载,ES2015默认情况下的自动翻译和范围CSS,从而使开发体验达到10倍以上的额外优势。
最后,Vue允许您懒惰加载您的组件,并且使用Webpack它很简单。虽然这只是一个问题,当你的初始捆绑是如此之大,以便你更好地分裂它分开。
综上,考虑使用组件,而不是模板。
[译]为什么Vue不支持templateURL的更多相关文章
- Vue为什么没有templateUrl
Why Vue.js doesn't support templateURL Vue.js为什么不支持templateUrl模式 原因 templateUrl使用ajax的方式在运行时加载templa ...
- 对于新版本的webstorm对vue的支持
webstorm 对于官方vue的支持,直到2017.1,这个版本,之后的版本不能直接安装vue插件,这时候就需要自己手动新建vue模板了
- vue不支持IE8的原因
当你把一个普通的 JavaScript 对象传给 Vue 实例的 data 选项,Vue 将遍历此对象所有的属性, 并使用 Object.defineProperty 把这些属性全部转为 getter ...
- vue 不支持 数组Array,只支持get set push,但是正是做tab的时候,用到splice,就都不好用了,最后用v-if,从新渲染 完美解决
vue 不支持 数组Array,只支持get set push,但是正是做tab的时候,用到splice,就都不好用了,最后用v-if,从新渲染 完美解决
- 填个小坑,Vue不支持IE8及以下,跨域ajax不支持IE9
这特么就尴尬了,说好的Vue支持IE8及以下的呢,引入jquery,测试IE个浏览器,IE9仍然显示不正常, 然而命令行测试Vue仍然存在, 数据回不来!数据回不来!数据回不来! 好吧 肉包子打狗$ ...
- atom中vue高亮支持emmet语法
vue高亮插件: language-vue 支持emmet语法: 文件>用户键盘映射>keymap.cson添加: 'atom-text-editor[data-grammar~=&quo ...
- [译]基于Vue.js的10个最佳UI框架,用于构建移动应用程序
原文查看10 Best Vue.js based UI Frameworks for Building Mobile Apps 如果您期待使用Vue.js构建移动应用程序,那么您可以选择许多可用的UI ...
- [译] 制作 Vue 3 的过程
原文链接: https://increment.com/frontend/making-vue-3 在过去的一年里,Vue 团队一直在研究 Vue.js 的下一个主要版本,我们希望在 2020 年上半 ...
- webstorm添加vue插件支持
现在已经有vue.js的插件啦,setting --> plugins 就可以咯 ------------------------------------------------ Mac端Web ...
随机推荐
- [SQLite] SQLite学习手册(数据库和事务)
转载地址:http://www.cnblogs.com/stephen-liu74/archive/2012/02/18/2322575.html 一.Attach数据库: ATTACH DATABA ...
- 简明python教程 --C++程序员的视角(七):异常
当你的程序中出现某些 异常的 状况的时候,异常就发生了.例如,当你想要读某个文件的时候,而那个文件不存在.或者在程序运行的时候,你不小心把它删除了.上述这些情况可以使用异常来处理. 假如你的程序中有一 ...
- MySQL命令行查询结果中文显示乱码
数据库编码格式为utf8,表和字段也都是utf8,存进去的格式是utf-8 但是用命令行工具查询命令select * from 表名; 查询出来的中文是乱码 原因:MySQL客户端根本就不能以utf8 ...
- OTL翻译(10) -- OTL的流缓冲池
OTL的流缓冲池 一般来讲,流一般作为一个局部的变量被使用,当使用完毕后就立刻关闭,如果需要再次使用就需要再次的声明变量,如此循环.OTL流的缓冲池(内存池)是一个解决以往的流性能低下的一个机制.当流 ...
- HTTP请求方法 GET POST【总结】
HTTP 8种请求方法概述 HTTP/1.1协议中共定义了八种方法(有时也叫"动作"),分别为:get,post,put, options,head,delete,trace,co ...
- 你应该了解的CSS语义化命名方式及常用命名规则
CSS语义化命名 从上图我们可以大概看出这里有两种CSS的命名方式:1.结构化命名法:2.语义化命名法. 结构化命名法:根据页面中板块的位置而命名,如上图中的content-left,这时如果我们想把 ...
- python 两个队列进行对比
python 两个队列进行对比 list01 = [1,2,3,4] list02 = [1,3,5] for i01 in list01: is_in_02 = False for i02 in l ...
- Matlab实现:图像边缘提取
1. 边缘提取算法 方法一:一阶微分算子 Sobel算子 Sobel算子检测方法对灰度渐变和噪声较多的图像处理效果较好,Sobel算子对边缘定位不是很准确,图像的边缘不止一个像素. Roberts算子 ...
- Android actionBar与Fragment结合使用Demo2
上一篇文章介绍了ActionBar的使用,这里介绍ActionBar的还有一种用法.达到的效果和曾经的GroupActivity或TabHost是一样的,可作为导航来使用. 实现效果图: 源码: 布局 ...
- Android模拟神器——Genymotion
文章地址:http://ryantang.me/blog/2013/08/16/genymotion/