Rumah > hujung hadapan web > tutorial js > Terima kasih atas Memoize

Terima kasih atas Memoize

Patricia Arquette
Lepaskan: 2024-12-23 19:58:18
asal
854 orang telah melayarinya

Anda yang mengenali saya tahu saya mempunyai ingatan buruk yang mutlak. Apa-apa sahaja daripada dialog Monty Python dan penyenaraian lagu daripada kumpulan rock alt 90-an dan saya sudah mati. Nasib baik bagi kami, bagaimanapun, komputer jauh lebih cekap dalam hal mengingati sesuatu.

Konsep

Teknik yang kita lihat hari ini dipanggil memoization. Mari kita mulakan dengan membincangkan fungsi tulen. Idea di sebalik fungsi tulen ialah, tidak kira apa input yang anda berikan, ia akan sentiasa memberikan output yang sama. Sekarang pertimbangkan jika anda mempunyai fungsi intensif proses atau yang memerlukan banyak overhed. Jika anda sudah mengetahui hasil menjalankan fungsi apabila menyediakan set parameter tertentu mengapa menggunakan sumber anda untuk menjalankannya semula. Memoisasi membolehkan kami menyimpan hasil pelaksanaan fungsi sebelumnya menggunakan parameter kepada fungsi itu sebagai kunci. Coretan kod berikut menunjukkan rupa fungsi yang dihafal:

Pelaksanaan

const memoize = {};

const getResult = async (n1, n2) => {
  const key = `${n1}_${n2}`;
  if (!memoize[key]) {
    memoize[key] = await resourceIntensiveFunction(n1, n2);
  }
  return memoize[key];
};
Salin selepas log masuk

Mari kita lihat kodnya. Kami mulakan dengan objek yang dipanggil memoize yang akan menyimpan parameter kami dan hasilnya sebagai set nilai utama. Seterusnya kita mempunyai fungsi kita dipanggil getResult yang mengambil dua parameter: n1 dan n2. Demi kesederhanaan ini, mari kita anggap bahawa pesanan itu penting. Kami akan mencipta kunci pembolehubah menggunakan penggabungan dua parameter.

Sekarang kita perlu menyemak untuk melihat sama ada objek memoize mengandungi nilai untuk kunci itu. Kami menyemak dan, jika tidak, kami tidak mempunyai pilihan selain menjalankan fungsi intensif sumber. Jika kita menjalankan fungsi itu, kita juga mesti menyimpan hasil dalam objek memoisasi untuk pelaksanaan masa hadapan. Dengan cara ini pada kali seterusnya menjalankan fungsi ini untuk parameter yang sama ini ia akan menemui hasil dalam objek dan melangkau fungsi intensif sumber.

Memoize apabila pertanyaan telah dijalankan sebelum ini

Thanks for the Memoize

Memoize apabila pertanyaan belum dijalankan sebelum ini

Thanks for the Memoize

Faedahnya

Ini boleh berguna dalam beberapa senario. Jika, sebagai contoh, anda mempunyai siri pengiraan yang panjang yang mengambil masa yang panjang dan sumber yang baik ini merupakan pengoptimuman yang berbaloi. Ia juga boleh menjadi berharga jika anda mempunyai sesuatu yang memerlukan daya pemprosesan rangkaian yang tinggi atau banyak ruang cakera sementara. Untuk mana-mana senario ini kelebihannya adalah dua kali ganda: Ia menghapuskan keperluan untuk menjalankan fungsi yang telah dilaksanakan sebelum ini dan ia membebaskan sumber untuk mereka yang perlu dikira kerana mereka tidak bersaing untuk mendapatkan sumber dengan fungsi yang telah dipetakan. .

Cabaran

Terdapat situasi di mana ini mungkin bukan pendekatan yang betul jadi jangan selalu menggunakan paradigma ini. Jika fungsi anda bukan fungsi tulen dan ia berubah berdasarkan faktor luaran maka anda tidak mahu menggunakan pendekatan ini kerana ia akan sentiasa memberi anda nilai dari larian pertama tanpa mengambil kira pembolehubah lain tersebut. Anda juga tidak mahu menggunakan ini jika aplikasi jarang menjalankan fungsi dengan set parameter yang sama. Dalam kes itu, anda akan mempunyai struktur data yang semakin besar yang jarang digunakan.

Itu lebih kurang untuk menghafal. Ia adalah corak yang agak mudah dengan nama bunyi yang sangat menakutkan. Terdapat banyak aplikasi untuknya dan, mudah-mudahan, ini memberi anda gambaran yang lebih baik tentang apa yang berlaku di bawah hud. Sekarang, kalau awak maafkan saya, saya perlu ingat apa yang saya akan lakukan petang ini.

Kod sumber tersedia di GitHub

Atas ialah kandungan terperinci Terima kasih atas Memoize. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan