“Hesaplamalarında, memoization veya memoisation - Aynı girdiler tekrar ortaya çıktığında pahalı işlev çağrılarının sonuçlarını depolamak ve önbelleğe sonucu döndürerek bilgisayar programları hızlandırmak için öncelikle kullanılan bir optimizasyon tekniğidir” memoization üzerine Wikipedia makalesi .
Bu makale JavaScript'te not almayı açıklamaktadır. Temel bilgilerle başlıyoruz. Makale, hafızaya alma tekniğini basit bir örnekle detaylandırıyor. Yakında Angular'ın NgRx seçicilerinde hatırlatma üzerine başka bir makale ile devam edecek. Konuyla ilgili ek makaleler için alanı izleyin.
Hafızaya alınmış bir işlev, yanıtları önbelleğe alır. İşlev bağımsız değişkenleri bir işlevin girdisidir. Yeni bağımsız değişkenler kümesiyle her yeni işlev çağrısı, işlevdeki ifadeler boyunca çalışır, sonucu ileride kullanmak üzere önbelleğe alır. Tekrarlanan aramalar, sonucu önbellekten alın. Bu, işlemci yoğun ve zaman alan görevlerin hızını artırmaya yardımcı olur.
Her işlevi ezberlememiz gerekmeyebilir. Ancak bir tarayıcıda uzun süre çalışan işler için kesinlikle kullanışlıdır. Bu yazıda, iki sayıyı çarpan çok basit bir işlevi hatırlıyoruz.
Aşağıdaki kod parçacığı-1'i düşünün. İki argüman p1 ve p2'yi çarpan bir fonksiyonumuz var. MemoizeAny () çağrısıyla onu sarıyoruz. Tekrarlanan çağrılar için önbellek kullanma mantığına sahiptir, ancak yeni argümanlarla çağrılar için çarpma ifadesini çalıştırır.
Dikkat edin, memoizeAny () için bir argüman olarak çarpma işlevi sağlarız. Çarpma işlevinin hafızaya alınmış sürümünü döndürür. Diyelim ki, hafızaya alınmış çarpma (), farklı girişlerle beş kez çağrılır. Aşağıdaki kod parçacığını düşünün. Benzersiz çağrılar 1., 2. ve 4. çarpım deyimi üzerinden çalışır. Tekrarlanan işlev önbellekten 3. ve 5. dönüş değerini çağırır.
MemoizeAny işlevinde neler var? Aşağıdaki kod parçacığı-3'ün tamamını düşünün.
Yukarıda belirtildiği gibi, memoizeAny () bir işlevi bağımsız değişken olarak kabul eder. Ek önbellek denetimlerini sarar ve sarmalanmış işlevi döndürür. Satır numarası 13'e bakın. Bu sarmalanmış işlevi (gerçek çarpma yerine) yukarıdaki kod parçacıkları 1 ve 2'de çağırdık. Yeni bir işlev döndürüyoruz çünkü önbelleğe alınmış değeri kullanma veya süreç yoğun işi (her biri için) yeni girdi argümanı).
Önbellek, anahtar / değer çiftlerini tutan bir nesneler dizisidir. Anahtar, dizgeli argümanlardır. Her yeni çağrıyı benzersiz şekilde tanımlamaya yardımcı olur. Değer, döndürülen sonuçtur. Önbellek için bir dizi değişkeni oluşturan 6. satıra bakın. Dikkat, nesnenin yapısı için yorum. Her nesne bir çarpma işlevi çağrısını temsil eder. Sonucu kaydeder.
Ardından, anahtar önbellekte bulunursa, sonucu döndürün. Aksi takdirde, işlevi functionObject.apply () ile yürütün. Çağrı sırasında sağlanan argümanları iletin (44 - 46 arası satır numaraları).
Kod parçacığını node memoize ile çalıştırın (Komut dosyasının adı memoize.js'dir). Aşağıdaki şekil-1'deki sonuca bakınız. Dikkat edin, ilk kez çağırma için vurgular ve önbellekteki diğer tüm sonuçlar.
Not notu, yalnızca sonuç tamamen girdi argümanlarına bağlı olduğunda çalışır. Örneğimizde, çarpma fonksiyonunun 38. satırdaki giriş argümanları p1, p2 dışında başka bağımlılıkları yoktur. Bu tür fonksiyonlara Saf Fonksiyonlar denir. Saf bir işlev, bir dizi bağımsız değişken için her seferinde aynı sonucu döndürür.
İşlevler, girdi bağımsız değişkenlerinden başka herhangi bir şeye bağlı mı? Evet, bir kod birimi için ne enjekte edilen ne de bağımsız değişken olarak sağlanan dış bağımlılıklara sahip olmak yaygındır. Global bir değişken düşünün. Buna faktör diyelim. Aşağıdaki kod parçacığı-4'e bakın. Düşünün, uygulamadaki farklı bir işlev faktörü değiştiriyor. Her yeni faktör değeri için çarpma sonucu değişir. Hafızaya alma tekniği artık çalışmıyor.
Önbellek için anahtara faktörü ekleyebilirsiniz. Çalışacak! Kod hantal hale gelebilir. Tahmin edilebilir sonuçlar için saf fonksiyonlar yazmak her zaman iyi bir uygulamadır.
Not, memoizeAny () geneldir. Birden çok işlevi hafızaya almak için kullanın. MemoizeAny () her çağrıldığında yeni bir sarmalayıcı işlevi döndürülür. Döndürülen işlevi bir nesne olarak düşünün. Önbellek, memoizeAny () tarafından döndürülen her işlev için ayrı ayrı tutulur.
Aşağıdaki kod parçacığı-5'i ve sonuç şekil-2'yi düşünün. İki sayı ekleyen (toplam olarak adlandırılan) yeni bir işlevi hatırlıyoruz. Sonuçlar çarpma ve toplam arasında çakışmaz.
Sonuç olarak, Memoization, uzun süreli işlevlerin hızını ve verimliliğini artırmada yararlıdır. Çoğu geliştirici, bir veritabanından veya harici bir veri kaynağından önbelleğe alma sonuçları oluşturabilirdi. Eski tekniği işlev düzeyinde uygulamak ve genel uygulama performansını iyileştirmek faydalıdır.
Makale, önbelleği temizlemeyi kapsamaz. Bunu yapmak için bir API sağlamak faydalı olabilir. Dikkat edin, bu örnek bir tarayıcıda çalışmak üzere oluşturulmuştur. Hizmeti kullanan birçok kullanıcı nedeniyle doğal olarak eşzamanlı bağlantıları ve yüksek veri kümesi boyutunu işlemesi gereken sunucu tarafında değil. Ancak, bir tarayıcıda, tarayıcı kapatılana kadar bir kullanıcı için bir oturum için sakladığı önbellek.
Tarif Monorepo Hey! Ben Berkay Aydın, Jotform'da Mühendislik Direktörü ve Ön Uç Mimarıyım. Ön uç mimarimizi yeniden yapılandırırken öğrendiklerimi size anlatacağım.
Hey geliştiriciler, her şeyin doğru planlandığı ve uygulandığı ve sürümün sonunda sayfa Google'da 2. sayfada yer alan, büyüyen bir işletme için bundan daha kötüsü olamaz. Şimdi, bu tarihte herkes her şeyi Google'da araştırıyor ve ürününüzü Google arama sonuçlarının en üstüne çıkarmak, rekabette hayatta kalmak için çok önemli.
İnsanlara şans verme konusunda hayatta biraz geç kalındığına inanıyorum. Cömertçe.
Empati, bir başkasının durumu, zihni (düşünceleri) ve hissi (duyguları) hakkında farkındalık eylemi/sürecidir. Başkalarının bakış açısını anlama kapasitesidir.
Proje Arka Planı Bir iş teklifi ve kendi alanımda, zamanımda ve tarzımda yeni bir hayata başlama hayaliyle 2019 yılında yeni bir şehre taşındım. Kötü PG durumu göz önüne alındığında, arkadaşım ve ben bir daire kiralamaya karar verdik.
Bir süredir Cillian Murphy'nin çalışmalarının hayranıyım. Amerika Birleşik Devletleri'ndeki popülaritesindeki patlamadan çok önce İngiliz ve İrlanda film sahnesinde bir isim yaptı.