Speed Up Your Website With PHP Buffer Flushing

Share this article

PHP output buffering is normally enabled by default. In older versions of PHP, a string would be sent to your browser every time the interpreter encountered an echo statement or text outside the PHP delimiters. Output buffering makes this process quicker and more efficient. The buffer is essentially a big memory-resident string. When text is output, it’s appended to the buffer rather than returned to the browser immediately. The buffer is then “flushed”, i.e. its contents are transmitted and the string is reset pending further output. Flushing occurs when:

  1. the PHP interpreter reaches the end of the page
  2. the buffer exceeds the number of bytes specified within PHP’s output_buffering configuration setting, or
  3. the flush() or ob_flush() functions are called.
There are a few caveats but, assuming it works within your environment, you should consider flushing the buffer immediately after the page’s </head> tag, e.g.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Buffer flushing in action</title>
<link rel="stylesheet" type="text/css" href="styles.css" />
<link rel="shortcut icon" href="favicon.ico" />
</head>
<?php
// flush the buffer
flush();
?>
<body>
&hellip;
(If you’re using WordPress, you could use similar code in your theme’s header.php file.) Once the browser has received the HTML head, it can begin to download all linked CSS files, favicons and other resources. These downloads can occur while the browser is idle and waiting for the main body
content. The speed increase will depend on the server-side processing required, the weight of your page, the quantity and size of your CSS files, and whether the browser has cached any resources. However, it’s such a simple optimization, there’s little reason not to do it. I’d be interested to know whether this technique results in a perceivable speed difference on your website or application.

Frequently Asked Questions (FAQs) about PHP Buffer Flush

What is the main purpose of PHP buffer flush?

PHP buffer flush is a technique used to improve the performance of a web page. It allows the server to send parts of a web page to the client before the entire page is fully loaded. This can significantly reduce the perceived load time of a web page, especially for pages with heavy content or slow loading elements. The main PHP functions used for this purpose are flush() and ob_flush().

How does PHP buffer flush work?

PHP buffer flush works by sending the contents of the output buffer to the client. Normally, PHP waits until the entire page is generated before sending anything to the client. But with buffer flushing, PHP can send parts of the page as soon as they are ready. This can be done manually with the flush() or ob_flush() functions, or automatically with the ob_start() function.

What is the difference between flush() and ob_flush()?

Both flush() and ob_flush() are used to send the contents of the output buffer to the client. The main difference is that flush() sends the contents of the output buffer and turns off output buffering, while ob_flush() only sends the contents of the output buffer and leaves output buffering on. This means that ob_flush() can be used multiple times in a script, while flush() can only be used once.

When should I use PHP buffer flush?

PHP buffer flush is particularly useful for pages with heavy content or slow loading elements. By sending parts of the page as soon as they are ready, buffer flushing can significantly reduce the perceived load time of a web page. However, it should be used with caution, as it can also increase the server load and potentially slow down the overall performance of the website.

Can PHP buffer flush improve the SEO of my website?

Yes, PHP buffer flush can potentially improve the SEO of your website. Google and other search engines consider page load time as a ranking factor. By reducing the perceived load time of your web pages, buffer flushing can help improve your website’s search engine rankings.

How can I enable PHP buffer flush in my script?

To enable PHP buffer flush in your script, you need to use the ob_start() function at the beginning of your script. This will turn on output buffering and allow you to use the ob_flush() function to send parts of the page as soon as they are ready.

Can PHP buffer flush cause any issues?

While PHP buffer flush can improve the perceived load time of a web page, it can also increase the server load and potentially slow down the overall performance of the website. Therefore, it should be used with caution and only when necessary.

Is PHP buffer flush supported by all browsers?

Most modern browsers support PHP buffer flush. However, some older browsers or browsers with certain settings may not support it. Therefore, it’s always a good idea to test your web pages in different browsers to ensure they work correctly.

Can I use PHP buffer flush with gzip compression?

Yes, PHP buffer flush can be used with gzip compression. However, you need to be careful not to flush the output buffer before the gzip header is sent, as this can cause errors.

Can PHP buffer flush improve the user experience of my website?

Yes, by reducing the perceived load time of your web pages, PHP buffer flush can significantly improve the user experience of your website. Users are more likely to stay on a website that loads quickly and smoothly, which can lead to higher engagement and conversion rates.

Craig BucklerCraig Buckler
View Author

Craig is a freelance UK web consultant who built his first page for IE2.0 in 1995. Since that time he's been advocating standards, accessibility, and best-practice HTML5 techniques. He's created enterprise specifications, websites and online applications for companies and organisations including the UK Parliament, the European Parliament, the Department of Energy & Climate Change, Microsoft, and more. He's written more than 1,000 articles for SitePoint and you can find him @craigbuckler.

optimizationPHPspeedunderstanding-performance
Share this article
Read Next
Get the freshest news and resources for developers, designers and digital creators in your inbox each week