Skip to content

Instantly share code, notes, and snippets.

@abdul
Forked from igrigorik/file.html
Created October 6, 2012 03:43
Show Gist options
  • Save abdul/3843690 to your computer and use it in GitHub Desktop.
Save abdul/3843690 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment