Bird
Raised Fist0
Expressframework~8 mins

EJS template setup in Express - Performance & Optimization

Choose your learning style10 modes available
Performance: EJS template setup
MEDIUM IMPACT
This affects the server-side rendering speed and initial page load time by how templates are compiled and served.
Rendering EJS templates in an Express app
Express
const cachedData = heavyComputation();
app.set('view engine', 'ejs');
app.get('/', (req, res) => {
  res.render('index', { data: cachedData });
});
Precomputes data once, so template rendering is fast and server responds quickly.
📈 Performance GainReduces server response blocking, improving LCP by 200-500ms.
Rendering EJS templates in an Express app
Express
app.set('view engine', 'ejs');
app.get('/', (req, res) => {
  res.render('index', { data: heavyComputation() });
});
Heavy computation runs on every request blocking template rendering and delaying response.
📉 Performance CostBlocks server response for each request, increasing LCP by 200-500ms depending on computation.
Performance Comparison
PatternDOM OperationsReflowsPaint CostVerdict
Render with heavy computation on each requestN/A (server-side)N/ADelays initial paint[X] Bad
Render with precomputed data and cached templatesN/A (server-side)N/AFast initial paint[OK] Good
Rendering Pipeline
EJS templates are compiled on the server to HTML before sending to the browser. The server rendering speed affects when the browser starts painting the page.
→Server-side Rendering
→Network Transfer
→Browser Parsing
→Paint
⚠️ BottleneckServer-side Rendering when templates or data are heavy or not cached.
Core Web Vital Affected
LCP
This affects the server-side rendering speed and initial page load time by how templates are compiled and served.
Optimization Tips
1Avoid heavy computations inside EJS templates or before rendering on each request.
2Cache compiled EJS templates to reduce server-side rendering time.
3Precompute and reuse data passed to templates to speed up response.
Performance Quiz - 3 Questions
Test your performance knowledge
What is a common cause of slow EJS template rendering in Express apps?
ARunning heavy computations on every request before rendering
BUsing EJS instead of Pug
CServing static files from Express
DUsing too many CSS files
DevTools: Network
How to check: Open DevTools > Network tab, reload page, check Time to First Byte (TTFB) and total response time for HTML document.
What to look for: High TTFB indicates slow server rendering; low TTFB means fast template processing.

Practice

(1/5)
1. What does the line app.set('view engine', 'ejs') do in an Express app?
easy
A. It creates a new EJS file in the views folder.
B. It installs the EJS package automatically.
C. It tells Express to use EJS as the template engine for rendering views.
D. It starts the Express server with EJS support.

Solution

  1. Step 1: Understand the purpose of app.set

    This method configures Express settings, here it sets the template engine.
  2. Step 2: Identify what 'view engine' setting does

    Setting 'view engine' to 'ejs' tells Express to use EJS to render view files automatically.
  3. Final Answer:

    It tells Express to use EJS as the template engine for rendering views. -> Option C
  4. Quick Check:

    app.set('view engine', 'ejs') = Use EJS [OK]
Hint: Remember: app.set('view engine', 'ejs') enables EJS rendering [OK]
Common Mistakes:
  • Thinking it installs EJS automatically
  • Confusing it with creating files
  • Assuming it starts the server
2. Which of the following is the correct way to render an EJS template named index.ejs with Express?
easy
A. res.render('index.ejs')
B. res.view('index')
C. res.send('index.ejs')
D. res.render('index')

Solution

  1. Step 1: Recall how Express renders templates

    Express uses res.render with the template name without extension.
  2. Step 2: Identify correct syntax

    Passing 'index' (without '.ejs') is correct; Express adds the extension automatically.
  3. Final Answer:

    res.render('index') -> Option D
  4. Quick Check:

    Use res.render('templateName') without extension [OK]
Hint: Use template name without extension in res.render() [OK]
Common Mistakes:
  • Including the .ejs extension in res.render()
  • Using res.send() instead of res.render()
  • Using non-existent res.view() method
3. Given this Express code snippet, what will be the output in the browser?
app.set('view engine', 'ejs');

app.get('/', (req, res) => {
  res.render('greeting', { name: 'Sam' });
});

And the greeting.ejs file contains:
<h1>Hello, <%= name %>!</h1>
medium
A.

Hello, <%= name %>!

B.

Hello, Sam!

C. Error: name is not defined
D.

Hello, !

Solution

  1. Step 1: Understand data passing to EJS

    The object { name: 'Sam' } passes 'Sam' as the value for 'name' in the template.
  2. Step 2: Interpret EJS syntax in template

    <%= name %> outputs the value of 'name' safely, so it becomes 'Sam'.
  3. Final Answer:

    <h1>Hello, Sam!</h1> -> Option B
  4. Quick Check:

    EJS <%= %> inserts variable value [OK]
Hint: EJS <%= %> inserts passed data values directly [OK]
Common Mistakes:
  • Expecting raw template tags to show in output
  • Forgetting to pass data object to render
  • Confusing <%= %> with <% %> (no output)
4. What is wrong with this Express setup for EJS?
const express = require('express');
const app = express();

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

app.get('/', (req, res) => {
  res.render('home.ejs');
});
medium
A. The template name in res.render should not include the '.ejs' extension.
B. EJS must be required explicitly with require('ejs').
C. app.set should be called after app.get.
D. res.render cannot be used inside app.get.

Solution

  1. Step 1: Check usage of res.render

    res.render expects the template name without the file extension.
  2. Step 2: Identify the error in code

    Passing 'home.ejs' includes extension, which causes Express to look for 'home.ejs.ejs'.
  3. Final Answer:

    The template name in res.render should not include the '.ejs' extension. -> Option A
  4. Quick Check:

    Use res.render('templateName') without extension [OK]
Hint: Never add .ejs extension in res.render() call [OK]
Common Mistakes:
  • Adding .ejs extension in res.render()
  • Thinking require('ejs') is mandatory
  • Changing app.set order unnecessarily
5. You want to render a list of users dynamically in an EJS template. Which setup correctly passes the users array and renders it inside users.ejs?
const users = ['Anna', 'Bob', 'Cara'];

app.get('/users', (req, res) => {
  // What goes here?
});

Choose the correct code to replace // What goes here?.
hard
A. res.render('users', { users: users });
B. res.render('users.ejs', { users });
C. res.send('users', { users });
D. res.render('users', users);

Solution

  1. Step 1: Understand how to pass data to EJS

    Data must be passed as an object with keys matching template variables.
  2. Step 2: Check correct syntax for res.render

    Use res.render('templateName', { key: value }) without file extension.
  3. Final Answer:

    res.render('users', { users: users }); -> Option A
  4. Quick Check:

    Pass data as object in res.render(template, data) [OK]
Hint: Pass data as object: res.render('name', {key: value}) [OK]
Common Mistakes:
  • Including .ejs extension in template name
  • Passing array directly instead of inside object
  • Using res.send instead of res.render
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard