Ruby On Rails 作为一个快速开发框架,使用非常广泛。在实际项目中,优化性能是前端工程师经常需要面临的问题。为此,我们总结了以下10个常用的Ruby On Rails性能优化技巧。
1.使用缓存
缓存是最简单且有效的优化方式之一。在Ruby On Rails中,可以使用缓存来缓存一些数据,比如将查询结果缓存在缓存中,下次查询时直接从缓存中获取数据,减少了数据库查询的开销。Rails提供了cache和fragment cache机制,有利于快速响应用户请求。
# view中的cache方式 <% cache @posts do %> <% @posts.each do |post| %> <div class="post"> <%= post.title %> </div> <% end %> <% end %>
// javascriptcn.com 代码示例 # action中的 fragment cache def show @post = Post.find(params[:id]) @comments = @post.comments fresh_when(@post) # 使用缓存来缓存comments信息 @comments = Rails.cache.fetch([@post, "comments"]) { @post.comments } end
2.使用SQL Index
索引可以提高SQL查询的效率。在数据库表中加上索引,可以大大提升查询效率。Rails提供了migrations机制,可以轻松地添加索引。
add_index :users, :username
3.减少数据库查询
如果在一个请求中需要查询多个模型,可以使用 include 其他模型的方式,将子模型和主模型查询结果一次性加载,减少数据库查询的次数。
// javascriptcn.com 代码示例 class Post < ApplicationRecord belongs_to :user has_many :comments end # ver. 1 Post.all.each do |post| post.user.username end # ver. 2 Post.includes(:user).all.each do |post| post.user.username end
4.使用 Cache Attributes
如果某个模型的很多查询语句的结果都一样,可以考虑将这些查询结果缓存起来,下次查询时直接使用缓存的结果。
// javascriptcn.com 代码示例 class User < ApplicationRecord # 缓存用户的年龄信息 def age Rails.cache.fetch([self, "#{__method__}"]) do compute_age end end private def compute_age # 计算年龄逻辑 end end
5.使用 Background Worker
如果需要在请求处理中执行比较费时的任务,可以使用后台任务来处理。这样既不会阻塞请求的处理,也可以减少数据库操作的开销。
// javascriptcn.com 代码示例 # 在后台进行邮件发送 class EmailWorker include Sidekiq::Worker def perform(email_id) email = Email.find(email_id) UserMailer.confirmation_email(email).deliver_now end end
6.使用正则表达式来优化字符串操作
如果需要对一堆字符串的操作,可以使用正则表达式来替代。
// javascriptcn.com 代码示例 def to_sentence(words) words = words.reject(&:empty?) case words.length when 0 "" when 1 words[0].to_s.dup when 2 "#{words[0]} and #{words[1]}" else words[0..-2].join(", ") << ", and #{words[-1]}" end end # 使用正则表达式 def to_sentence(words) words = Array.wrap(words).reject(&:blank?) if words.length > 1 last_word = words.pop "#{words.join(', ')} and #{last_word}" else words.join end end
7.使用 Rack Cache
Rack Cache 是一个轻量级的缓存中间件,可以缓存静态文件、动态页面等。在Ruby On Rails中,可以轻松地使用Rack Cache。
// javascriptcn.com 代码示例 class ApplicationController < ActionController::Base before_action :set_cache_control_headers private def set_cache_control_headers # 缓存60分钟 expires_in 60.minutes, public: true end end
8.使用 Rails code profiling 来分析代码性能
Rails 提供了一系列的 code profiling 工具来分析应用程序的性能,包括内存分析、性能分析、SQL查询分析等。通过分析,可以找出应用程序中的性能瓶颈,从而进行优化。
# 安装并使用 rack-mini-profiler 进行代码性能分析 # Gemfile gem 'rack-mini-profiler' # config/environments/production.rb (开发环境和测试环境可以类似配置) config.middleware.use Rack::MiniProfiler
9.使用 Turbolinks
Turbolinks 是一款优秀的 JavaScript 库,可以使得页面加载得更快,提供了快速的页面渲染、改善用户体验的解决方案。通过使用 Turbolinks,可以减少浏览器重复加载页面的时间,提高前端的性能。
// application.html.erb <%= stylesheet_link_tag :application %> <%= turbolinks_stylesheet_tag :application %> <%= javascript_include_tag :application %> <%= turbolinks_javascript_include_tag :application %>
10.使用 Content Delivery Network (CDN)
使用 CDN 可以使得图片、JavaScript、CSS等静态资源在全球多个地区都得到快速的加载,从而提供更快速的访问体验。通过 CDN,可以提高前端的性能、改善用户体验。
# 使用 CloudFlare CDN # Gemfile gem 'cloudflare' # 配置config/application.rb config.middleware.use Rack::Cloudflare, respect_remote_ip: true
以上10个技巧,涵盖了Ruby On Rails性能优化的方方面面,从如何使用缓存、减少数据库查询、使用background worker到使用Turbolinks、CDN等,都是可以帮助前端工程师快速提升Ruby On Rails应用程序的性能。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/653f4fd87d4982a6eb8da99c