Reputation: 54949
I have the following code
def calculate_metrics
reach_values = {}
reach_values['reach_change_value'] = 0
reach_values['reach_change_type'] = 'nochange'
if find_yesterdays_metrics
change = (get_influencer_metrics["total_count"]).to_i - find_yesterdays_metrics.reach_count
reach_values['reach_change_value'] = change.abs
case
when change < 0
reach_values['reach_change_type'] = "down"
when change > 0
reach_values['reach_change_type'] = "up"
end
end
reach_values
end
def set_metrics_data
@facebook_metrics = @influencer_metrics.new(
reach_change_value: calculate_metrics['reach_change_value'],
reach_change_type: calculate_metrics['reach_change_type'],
social_account: SocialAccount.friendly.find('facebook')
)
end
The calculate_metrics
is being called twice right now and being fully processed twice. Is there any suggestions on how i can optimize the same so that i dont have to process the same data twice.
Upvotes: 2
Views: 55
Reputation: 735
In set_metrics_data
put the result of calculate_metrics in a tmp variable, lets call it x
and then ask of x
the type and value. Which will look like:
x = calculate_metrics
reach_change_value : x['reach_change_value']
each_change_type : x['reach_change_type']`
As a result the call to calculate_metrics is only called once (and stored in a tmp variable x
).
Upvotes: 1
Reputation: 2034
You can follow the M. Suurland answer like
x = calculate_metrics
reach_change_value : x['reach_change_value']
each_change_type : x['reach_change_type']`
and for some optimize/syntax change calculate_metrics you can use like this
def calculate_metrics
reach_values = {'reach_change_value': 0, 'reach_change_type': "nochange"}
yesterday_mat = find_yesterdays_metrics
if yesterday_mat
change = (get_influencer_metrics["total_count"]).to_i - yesterday_mat.reach_count
reach_values =
case change
when change < 0
{'reach_change_type': "down", 'reach_change_value': change.abs}
when change > 0
{'reach_change_type': "up", 'reach_change_value': change.abs}
else
reach_values
end
end
reach_values
end
Upvotes: 0