template_streaming 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.markdown +5 -10
- data/doc/fast-profile.png +0 -0
- data/doc/slow-profile.png +0 -0
- data/lib/template_streaming/version.rb +1 -1
- data/lib/template_streaming.rb +22 -0
- metadata +5 -6
data/README.markdown
CHANGED
@@ -6,11 +6,7 @@ Rails plugin which enables progressive rendering for templates.
|
|
6
6
|
|
7
7
|
A typical Rails client-side profile looks something like this:
|
8
8
|
|
9
|
-
|
10
|
-
alt="Typical Rails Profile"
|
11
|
-
src="http://github.com/oggy/template_streaming/raw/master/doc/slow-profile.png"
|
12
|
-
style="width: 100%"
|
13
|
-
/>
|
9
|
+
![Typical Rails Profile][slow-profile]
|
14
10
|
|
15
11
|
In almost all cases, this is highly suboptimal, as many resources, such as
|
16
12
|
external stylesheets, are static and could be loaded by the client while it's
|
@@ -35,17 +31,16 @@ and its content. By using the provided `flush` helper prior to yielding in the
|
|
35
31
|
prelayout, one can now output content early in the rendering process, giving
|
36
32
|
profiles that look more like:
|
37
33
|
|
38
|
-
|
39
|
-
alt="Progressive Rendering Profile"
|
40
|
-
src="http://github.com/oggy/template_streaming/raw/master/doc/fast-profile.png"
|
41
|
-
style="width: 100%"
|
42
|
-
/>
|
34
|
+
![Progressive Rendering Profile][fast-profile]
|
43
35
|
|
44
36
|
Also provided is a `#push(data)` method which can be used to send extra tags to
|
45
37
|
the client as their need becomes apparent. For instance, you may wish to `push`
|
46
38
|
out a stylesheet link tag only if a particular partial is reached which contains
|
47
39
|
a complex widget.
|
48
40
|
|
41
|
+
[slow-profile]: http://github.com/oggy/template_streaming/raw/master/doc/slow-profile.png
|
42
|
+
[fast-profile]: http://github.com/oggy/template_streaming/raw/master/doc/fast-profile.png
|
43
|
+
|
49
44
|
## Example
|
50
45
|
|
51
46
|
Conventional wisdom says to put your external stylesheets in the HEAD of your
|
data/doc/fast-profile.png
CHANGED
Binary file
|
data/doc/slow-profile.png
CHANGED
Binary file
|
data/lib/template_streaming.rb
CHANGED
@@ -12,6 +12,7 @@ module TemplateStreaming
|
|
12
12
|
begin
|
13
13
|
if @render_stack_height == 1
|
14
14
|
@performed_render = true
|
15
|
+
check_thin_support
|
15
16
|
@streaming_body = StreamingBody.new(progressive_rendering_threshold) do
|
16
17
|
@performed_render = false
|
17
18
|
last_piece = render_without_template_streaming(*args, &block)
|
@@ -44,6 +45,7 @@ module TemplateStreaming
|
|
44
45
|
#
|
45
46
|
def push(data)
|
46
47
|
@streaming_body.push(data)
|
48
|
+
flush_thin
|
47
49
|
end
|
48
50
|
|
49
51
|
private # --------------------------------------------------------
|
@@ -68,6 +70,26 @@ module TemplateStreaming
|
|
68
70
|
0
|
69
71
|
end
|
70
72
|
end
|
73
|
+
|
74
|
+
def check_thin_support
|
75
|
+
return if defined?(@thin_support_found)
|
76
|
+
if (@thin_callback = request.env['async.callback'])
|
77
|
+
begin
|
78
|
+
require 'event_machine_flush'
|
79
|
+
@thin_support_found = true
|
80
|
+
rescue LoadError
|
81
|
+
raise "Template Streaming on Thin requires the event_machine_flush gem."
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
#
|
87
|
+
# Force EventMachine to flush its buffer when using Thin.
|
88
|
+
#
|
89
|
+
def flush_thin
|
90
|
+
@thin_callback and
|
91
|
+
EventMachineFlush.flush(@thin_callback.receiver)
|
92
|
+
end
|
71
93
|
end
|
72
94
|
|
73
95
|
# Only prepare once.
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 2
|
9
|
+
version: 0.0.2
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- George Ogata
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-04-
|
17
|
+
date: 2010-04-22 00:00:00 -04:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -30,9 +30,8 @@ dependencies:
|
|
30
30
|
type: :development
|
31
31
|
version_requirements: *id001
|
32
32
|
description: |
|
33
|
-
Adds a #flush helper to Rails which
|
34
|
-
|
35
|
-
external resources while the server is rendering the page.
|
33
|
+
Adds a #flush helper to Rails which flushes the output buffer to
|
34
|
+
the client early.
|
36
35
|
|
37
36
|
email:
|
38
37
|
- george.ogata@gmail.com
|