0Pricing
Ruby Academy · Ders

Yaygın Darboğazlar

Ruby kodunu hızlandırın

Yaygın Darboğazlar, CoddyKit'te ücretsiz bir Ruby Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Ruby Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Ruby Academy kursu toplamda 4 dersten oluşur.

Darboğazları Tanıma

Ruby'deki yavaşlamaların çoğu, sık tekrarlanan birkaç örüntüden kaynaklanır. Bunları bilmek, kodu hızlıca düzeltmenizi sağlar.

  • İş için yanlış veri yapısının kullanılması
  • Önbelleğe alınabilecek işlemlerin tekrarlanması
  • N+1 sorguları ve iç içe döngüler

Bu derste en yaygın sorunlar ele alınır.

puts 'Speeding up Ruby starts with knowing the usual suspects'

Array#include? ile Küme Karşılaştırması

Üyeliği Array#include? ile kontrol etmek O(n) zaman alır. Bir küme (veya karma tablo), O(1) süresinde arama yapar.

  • Üyeliği tekrar tekrar kontrol edecekseniz bir kümeyi bir kez oluşturun
  • Büyük koleksiyonlarda büyük bir hızlanma sağlar
require 'set'

allowed = Set.new(['a', 'b', 'c'])
puts allowed.include?('b')
puts allowed.include?('z')

İç İçe Döngüler (O(n Kare))

Her öğe çiftini karşılaştırmak karesel maliyetlidir ve boyut arttıkça hızla büyür.

  • İç döngüleri karma tablo aramasıyla değiştirin
  • O(n kare) işlemi O(n) işlemine dönüştürür
a = [1, 2, 3, 4]
b = [3, 4, 5]
set_b = b.to_set rescue require('set') || b.to_set
common = a.select { |x| set_b.include?(x) }
puts common.inspect

N+1 Örüntüsü

İlişkili verileri bir döngünün içinde almak, N+1 işlemesine neden olur.

  • Liste için 1 sorgu, ardından her öğe için 1 sorgu
  • Bunun yerine aramaları tek bir gruplandırılmış veri alımıyla toplu olarak gerçekleştirin
# Bad: lookup inside loop
orders = [1, 2, 3]
prices = { 1 => 10, 2 => 20, 3 => 30 }
# Good: one preloaded hash, O(1) per item
total = orders.sum { |id| prices[id] }
puts total

Sonuçları Önbelleğe Alma

Aynı pahalı değeri yeniden hesaplamak zaman kaybettirir. ||= ile sonucu önbelleğe alın.

  • İlk hesaplamadan sonra sonucu önbelleğe alın
  • Sonraki çağrılar anında sonuç döndürür
class Report
  def total
    @total ||= begin
      puts 'computing...'
      (1..1000).sum
    end
  end
end

r = Report.new
puts r.total
puts r.total

Doğru Yöntemi Seçme

Bazı numaralandırma yöntemleri zincirlerden çok daha hızlıdır.

  • sum, inject(:+) ifadesinden daha hızlıdır
  • any?, select.empty? gibi tüm öğeleri incelemek yerine işlemi erken sonlandırır
  • find, ilk eşleşmede durur
nums = (1..1_000_000)
puts nums.any? { |n| n > 5 }
puts nums.find { |n| n > 5 }

Tekrarlanan Sıralamadan Kaçınma

Bir döngünün içinde veya tekrar tekrar sıralama yapmak maliyetlidir. Bir kez sıralayın ve sonucu yeniden kullanın.

  • Sıralama O(n log n) maliyetindedir
  • Veriler değişmiyorsa sıralanmış sonucu önbelleğe alın
data = [5, 2, 8, 1, 9]
sorted = data.sort
puts sorted.first
puts sorted.last

Karma Tabloyla Gruplama

group_by ve tally, tekrarlanan taramalar yerine tek geçişte toplama yapar.

  • tally, tekrar sayılarını verimli biçimde sayar
  • Elle sayım yapılan döngülere gerek bırakmaz
words = ['a', 'b', 'a', 'c', 'b', 'a']
puts words.tally.inspect

Dize Oluşturmanın Maliyeti

Koleksiyonlar için join ile birleştirmek, tekrar tekrar birleştirme yapmaktan daha hızlıdır.

  • Bir dizi oluşturun, ardından join işlemini bir kez uygulayın
  • Birçok ara dize oluşturulmasını önler
parts = (1..5).map { |i| "item#{i}" }
puts parts.join(', ')

Düzenli İfade Derleme

Sık çalıştırılan bir döngünün içinde düzenli ifade değişmezi tanımlamak, ifadeyi örtük olarak yeniden derler. Onu bir sabite taşıyın.

  • Bir kez derleyin, birçok kez eşleştirin
  • Yalnızca doğru/yanlış değerine ihtiyacınız varsa match? kullanın
EMAIL = /\A[^@\s]+@[^@\s]+\z/

inputs = ['a@b.com', 'nope', 'x@y.org']
valid = inputs.select { |s| EMAIL.match?(s) }
puts valid.inspect

İşlemleri Gerektiğinde Gerçekleştirme

Hiç kullanmayabileceğiniz bir şeyi hesaplamayın. Tembel değerlendirme veya koşullu kontrollerle işlemi erteleyin.

  • Mümkün olduğunda erken dönün
  • Ağır değerleri yalnızca gerektiğinde hesaplayın
def describe(items)
  return 'empty' if items.empty?
  "#{items.size} items, first is #{items.first}"
end

puts describe([])
puts describe([10, 20])

Hızlı Kontrol

Darboğazlar konusundaki bilginizi sınayın.

Özet

Yaygın darboğazları gidermeyi öğrendiniz:

  • Hızlı üyelik kontrolü için include? yerine küme veya karma tablo kullanın
  • Önceden yüklenmiş karma tablolarla iç içe döngüleri ve N+1 örüntülerini ortadan kaldırın
  • Pahalı hesaplamaların sonuçlarını ||= ile önbelleğe alın
  • Verimli yöntemleri (sum, any?, tally) seçin ve düzenli ifadeleri döngünün dışına taşıyın
  • Hiç gerekmeyebilecek işlemleri erteleyin veya atlayın

Kazanımı doğrulamak için her zaman önce ve sonra ölçüm yapın.

Sıkça Sorulan Sorular

“Yaygın Darboğazlar” dersi ücretsiz mi?

Evet — “Yaygın Darboğazlar” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Ruby Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Ruby Academy kursu toplamda 4 dersten oluşur.

“Yaygın Darboğazlar” dersinde ne öğreneceğim?

Ruby kodunu hızlandırın Ruby Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Ruby Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Ruby Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Yaygın Darboğazlar” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Ruby Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Ruby Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Performans Ölçme
  2. Profil Oluşturma Araçları
  3. Bellek En İyileştirme
  4. Yaygın Darboğazlar
← Ruby Academy Sayfasına Dön