KOA技术分享

专注 Koa.js 框架的编程知识分享

Koa.js 服务端渲染与模板引擎实践

服务端渲染的价值

尽管现代前端框架如React、Vue提供了强大的客户端渲染能力,服务端渲染(SSR)在某些场景下仍然具有不可替代的优势:首屏加载更快、对SEO更友好、可以处理复杂的数据预处理、降低客户端设备性能要求等。Koa.js配合模板引擎可以轻松实现服务端渲染。

模板引擎对比

Node.js生态中有多种成熟的模板引擎可供选择:

模板引擎 语法特点 适用场景
EJS 类似HTML,学习成本低 快速开发、中小型项目
Nunjucks 功能丰富、过滤器强大 复杂逻辑、需要复用
Pug (Jade) 缩进语法、简洁优雅 喜欢简洁语法的开发者
art-template 性能极高、语法简洁 对性能要求高的项目

Koa整合EJS模板引擎

EJS是最简单易用的模板引擎之一,适合快速开发:

const Koa = require('koa');
const Router = require('koa-router');
const render = require('koa-ejs');
const path = require('path');

const app = new Koa();
const router = new Router();

// 配置EJS模板引擎
render(app, {
  root: path.join(__dirname, 'views'),
  layout: false,
  viewExt: 'html',
  cache: false,
  debug: false,
  filters: {
    json: JSON.stringify,
    upper: str => str.toUpperCase()
  }
});

// 首页渲染
router.get('/', async (ctx) => {
  const products = [
    { id: 1, name: '商品A', price: 100, stock: 50 },
    { id: 2, name: '商品B', price: 200, stock: 30 },
    { id: 3, name: '商品C', price: 150, stock: 0 }
  ];

  await ctx.render('index', {
    title: '商品列表',
    products: products,
    user: { name: '张三', isVIP: true }
  });
});

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

EJS模板语法示例

EJS使用简洁的标签语法:


<%= title %>

欢迎, <%= user.name %>!

<% if (user.isVIP) { %> VIP会员 <% } else { %> 普通用户 <% } %>
    <% products.forEach(function(product){ %>
  • <%= product.name %> - 价格: <%= product.price %>元 <% if (product.stock > 0) { %> 库存: <%= product.stock %> <% } else { %> 缺货 <% } %>
  • <% }); %>
<%- include('header') %>

<%= user.name | upper %>

Nunjucks高级功能

Nunjucks提供更强大的功能,适合复杂应用:

// Nunjucks配置
const nunjucks = require('nunjucks');
const env = new nunjucks.configure('./views', {
  autoescape: true,
  watch: true,
  noCache: true
});

// 自定义过滤器
env.addFilter('formatDate', function(date, format) {
  const moment = require('moment');
  return moment(date).format(format);
});

env.addFilter('currency', function(amount) {
  return '¥' + Number(amount).toFixed(2);
});

// 使用async过滤器处理异步数据
env.addFilter('async', async function(fn) {
  return await fn();
});

性能优化策略

服务端渲染需要注意性能问题:

  1. 模板缓存:生产环境开启模板缓存,减少解析开销
  2. 页面缓存:对静态页面或变化不频繁的页面进行整体缓存
  3. 组件缓存:缓存重复使用的页面片段
  4. 流式渲染:使用Koa的流式响应,分块输出HTML
  5. 静态资源CDN:JS、CSS、图片使用CDN加速

SEO优化技巧

服务端渲染对SEO友好,需注意:

← 下一篇:Koa.js服务端渲染框架与首屏优化 上篇:Koa.js 日志系统与异常监控 →