为什么网络应用程序经常使用单独的模板语言来生成网页?

Why do web applications often use a separate template language to generate web pages?

为什么 Web 应用程序使用单独的模板语言(例如 Jade)而不是使用应用程序的语言(例如 Java、Python、Java脚本)?我只想知道是否有实际原因,或者只是为了将逻辑 (javascript) 与显示代码 (jade/html) 分开?

不同的工作需要不同的工具。

您的应用程序语言并不都适合模板化。使用其他东西更容易,特别是如果你使用将变量数据插入 HTML 的语言风格,比如 Swig:

<h1>{{ headingText }}</h1>

要在 JavaScript 中执行此操作,您首先必须创建节点,然后设置其值。对整个文档执行此操作会变得乏味。

var headingEl = document.createElement('h1');
headingEl.textContent = 'woot';
document.body.appendChild(heading);

另一个原因是制作模板的人通常不同于构建应用程序的人。如果非开发人员已经知道 HTML,那么使用将变量嵌入 HTML 的模板语言很容易上手。可以让网页设计师或技术人员级别的人去制作模板,根据需要插入可变数据。这对您是否重要取决于您的需求。

有一些模板语言,例如 Jade,需要非常结构化的 DOM 构建。虽然这保证了最后一个可解析的文档,但对于来自构建静态页面的人来说可能有点陌生。如果你用的是Jade,这样构建DOM还是比创建节点方便。

您可能会争辩说,以编程方式从数据生成页面很容易...比如从 JSON。你说得对,事实上 there is code that does just that。用起来肯定没问题。

旁注,Rasmus Lerdorf has famously argued that no templating engine is needed for PHP,因为 PHP 实际上是一个模板引擎。现在,这有点断章取义,因为 PHP 比以前成熟得多,Rasmus 反对模板引擎的人,他们基本上是在模板中构建 Web 框架。但是,直接使用您的应用程序语言的想法已经存在。