Skip to content

Commit dcaddc8

Browse files
author
Robert Mosolgo
authored
Merge pull request #3443 from EugeneGrigorenko/master
Subscriptions broadcast: only call deserialization once
2 parents bace1e4 + c53d6ce commit dcaddc8

File tree

1 file changed

+2
-1
lines changed

1 file changed

+2
-1
lines changed

lib/graphql/subscriptions/action_cable_subscriptions.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,14 +146,15 @@ def write_subscription(query, events)
146146
def setup_stream(channel, initial_event)
147147
topic = initial_event.topic
148148
channel.stream_from(stream_event_name(initial_event), coder: @action_cable_coder) do |message|
149-
object = @serializer.load(message)
150149
events_by_fingerprint = @events[topic]
150+
object = nil
151151
events_by_fingerprint.each do |_fingerprint, events|
152152
if events.any? && events.first == initial_event
153153
# The fingerprint has told us that this response should be shared by all subscribers,
154154
# so just run it once, then deliver the result to every subscriber
155155
first_event = events.first
156156
first_subscription_id = first_event.context.fetch(:subscription_id)
157+
object ||= @serializer.load(message)
157158
result = execute_update(first_subscription_id, first_event, object)
158159
# Having calculated the result _once_, send the same payload to all subscribers
159160
events.each do |event|

0 commit comments

Comments
 (0)