Rails Performans İpuçları: Uygulamanızı Optimize Edin

Rails Performans İpuçları Her web uygulaması için performans kritiktir. Ruby on Rails uygulamanızı optimize etmek için temel ipuçları: 1. Veritabanı Sorgu Optimizasyonu N+1 Sorgu Problemini Önlemek için Includes Kullanın 1 2 3 4 5 6 7 8 9 10 11 12 {title="app/controllers/users_controller.rb" hl_lines=[8]} # Kötü - N+1 sorgu problemi users = User.all users.each do |user| puts user.posts.count end # İyi - Includes kullanın users = User.includes(:posts) # Bu satır N+1 sorgu problemini önler users.each do |user| puts user.posts.count end Veritabanı İndekslerini Kullanın 1 2 3 4 5 6 7 # Migration dosyanızda class AddIndexToUsers < ActiveRecord::Migration[7.0] def change add_index :users, :email add_index :posts, [:user_id, :created_at] end end 2. Önbellekleme Stratejileri Fragment Önbellekleme 1 2 3 4 5 6 7 <!-- View dosyanızda --> <% cache(post, expires_in: 1.hour) do %> <div class="post"> <h2><%= post.title %></h2> <p><%= post.content %></p> </div> <% end %> Action Önbellekleme 1 2 3 4 5 6 7 class PostsController < ApplicationController caches_action :index, expires_in: 1.hour def index @posts = Post.published.includes(:author) end end 3. Arka Plan İşleri Ağır işlemler için arka plan işlerini kullanın: ...

Temmuz 7, 2025 · 2 dk · 247 sözcük · Okan Binli

ERB Şablonları: En İyi Uygulamalar ve İpuçları

ERB Şablonları: En İyi Uygulamalar ve İpuçları ERB (Embedded Ruby), Rails için varsayılan şablon motorudur. Temiz ve sürdürülebilir ERB şablonları yazma en iyi uygulamaları: 1. Mantığı View’lardan Uzak Tutun Kötü Örnek 1 2 3 4 5 6 7 8 9 10 11 12 <!-- Bunu yapmayın --> <% if user.admin? && user.active? && user.posts.count > 0 %> <div class="admin-panel"> <% user.posts.each do |post| %> <% if post.published? && post.created_at > 1.week.ago %> <div class="recent-post"> <%= post.title %> </div> <% end %> <% end %> </div> <% end %> İyi Örnek 1 2 3 4 5 6 <!-- Helper'ları ve model method'larını kullanın --> <% if show_admin_panel?(user) %> <div class="admin-panel"> <%= render 'admin/recent_posts', posts: user.recent_published_posts %> </div> <% end %> 1 2 3 4 5 6 7 8 9 # Helper'da def show_admin_panel?(user) user.admin? && user.active? && user.posts.any? end # User model'inde def recent_published_posts posts.published.where('created_at > ?', 1.week.ago) end 2. Yeniden Kullanılabilir Bileşenler için Partial’ları Kullanın Modüler Bileşenler Oluşturun 1 2 3 4 5 6 7 8 9 10 11 <!-- _user_card.html.erb --> <div class="user-card"> <div class="user-avatar"> <%= image_tag user.avatar.present? ? user.avatar : 'default-avatar.png' %> </div> <div class="user-info"> <h3><%= user.name %></h3> <p><%= user.email %></p> <span class="user-role"><%= user.role.humanize %></span> </div> </div> 1 2 3 4 5 6 <!-- Partial'ı kullanın --> <div class="users-grid"> <% @users.each do |user| %> <%= render 'user_card', user: user %> <% end %> </div> 3. HTML Güvenliği ve Kaçırma Doğru HTML Kaçırma 1 2 3 4 5 6 7 8 9 10 11 12 <!-- Varsayılan olarak güvenli --> <p>Kullanıcı yorumu: <%= @comment.content %></p> <!-- Ham HTML gerektiğinde (dikkatli olun!) --> <div class="content"> <%= raw @post.html_content %> </div> <!-- Sanitizasyon ile daha iyi yaklaşım --> <div class="content"> <%= sanitize @post.content, tags: %w[p br strong em ul ol li] %> </div> Dinamik HTML için content_tag Kullanma 1 2 3 4 5 6 7 8 9 10 # Helper'da def status_badge(status) css_class = case status when 'active' then 'badge-success' when 'pending' then 'badge-warning' else 'badge-default' end content_tag :span, status.humanize, class: "badge #{css_class}" end 1 2 <!-- Şablonda --> <%= status_badge(user.status) %> 4. Koşullu Rendering Temiz Koşullu Mantık 1 2 3 4 5 6 7 8 9 10 <!-- İyi --> <%= content_tag :div, class: "user-status #{'active' if user.active?}" do %> <span><%= user.name %></span> <% if user.admin? %> <span class="admin-badge">Admin</span> <% end %> <% end %> <!-- Helper ile daha iyi --> <%= render 'user_status', user: user %> 5. Form En İyi Uygulamaları Anlamsal Form Yapısı 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <%= form_with model: @user, local: true do |form| %> <div class="form-group"> <%= form.label :name %> <%= form.text_field :name, class: 'form-control' %> <%= form.error_span :name %> </div> <div class="form-group"> <%= form.label :email %> <%= form.email_field :email, class: 'form-control' %> <%= form.error_span :email %> </div> <div class="form-actions"> <%= form.submit 'Kullanıcıyı Kaydet', class: 'btn btn-primary' %> <%= link_to 'İptal', users_path, class: 'btn btn-secondary' %> </div> <% end %> Özel Form Helper’ı 1 2 3 4 5 6 7 8 9 # application_helper.rb'de module ApplicationHelper def form_error_span(form, field) if form.object.errors[field].any? content_tag :span, form.object.errors[field].first, class: 'error-message' end end end Sonuç Bu ERB en iyi uygulamalarını takip etmek şablonlarınızı daha sürdürülebilir, güvenli ve debug etmesi kolay hale getirir. View’ları basit tutmayı ve karmaşık mantığı helper’lara veya model’lere taşımayı unutmayın. ...

Mayıs 27, 2025 · 3 dk · 546 sözcük · Okan Binli