У меня есть приложение, которое визуализирует div, внутри которого есть ссылки, и обновляет внешний вид этого div с помощью AJAX.Проблема заключается в том, что Rails приходится снова и снова запрашивать одни и те же данные при переключении представления, которые кажутся неэффективными.
После прочтения темы совместного использования переменных между действиями контроллера я понимаю, что это невозможно из-за природы без состояния.Также прочитал, что сеанс не должен использоваться для хранения объекта, и эти переменные содержат много данных, в основном используемых для генерации графиков.Другим вариантом, я думаю, будет кэширование, с которым я не очень знаком.Или возможно сохранение переменных в Javascript в браузере.
У кого-нибудь была похожая проблема, которая могла бы обеспечить некоторое руководство?
class ArtistsController < ApplicationController
def index
if params[:term]
respond_to do |format|
format.html
format.js {render "show.js.haml"}
end
else
@artists= Artist.all
end
end
def show
@days=90
# DATABASE QUERIES
@artist= Artist.find(params[:id])
@reach_period= Reachupdate.period(@artist.id,@days)
@update_period=Update.period(@artist.id,@days)
@songs_load= Song.by_artist(@artist.id).joins(:playlists)
@song_period= @songs_load.period(@days)
# CHART
@updates= ChartTransformation::pop_chart(@update_period,@days)
@reach = ChartTransformation::reach_chart(@reach_period,@days)
@dates= ChartTransformation::dates(@days,3)
@reach_labels= ChartTransformation::reach_labels(@reach_period,2)
@songs= ChartTransformation::data_to_releases(@song_period, @days)
@reach_diff = Reachupdate.diff(@reach_period)
@pop_diff = Update.diff(@update_period)
@playlisting= ChartTransformation::playlisting(Playlist.by_artist(@artist.id),@days)
end
def overview
@days=90
# DATABASE QUERIES
@artist= Artist.find(params[:id])
@reach_period= Reachupdate.period(@artist.id,@days)
@update_period=Update.period(@artist.id,@days)
@song_period= Song.by_artist(@artist.id).period(@days)
# CHART
@updates= ChartTransformation::pop_chart(@update_period,@days)
@reach = ChartTransformation::reach_chart(@reach_period,@days)
@dates= ChartTransformation::dates(@days,3)
@reach_labels= ChartTransformation::reach_labels(@reach_period,2)
@songs= ChartTransformation::data_to_releases(@song_period, @days)
@reach_diff = Reachupdate.diff(@reach_period)
@pop_diff = Update.diff(@update_period)
@playlisting= ChartTransformation::playlisting(Playlist.by_artist(@artist.id),@days)
respond_to do |format|
format.js {render "timeline_content.js.haml"}
end
end
end