Tăng tốc website bằng Caching

Mình có đang tìm hiểu về caching website. Đã đọc qua một số tài liệu mà vẫn cảm thấy mơ hồ quá. Mn ai biết có thể lấy một ví dụ đơn giản về caching ở client và server để mình tham khảo với được không? Tiện thể mong mn chỉ giúp mình cấu hình apache để sử dụng Gzip Compression. Thank!

Caching có thể hiểu đơn giản là “cái gì không thường xuyên thay đổi thì lưu vào chỗ nào đó gần cho dễ lấy để tiết kiệm thời gian”. Ví dụ khi mới vào một trang web, có một bức ảnh tốn 0,5 giây để tải từ server đến client. Để tiết kiệm thời gian thì lưu ảnh đó vào trong ổ cứng, khi load lại chỉ tốn 0,05 giây. Hay khi tính dãy Fibonacci bằng đệ quy thì lưu kết quả đã tính vào một mảng, trước khi tính thì kiểm tra xem đã tính từ trước chưa, nếu rồi thì lấy kết quả đó ra, khỏi tính lại. Cái này cũng là một dạng của caching, gọi là memoization.

P/s: Caching là dạng danh động từ của cache.

3 Likes

Tiện thể cậu có thể show tớ tài liệu mà cậu đã đọc không? :smile:

3 Likes

daynhauhoc.com được host trên VPS DigitalOcean ở Mỹ và có dùng cdn cloudflare, bạn ngồi ở HCM truy cập vào DNH thì data truyền từ data center cloudflare singapore hoặc HongKong vô laptop của bạn, lần đầu truy cập thì chrome sẽ cache lại 1 số CSS của daynhauhoc, những lần sau vào DNH thì chrome sẽ không request CSS đó nữa

2 Likes

cái lý thuyết đấy thì mình hiểu r. Chỉ muốn hỏi mn cách ứng dụng thực tế trong code để mình tham khảo thêm cho rõ hơn.

cái lý thuyết đấy thì mình hiểu r. Chỉ muốn hỏi mn cách ứng dụng thực tế trong code để mình tham khảo thêm cho rõ hơn

bạn search google là ra cả đống tài liệu nhé :smile:

Cậu search google cả đống tài liệu nhé! :slightly_smiling_face:

Do cậu cũng biết dùng google để search rồi, tớ cũng nghĩ cậu nên đọc kỹ tài liệu để đỡ mơ hồ. Trong một đống tài liệu đó nên có ví dụ đơn giản về caching ở client và server để cậu có thể tham khảo.

3 Likes

vậy chắc b ko đọc kỹ câu hỏi mình r. mình đọc trên gg ko hiểu nên mới nhờ mn lấy ví dụ code để mình tham khảo. Còn gzip mình làm theo trên gg nó ko chạy đc :smile:

Một chén cơm, bạn có bao nhiêu cách để ăn?
Ăn bằng muỗng, bằng đũa, bằng tay…

Caching cũng như vậy, không thể nói đưa code là đưa code, còn phải tùy thuộc vào từng trường hợp cụ thể, và xử lý logic của bạn.

Theo mình nghĩ hiện giờ bạn hiểu sơ khái niệm caching vậy là được rồi.
Làm một trang web hoàn chỉnh đi.

Sau khi làm xong trang web đó thì quay lại nghiên cứu, áp dụng caching sau.
Có làm thực tế thì mới hiểu được.

Ngoài ra, cấu hình Gzip không chạy.
Nói khơi khơi vậy rồi thôi?
Bạn đã cấu hình như thế nào? Sao bạn biết nó không chạy?
Cấu hình theo như trên Google, nó không chạy thì là lỗi của Google? Mọi người phải có trách nhiệm fix giúp bạn?

5 Likes

Vì cậu đã biết lý thuyết, tớ chỉ đưa ra ví dụ thôi nhé!
Front-end

  • Các file HTML, code JS được cache trên browser của cậu. Điều này giúp browser không phải download toàn bộ resource đó về máy again and again.
  • HTML static, images resource… được cache trên CDN. Điều này giúp cho browser không phải chờ web server trả về các resource này, khi web server ở rất xa browser của cậu so với CDN.
  • Lưu cookie cũng là một dạng cache, khi cậu không cần phải xác thực ở tất cả các bước trong một session.

Back-end

  • User name được lưu ở heap, vậy nên không phải gọi tới database all-the-time để lấy user.
  • Một lượng dữ liệu không được thay đổi thường xuyên, được load vào in-memory cache, để giảm tần suất gọi tới database.
  • Một model nào đó được lưu trong redis, thay vì gọi lại database và xây dựng lại model, vì redis có tốc độ đọc nhanh hơn nhiều so với RDB.
  • Load hết file configuration vào bộ nhớ, thay vì mỗi lần cần config gì, phải đọc file configuration, vì việc mở file, load hết nội dung, parse configuration tương đối tốn kém.
  • Cache database response mechanism trong database, giúp database trả về kết quả nhanh hơn (nếu được enable).

Vì cậu không nói cậu đã làm gì, và gặp vấn đề gì, tớ vẫn sẽ stick với câu trả lời trước của tớ, cho tới khi cậu có mô tả rõ hơn về vấn đề này.


Bonus: đây là vấn đề của câu hỏi của cậu:

  • Dù có đọc kỹ thế nào, cậu không nói rõ cậu không hiểu phần nào. Vì cậu không làm điều đó, tất cả mọi người đều hiểu cậu không hiểu bất cứ thứ gì về cache, và @HR16 đã giải thích là định nghĩa một cách rất nice.
    Xong sau đó cậu bảo cậu biết lý thuyết rồi, cậu cần biết cách ứng dụng trong code. Sao cậu không nói điều đó ngay từ đầu? Chỉ một dòng “em có tìm hiểu về cache, và đã hiểu cache làm …, tuy nhiên, em muốn hỏi thêm về …”
    Ngoài ra, việc này cũng tương đối mâu thuẫn, vì nếu cậu hiểu nó là gì, cậu cũng nên hiểu ứng dụng của nó chứ? Nếu không, cậu chưa hiểu đâu!
  • Dù có đọc kỹ thế nào, cậu không nói cậu đã thử cấu hình apache để dùng Gzip compression ở câu hỏi. Vì cậu không làm điều đó, hẳn nhiên tất cả mọi người đều hiểu cậu chưa google, chưa thử gì. Đó là lý do tớ suggest cậu search google.
    Xong sau đó, cậu không nói rõ cậu đã thử cách gì, và gặp vấn đề gì. Cậu muốn mọi người đưa cho cậu một cách cậu đã làm, rồi nói “mình đã làm rồi, nhưng không được. Có cách khác không?” hả?
    Đấy đâu phải cách giải quyết vấn đề?
    Sao cậu không nói từ đầu, là “em muốn …, em đã thử solution …, nhưng gặp lỗi …, có cách nào để giải quyết được vấn đề này không?”

Cậu nên học cách trình bày rõ ràng và in detail. Điều đó sẽ giúp ích cho cậu trong công việc sau này rất nhiều, khi không ai hiểu nhầm ý cậu, và tiết kiệm thời gian cho tất cả mọi người, khi không phải hỏi lại, hoặc đưa thông tin mà cậu đã biết rồi.
Tớ hi vọng cậu sẽ sửa được việc này sớm, vì tớ đã gặp không biết bao nhiêu kỹ sư có khả năng trình bày vô cùng tồi tệ, họ chẳng làm được gì ngoài than vãn “sếp không hiểu ý mình”, và chẳng bao giờ có tiếng nói trong bất cứ việc gì vì không ai hiểu bạn ấy. Việc đó gần như đã giết chết sự nghiệp của họ, và tớ hi vọng cậu không lặp lại điều này.

6 Likes

Cảm ơn mn đã dành thời gian đóng góp ý kiến về câu hỏi của mình! Mình xin đóng topic ở đây vì ngẫm lại câu hỏi của mình nó không cụ thể khiến mn khó nhận biết chỗ khó của mình để giúp đỡ. Câu hỏi cụ thể hơn sẽ quay lại và vẫn mong mn ủng hộ

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?