Skip to content

Instantly share code, notes, and snippets.

@igrigorik
Created July 6, 2012 08:01
Show Gist options
  • Save igrigorik/3058839 to your computer and use it in GitHub Desktop.
Save igrigorik/3058839 to your computer and use it in GitHub Desktop.
Example of early head flush on load time
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>Hello</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
Hello World
</body>
</html>
require 'goliath'
class Delay < Goliath::API
def response(env)
case env['REQUEST_PATH']
when /css$/ then
# simulate slow (1s delay) stylesheet
EM::Synchrony.sleep(1)
return [200, {'Content-Type' => 'text/css'}, 'body { color: red }']
else
data = File.open('file.html')
# flush the HTML head (140 bytes) immediately after the headers
# this will allow the preloader to request the stylesheet before
# the rest of the page completes
EM.add_timer(0.01) do
env.chunked_stream_send(data.read(140))
end
# flush remainder of document after 1.5s
EM.add_timer(1.5) do
env.chunked_stream_send(data.read.to_s)
env.chunked_stream_close
end
# flush 200 response immediately
chunked_streaming_response(200, {'Content-Type' => 'text/html'})
end
end
end
@wolfwifee
Copy link

wolfwifee commented May 4, 2016

Hi there, in terms of the Jekyll site, wondering if is there an equivalent way to do the flush after the header tag as well, something like Flush the Buffer Early. Thank you.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment