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.inspectN+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 totalSonuç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.totalDoğru Yöntemi Seçme
Bazı numaralandırma yöntemleri zincirlerden çok daha hızlıdır.
sum,inject(:+)ifadesinden daha hızlıdırany?,select.empty?gibi tüm öğeleri incelemek yerine işlemi erken sonlandırırfind, 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.lastKarma 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.inspectDize 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
joiniş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
- Performans Ölçme
- Profil Oluşturma Araçları
- Bellek En İyileştirme
- Yaygın Darboğazlar