Ne gerçek arasındaki fark bilmek istiyorum caching
ve memoization
olduğunu.
Gördüğüm kadarıyla, her ikisi de verileri depolayarak almak için tekrarlanan işlev çağrılarından kaçınmayı içeriyor .
İkisi arasındaki temel fark nedir?
Ne gerçek arasındaki fark bilmek istiyorum caching
ve memoization
olduğunu.
Gördüğüm kadarıyla, her ikisi de verileri depolayarak almak için tekrarlanan işlev çağrılarından kaçınmayı içeriyor .
İkisi arasındaki temel fark nedir?
Yanıtlar:
Memoization, bir fonksiyonun dönüş değerinin parametrelerine göre önbelleğe alınmasını içeren belirli bir önbelleğe alma biçimidir .
Önbelleğe alma daha genel bir terimdir; örneğin, HTTP önbelleğe alma, önbelleğe almaktır, ancak hafızaya alma değildir.
Wikipedia diyor ki :
Önbelleğe alma ile ilgili olmasına rağmen, notlandırma, arabelleğe alma veya sayfa değiştirme gibi önbelleğe alma biçimlerinden ayıran bu optimizasyonun belirli bir durumunu ifade eder.
If-Match
ve sona erme nedeniyle . Memoization yalnızca HTTP'nin nadiren olduğu saf işlev için anlamlıdır.
Onların kullanıldığını gördüğüm gibi, "hafızaya alma", aynı fonksiyon ve girdiler verildiğinde herhangi bir zamanda yeniden üretilebilen "deterministik bir fonksiyonun sonucunu önbelleğe almaktır".
"Önbelleğe alma", kaynak değerin belirli bir zamanda yeniden üretilebilir olup olmadığına bakılmaksızın, temelde herhangi bir çıktı tamponlama stratejisini içerir. Aslında, önbelleğe alma, bir disk veya bellekteki yazma önbelleği gibi girdi arabelleğe alma stratejilerine atıfta bulunmak için de kullanılır . Dolayısıyla çok daha genel bir terimdir.
Sanırım önbelleğe alma terimi genellikle GÇ işlemlerinin sonuçlarını veya temelde size dışarıdan gelen herhangi bir veriyi (dosyalar, ağ, db sorguları) depoladığınızda kullanılır. Terim hafızası, genellikle, örneğin dinamik programlama bağlamında, kendi hesaplamalarınızın sonuçlarını depolamak için geçerlidir.
Memoization, deterministik bir işlevin sonucunu önbelleğe almanın özel bir biçimidir. Bu, sonucun işlevin dışında önbelleğe alınmasının hatırlama olmadığı anlamına gelir çünkü işlev yeni bir sonuç hesaplarken (zaten önbellekte değil) önbelleği değiştirmek zorunda kalır, böylece artık bir (saf) işlev olmaz. Hafızaya alma genellikle önbelleğin ek bir argüman olarak (bir yardımcı işlevde) geçirilmesini ifade eder. Hafızaya alma, tek bir erişim için değerleri birkaç kez hesaplaması gereken işlevleri optimize edecektir. Önbelleğe alma, aynı parametrelerle birkaç kez çağrılan işlevleri optimize eder. Başka bir deyişle, Memoization, önbelleğe alma yalnızca tekrarlayan erişimleri optimize edip etmeyecekse, ilk erişimi optimize edecektir.