Nodejs模板引擎的选择问题 jade or ejs

Nodejs模板引擎的选择问题 jade or ejs

之前使用的jade,在运行过程中发现jade确实编译速度慢,大概比ejs的编译慢了3倍

都知道nodejs应该关键处理消息高效,编译属于计算,所以,非要使用后台模板技术,使用ejs替代jade比较好

也或者有更好的其他的模板

但是我觉得如果可以的话,最好不要使用模板,只用res.json方式来输出,然后用前端来处理,后台只做接口

nodejs确实比较适合做接口性质的

8 回复

Nodejs模板引擎的选择问题 jade or ejs

在选择Node.js的模板引擎时,Jade(现在更名为Pug)和EJS是两个非常流行的选择。然而,根据不同的需求和性能考量,它们各有优缺点。

Jade vs EJS

Jade (Pug)

  • 优点:
    • 语法简洁,易于阅读。
    • 支持继承、混合等高级功能。
  • 缺点:
    • 编译速度较慢。
    • 学习曲线相对陡峭,尤其是在开始时。

EJS

  • 优点:
    • 语法简单,与HTML非常相似,易于上手。
    • 编译速度快。
  • 缺点:
    • 功能不如Pug丰富。

性能对比

根据你的描述,你提到Jade的编译速度比EJS慢大约3倍。这在高并发环境下可能会成为一个瓶颈。因此,如果你更关注性能,EJS可能是一个更好的选择。

示例代码

假设你有一个简单的Node.js应用,使用Express框架,并需要渲染一个简单的HTML页面。

使用EJS

首先,安装EJS模板引擎:

npm install ejs

然后,在Express应用中设置视图引擎:

const express = require('express');
const app = express();

app.set('view engine', 'ejs');

app.get('/', (req, res) => {
  const data = { title: 'Hello World', message: 'Welcome to my website' };
  res.render('index', data);
});

app.listen(3000, () => console.log('Server running on port 3000'));

创建一个名为views/index.ejs的文件:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title><%= title %></title>
</head>
<body>
  <h1><%= message %></h1>
</body>
</html>

使用Pug

首先,安装Pug模板引擎:

npm install pug

然后,在Express应用中设置视图引擎:

const express = require('express');
const app = express();

app.set('view engine', 'pug');

app.get('/', (req, res) => {
  const data = { title: 'Hello World', message: 'Welcome to my website' };
  res.render('index', data);
});

app.listen(3000, () => console.log('Server running on port 3000'));

创建一个名为views/index.pug的文件:

doctype html
html(lang="en")
  head
    meta(charset="UTF-8")
    title #{title}
  body
    h1 #{message}

结论

虽然Pug提供了更多的功能,但EJS的简单性和更快的编译速度使其在某些情况下更为合适。如果你的应用对性能有较高要求,建议选择EJS。当然,也可以考虑其他模板引擎如HandlebarsNunjucks,以找到最适合你项目需求的工具。


如果你只是想用res.json,纯restful的后端,何必在nodejs上面纠结呢。

Anguler + Java/PHP/Python, 哪个都比nodejs成熟。

SEO啊 啊啊啊~ 如果只考虑技术 那多好啊

? 成熟是成熟…当时nodejs 做restful后端的话,明显性能上比php/python 强啊…

还有一个比较早的… 10年时候的评测…有空.可以按照同样的步骤测一下最新版本的情况… https://code.google.com/p/node-js-vs-apache-php-benchmark/wiki/Tests

说到模板的选择和使用,我觉得可以先使用Consolidate.js模块作为一个抽象层,把底层使用的具体模板给屏蔽起来,有利于程序的维护。

针对Node.js中的模板引擎选择问题(Jade vs EJS),以下是一些建议和示例代码,帮助你做出决定。

Jade vs EJS

1. 编译性能

  • EJS: 更轻量级且编译速度快。它以简单的嵌入式JavaScript语法著称。
  • Jade: 现已更名为Pug,具有更清晰、更具结构化的语法,但编译速度较慢。

示例代码

使用 EJS

首先,确保安装了EJS:

npm install ejs

在你的Express应用中设置EJS:

const express = require('express');
const app = express();

app.set('view engine', 'ejs'); // 设置EJS为视图引擎
app.get('/', (req, res) => {
    const user = { name: 'John Doe' };
    res.render('index', { user });
});

app.listen(3000, () => console.log('Server running on port 3000'));

views/index.ejs 文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>EJS Example</title>
</head>
<body>
    <h1>Hello, <%= user.name %></h1>
</body>
</html>

使用 Pug (原Jade)

同样安装Pug:

npm install pug

在你的Express应用中设置Pug:

const express = require('express');
const app = express();

app.set('view engine', 'pug'); // 设置Pug为视图引擎
app.get('/', (req, res) => {
    const user = { name: 'John Doe' };
    res.render('index', { user });
});

app.listen(3000, () => console.log('Server running on port 3000'));

views/index.pug 文件:

doctype html
html(lang="en")
    head
        meta(charset="UTF-8")
        title= 'Pug Example'
    body
        h1 Hello #{user.name}

最佳实践

如果你的应用主要处理API和数据操作,考虑使用JSON响应而不是模板引擎。例如:

app.get('/api/user', (req, res) => {
    const user = { name: 'John Doe' };
    res.json(user);
});

这将简化后端逻辑并使前端更容易处理数据。

回到顶部