6
回答
吐槽现在的js模版引擎
科大讯飞通用文字识别100000次/天免费使用。立即申请   

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

首先说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{

....;

....;

}

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

 

<无标签>
举报
顶部