universal_renderer 0.4.3 → 0.4.4
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.
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 40fcb0b84e6de636246a3b1d47e128d511bc0246b6a871fa2250a30907463987
|
|
4
|
+
data.tar.gz: 53b3200c0b02084ee00a534cbbc22513b9d616ff32ab9fcc98075a161495b1fd
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 5e028737cb85c1e220e26afe9491e0b8f49e922cd7bf16af335ab0016fbed1b870eebd93d36e25503a70646a1f0c895b11f3f6d4840d452f70e02912eecc09d2
|
|
7
|
+
data.tar.gz: 1c7d4b8708c07f631f7b43998a9d8083ca67737869557f4b26ef153a9911c9d2d28cab81e10824c5573912fc04507a7361080564105d0637ee217a26405bd9db
|
data/README.md
CHANGED
|
@@ -51,9 +51,28 @@ end
|
|
|
51
51
|
|
|
52
52
|
After installation, you can pass data to your SSR service using `add_prop` in your controllers:
|
|
53
53
|
|
|
54
|
+
### SSR Modes
|
|
55
|
+
|
|
56
|
+
UniversalRenderer supports two SSR modes:
|
|
57
|
+
|
|
58
|
+
1. **Standard SSR** (default): Fetches complete HTML from the SSR service before rendering
|
|
59
|
+
2. **Streaming SSR**: Streams HTML content as it's generated (requires ActionController::Live)
|
|
60
|
+
|
|
61
|
+
```ruby
|
|
62
|
+
# Standard SSR (recommended for most use cases)
|
|
63
|
+
enable_ssr
|
|
64
|
+
|
|
65
|
+
# Streaming SSR (only use if you need fast TTFB)
|
|
66
|
+
enable_ssr streaming: true
|
|
67
|
+
```
|
|
68
|
+
|
|
54
69
|
```ruby
|
|
55
70
|
class ProductsController < ApplicationController
|
|
56
|
-
|
|
71
|
+
# Enable basic SSR (recommended for most use cases)
|
|
72
|
+
enable_ssr
|
|
73
|
+
|
|
74
|
+
# Or enable SSR with streaming (only if you need real-time rendering)
|
|
75
|
+
# enable_ssr streaming: true
|
|
57
76
|
|
|
58
77
|
def show
|
|
59
78
|
@product = Product.find(params[:id])
|
|
@@ -8,9 +8,13 @@ module UniversalRenderer
|
|
|
8
8
|
response,
|
|
9
9
|
stream_uri
|
|
10
10
|
)
|
|
11
|
+
success = false
|
|
12
|
+
|
|
11
13
|
http_client.request(http_post_request) do |node_res|
|
|
12
14
|
if node_res.is_a?(Net::HTTPSuccess)
|
|
13
15
|
node_res.read_body { |chunk| response.stream.write(chunk) }
|
|
16
|
+
|
|
17
|
+
success = true
|
|
14
18
|
else
|
|
15
19
|
Rails.logger.error(
|
|
16
20
|
"SSR stream server at #{stream_uri} responded with #{node_res.code} #{node_res.message}."
|
|
@@ -19,18 +23,18 @@ module UniversalRenderer
|
|
|
19
23
|
# Close stream without forwarding error to allow fallback to client rendering
|
|
20
24
|
response.stream.close unless response.stream.closed?
|
|
21
25
|
|
|
22
|
-
false
|
|
26
|
+
success = false
|
|
23
27
|
end
|
|
24
28
|
rescue StandardError => e
|
|
25
29
|
Rails.logger.error(
|
|
26
30
|
"Error during SSR data transfer or stream writing from #{stream_uri}: #{e.class.name} - #{e.message}"
|
|
27
31
|
)
|
|
28
|
-
false
|
|
32
|
+
success = false
|
|
29
33
|
ensure
|
|
30
34
|
response.stream.close unless response.stream.closed?
|
|
31
35
|
end
|
|
32
36
|
|
|
33
|
-
|
|
37
|
+
success
|
|
34
38
|
end
|
|
35
39
|
end
|
|
36
40
|
end
|
|
@@ -3,11 +3,16 @@ module UniversalRenderer
|
|
|
3
3
|
extend ActiveSupport::Concern
|
|
4
4
|
|
|
5
5
|
included do
|
|
6
|
-
include ActionController::Live
|
|
7
6
|
helper UniversalRenderer::SSR::Helpers
|
|
8
7
|
before_action :initialize_props
|
|
9
8
|
end
|
|
10
9
|
|
|
10
|
+
module Streaming
|
|
11
|
+
extend ActiveSupport::Concern
|
|
12
|
+
|
|
13
|
+
included { include ActionController::Live }
|
|
14
|
+
end
|
|
15
|
+
|
|
11
16
|
class_methods do
|
|
12
17
|
def enable_ssr(options = {})
|
|
13
18
|
class_attribute :enable_ssr, instance_writer: false
|
|
@@ -15,6 +20,8 @@ module UniversalRenderer
|
|
|
15
20
|
|
|
16
21
|
class_attribute :ssr_streaming_preference, instance_writer: false
|
|
17
22
|
self.ssr_streaming_preference = options[:streaming]
|
|
23
|
+
|
|
24
|
+
include UniversalRenderer::Renderable::Streaming if options[:streaming]
|
|
18
25
|
end
|
|
19
26
|
end
|
|
20
27
|
|