Bird
Raised Fist0
Expressframework~8 mins

res.send for general responses in Express - Performance & Optimization

Choose your learning style10 modes available
Performance: res.send for general responses
MEDIUM IMPACT
This affects server response time and client perceived loading speed by controlling how quickly the server sends data to the browser.
Sending a simple text or JSON response to the client
Express
app.get('/data', async (req, res) => {
  const data = await fetchDataAsync();
  res.json(data);
});
Asynchronous fetching avoids blocking; res.json automatically sets headers and stringifies efficiently.
📈 Performance GainNon-blocking response, reduces server wait time by 50-100ms, faster LCP on client
Sending a simple text or JSON response to the client
Express
app.get('/data', (req, res) => {
  const data = fetchDataSync();
  res.send(JSON.stringify(data));
});
Blocking synchronous data fetching delays response; manual JSON stringification adds overhead.
📉 Performance CostBlocks event loop during fetch, increasing server response time by 50-100ms depending on data size
Performance Comparison
PatternServer BlockingResponse SizeNetwork DelayVerdict
res.send with sync fetch and manual JSONHigh (blocks event loop)Medium (stringified JSON)Medium[X] Bad
res.json with async fetchLow (non-blocking)Medium (automatic JSON)Low[OK] Good
Rendering Pipeline
The server prepares the response and sends it over the network; the browser receives and parses it to render content.
→Server Processing
→Network Transfer
→Browser Parsing
⚠️ BottleneckServer Processing when synchronous/blocking code delays res.send
Core Web Vital Affected
LCP
This affects server response time and client perceived loading speed by controlling how quickly the server sends data to the browser.
Optimization Tips
1Avoid synchronous blocking code before calling res.send or res.json.
2Use res.json() for JSON responses to leverage built-in optimizations.
3Keep response payloads minimal to reduce network transfer time.
Performance Quiz - 3 Questions
Test your performance knowledge
What is a performance benefit of using res.json() over res.send() with manual JSON.stringify()?
Ares.json() blocks the event loop longer
Bres.send() compresses data better
Cres.json() automatically sets headers and stringifies data efficiently
Dres.send() caches the response automatically
DevTools: Network
How to check: Open DevTools > Network tab, reload the page, select the API request, and check the 'Waiting (TTFB)' and 'Content Download' timings.
What to look for: Low Time To First Byte (TTFB) indicates fast server response; large content size or long waiting means slower res.send handling.

Practice

(1/5)
1. What does res.send() do in an Express app?
easy
A. Logs information to the console
B. Sends a response back to the client and ends the request
C. Reads data from the client request
D. Starts a new server

Solution

  1. Step 1: Understand the purpose of res.send()

    res.send() is used to send a response back to the client in Express.
  2. Step 2: Recognize that it ends the response

    After sending data, res.send() automatically ends the response, so no more data is sent.
  3. Final Answer:

    Sends a response back to the client and ends the request -> Option B
  4. Quick Check:

    res.send() = sends response [OK]
Hint: Remember: res.send sends and finishes response [OK]
Common Mistakes:
  • Thinking res.send starts the server
  • Confusing res.send with reading request data
  • Assuming res.send logs to console
2. Which of the following is the correct syntax to send a plain text response using res.send?
easy
A. res.send('Hello');
B. res.send[Hello];
C. res.send({ message: 'Hello' });
D. res.send = 'Hello';

Solution

  1. Step 1: Identify correct method call syntax

    The correct way to call res.send is as a function with parentheses and the data inside.
  2. Step 2: Check the options for valid syntax

    res.send('Hello'); uses res.send('Hello'); which is correct. res.send({ message: 'Hello' }); sends an object, which is valid but not plain text. Options B and D have invalid syntax.
  3. Final Answer:

    res.send('Hello'); -> Option A
  4. Quick Check:

    Correct function call = res.send('text') [OK]
Hint: Use parentheses and quotes: res.send('text') [OK]
Common Mistakes:
  • Using square brackets instead of parentheses
  • Assigning value instead of calling function
  • Sending object when plain text is needed
3. What will the client receive when this Express route runs?
app.get('/test', (req, res) => {
  res.send({ success: true });
});
medium
A. A plain text: '[object Object]'
B. Nothing, response is empty
C. An error because object can't be sent
D. A JSON string: '{"success":true}'

Solution

  1. Step 1: Understand res.send with an object

    When res.send() receives an object, Express converts it to JSON automatically.
  2. Step 2: Predict the client response

    The client will get a JSON string representing the object: '{"success":true}'.
  3. Final Answer:

    A JSON string: '{"success":true}' -> Option D
  4. Quick Check:

    res.send(object) = JSON string [OK]
Hint: Objects sent with res.send become JSON strings [OK]
Common Mistakes:
  • Expecting plain text '[object Object]'
  • Thinking it causes an error
  • Assuming empty response
4. Identify the error in this Express route:
app.get('/hello', (req, res) => {
  res.send('Hello');
  res.send('Again');
});
medium
A. Calling res.send twice causes an error
B. Missing semicolon after res.send
C. res.send cannot send strings
D. Route path is invalid

Solution

  1. Step 1: Check multiple res.send calls in one route

    Once res.send() is called, the response is finished and cannot be sent again.
  2. Step 2: Understand the error caused

    Calling res.send() a second time causes an error because the response is already closed.
  3. Final Answer:

    Calling res.send twice causes an error -> Option A
  4. Quick Check:

    Only one res.send per response [OK]
Hint: Send response once; multiple res.send calls cause errors [OK]
Common Mistakes:
  • Ignoring that response ends after first send
  • Thinking multiple sends append data
  • Blaming syntax or route path
5. You want to send a JSON response with a status code 201 and a message 'Created' using res.send. Which code correctly does this?
hard
A. res.send({ status: 201, message: 'Created' });
B. res.send(201, { message: 'Created' });
C. res.status(201).send({ message: 'Created' });
D. res.status(201).send('Created');

Solution

  1. Step 1: Set status code before sending response

    Use res.status(201) to set the HTTP status code to 201.
  2. Step 2: Send JSON object with message

    Chain .send({ message: 'Created' }) to send the JSON response.
  3. Final Answer:

    res.status(201).send({ message: 'Created' }); -> Option C
  4. Quick Check:

    Status then send JSON = res.status(201).send({ message: 'Created' }); [OK]
Hint: Chain res.status(code).send(data) to set status and send [OK]
Common Mistakes:
  • Passing status code as first argument to send
  • Sending status inside JSON instead of HTTP status
  • Sending plain text when JSON is needed
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