Ghi nhớ trong JavaScript

Giới thiệu về ghi nhớ trong JavaScript

Ghi nhớ là một kỹ thuật cho phép bạn tăng tốc đáng kể các ứng dụng của mình.

Nó không phải là một kỹ thuật dành riêng cho JavaScript, mặc dù tôi đã gắn thẻ bài đăng này là “JavaScript” vì tôi sẽ cung cấp một số ví dụ về JS.

Ghi nhớ là hành động lưu trữ kết quả của một lệnh gọi hàm sau khi chúng ta chạy nó, trong chính hàm. Lần tiếp theo chúng ta gọi hàm, thay vì thực hiện lại một lần nữa việc thực thi “thông thường”, nó chỉ trả về cho chúng ta kết quả đã lưu trữ.

nó làbộ nhớ đệm, cho các chức năng.

Tại sao điều này lại hữu ích?

Giả sử hàm của chúng ta mất 1 giây để chạy, trong khi bộ nhớ đệm cho phép chúng ta tăng tốc quá trình lên 2 mili giây. Có một lợi ích rõ ràng ở đây.

Nghe khá tuyệt. Đánh bắt ở đâu?

Tính năng ghi nhớ hoạt động nếu kết quả của việc gọi một hàm với cùng một tập đối số dẫn đến cùng một kết quả. Nói cách khác, hàm phảinguyên chất. Nếu không, kết quả vào bộ nhớ đệm sẽ không có ý nghĩa.

Vì vậy, các truy vấn cơ sở dữ liệu, yêu cầu mạng, ghi vào tệp và các hoạt động không thuần túy khác không thể được tối ưu hóa với ghi nhớ. Đối với những thứ đó, bạn sẽ cần phải tìm những cách khác để tối ưu hóa chúng. Hoặc chỉ sống với sự kém hiệu quả của họ, mà đôi khi là khó tránh khỏi.

Hãy tạo một ví dụ:

// Calculate the factorial of num
const fact = num => {
  if (!fact.cache) {
    fact.cache = {}
  }
  if (fact.cache[num] !== undefined) {
    console.log(num + ' cached')
    return fact.cache[num];
  } else {
    console.log(num + ' not cached')
  }
  fact.cache[num] = num === 0 ? 1 : num * fact(num - 1)
  return fact.cache[num]
}

tính giai thừa của một số. Lần đầu tiênfact()được chạy, nó tạo ra mộtcachethuộc tính đối tượng trên chính hàm, nơi lưu trữ kết quả của phép tính của nó.

Trong mỗi cuộc gọi, nếu chúng tôi không tìm thấy kết quả của số trongcacheđối tượng, chúng tôi thực hiện phép tính. Nếu không, chúng tôi chỉ trả lại cái đó.

Cố gắng chạy nó. Tôi đã tạo Codepen để dễ dàng kiểm tra, sử dụngdocument.write()để in ra trang HTML (lần đầu tiên tôi sử dụngdocument.write()trong các lứa tuổi, nhưng lần này nó rất hữu ích).

Xem bútGiai thừa ví dụ ghi nhớbởi Flavio Copes (@flaviocopes) trênCodePen.

Tech Wiki Online!