遅延ロードさせてWebアプリを高速化する
遅延ロードとは
基本的にwebアプリは表示するデータを読み込んでからページを表示します。
しかしそれだと重いデータを取得・表示する場合、ページの表示速度が落ちて重たい動作になります。
なので先に軽い部分だけを読み込みそのページに移動してから重いデータを読み込むことで
すべてを表示するまでの時間は変わらない(むしろ少し落ちる)がページの移動速度を大幅に上げることができます。
体感上はかなりサクサクした動作になります。
実装
gemfile
gem 'render_async'
gem 'render_async'
を書きbundle
次にrenderを書き直します。
変更前:
<%= render "data", posts:@posts %>
これを
<%= render_async data_path %>
or
<%= render_async data_user_path(@user) %>
このようにする。
次にルーティング
get "data", to: "posts#data", as: "data"
#↓パラメーターが必要な場合
get "data_user/:id", to: "posts#data_user", as: "data"
def index
#@posts = Post.all
end
def data
@posts = Post.all
render partial: "data", locals: {posts:@posts}
end
def data_user
@user = User.find_by(name: params[:id])
@posts = @user.posts.all
render partial: "data_user", locals: {posts:@posts}
end
最後はレイアウトに
<%= content_for :render_async %>
turbolinksを使用している場合
このままだと時々表示されない場合があります。
<%= render_async data_path, html_options: { 'data-turbolinks-track': 'reload' } %>
html_options: { 'data-turbolinks-track': 'reload' }を追加して
config/initializersにrender_async.rbを作りましょう
RenderAsync.configure do |config|
config.turbolinks = true # Enable this option if you are using Turbolinks 5+
end
jqueyを使う
kaminariやjscrollで無限スクロールなどを実装している場合、これをしないと動きません。
RenderAsync.configure do |config|
config.jquery = true
end
まとめ
遅延ロードって大きなサービスだと結構使われているのに日本語の情報が少なくて困ったので書きました。
体感上の動作速度がかなり変わるのでぜひやってみてください。
宣伝
AmmotというSNSを作りました。
文字数制限が6000字まで、画像・動画・PDF・音声は同時に10個まで投稿可能な自由なSNSです。
マークダウンにも対応しているので皆さん大好きなソースコードもきれいに載せれます。
ぜひ使ってみてください。
僕のツイッターアカ
https://twitter.com/yamada1531
Author And Source
この問題について(遅延ロードさせてWebアプリを高速化する), 我々は、より多くの情報をここで見つけました https://qiita.com/UTOG/items/5b9ec9064206cd17e94f著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .