吐槽现在的js模版引擎

快速开发师 发布于 2015/03/15 10:24
阅读 589
收藏 1

真的是想吐,这不能说明什么,应该说他们足够聪明也足够愚蠢。

首先说js模版引擎的写法,极为不尊重源代码,居然把源代码里的换行符等字符给替换成空。前端就该任性吗?

  //把所有换行去掉 \r回车符 \t制表符 \n换行符
.replace(new RegExp("[\\r\\t\\n]","g"), "")

这段代码摘自百度模版引擎,我后来看了下,其很有可能是正则表达式中.*匹配符和换行符有素来的冲突的原因,作者简单随意地替换掉这些字符来达到让正则表达式顺利进行的目的。如果是后端模版引擎,无论是FreeMarker还是Velocity还是Jsp绝不会这样做,作者的任意性促发的后盾在于他认为前端只管显示html就可以了,管格式鸟事,因为模版产生的代码,只有浏览器去呈现去解析,又不是我们开发者来阅读,他这样认为,就那样做了。

就算是腾讯模版引擎其解析模版代码的时候也是没有换行符,像
<H1>
   <%=content%>
</H1>

(这段代码是html代码的一部分,是模版代码包含了换行符,因为他要被开发人员阅读,换行符就很重要)
被解析成
$out.push('<H1>')
$out.push(content)
$out.push('</H1>')

而不是:
$out.push('<H1>\n')
$out.push(content)
$out.push('</H1>\n')

 

最后产生的代码我们看不到,而是在内存中,已经没有换行符了,是这样的

<H1>...</H1>

而不是这样

<H1>

...

</H1>


那些前端代码被解析后输出的源代码,是浏览器去读,人并不去读
是内存状态,人看不到,而后端代模版引擎解析输出的源代码是人来阅读并要维护的,所以前端模版引擎工程师们,任性地去掉了那些换行符,而且是在语法转义的时候,而不是从服务器加载到本地的时候,连提高效率的意义也没有,为什么非要去掉呢,如果不去掉,他还可以作为后端模版引擎,而不仅仅作为前端

 前端就该比后端模版引擎随意吗?这反应的是一个软件开发者素养的问题,中国研究者有时候和外国研究者比较起来显得很畸形,是一种投机的畸形的聪明,一种自作聪明的‘果断’。

所以我认为后端模版引擎其保留换行符,其模版代码是什么就是什么的概念,支持得很好,是尊重源代码的;

而前端代码应该从行为上也支持其作为后端模版引擎的概念。比如说我就有可能拿js模版引擎来生成java代码,C#代码,而那个时候发现这种通用的js代码方式的模版引擎却把换行符给去掉了,生成的java代码是这样的

import xxx; class ssss{ ....;....;}

而不是这样的

import xxx;

class ssss{

....;

....;

}

所有的方法都在一行,这叫我怎么维护啊?前端代码模版引擎让其做到也支持后端模版引擎的功能,难道不好吗?而为什么非要做什么去换行符之举呢?前端应该是对原始后端继承的。

 

加载中
0
orangleliu
orangleliu
说的啥子?没头没尾
0
傅小黑
傅小黑
编译后的结果,不可读是可以的,就像压缩过一样
快速开发师
快速开发师
我说的是代码的内容,不是你说的那个模版引擎本身的压缩问题,我说的是引擎代码对模版代码的操作,引擎是用里来操作模版代码,然后得到新的源代码的
0
豆浆Melon
豆浆Melon
不能以偏盖全
0
欣儿
欣儿
编译后就是给浏览器的吧。
0
cgcgbcbc
cgcgbcbc

以偏概全,何不看看github前端模版前十的源码再说话?

百度的引擎不是从开源走出来的,而是自有业务之后再开源的,所以模版引擎兼顾压缩也不是不可能。

不少引擎的trim都是可配置的,比如某引擎可以支持trim,不trim,trim前,trim后

快速开发师
快速开发师
回复 @cgcgbcbc : ok
cgcgbcbc
cgcgbcbc
回复 @快速开发师 : 如果你的engine即要能运行在前端,也可以在后端实时渲染,也可以用于静态页面生成。
快速开发师
快速开发师
不是兼顾压缩,没什么好压缩的,因为模版源代码已经作为页面的一部分被浏览器从服务器加载到客户端了,而后才是模版引擎对模版源代码换行符的替换,何来压缩传输之举?
0
傅小黑
傅小黑
而后端代模版引擎解析输出的源代码是人来阅读并要维护的
我不理解为什么这个要维护,维护模板就行啦
快速开发师
快速开发师
模版是没有具体变量的概念的,生成一个增删改查应用的模版,变量是根据数据库字段产生的,模版代码只是一个循环结构,而且模版不是程序,模版生成的程序本身也是要再加工的,模版不可能那么厉害,能处理所有事情,跟你解释真的累
返回顶部
顶部