Nén file hay file compression là một phần quan trọng cốt lỗi trong cách thức hoạt động của website. Nó cho phép chúng ta truyền tải dữ liệu file mà không cần phải tốn quá nhiều băng thông và thời gian. Bất cứ khi nào bạn muốn tải một file ZIP hoặc xem một bức ảnh JPGE từ website, nghĩa là bạn đang nhận được những lợi từ quá trình sử dụng nén file đấy.
Xem thêm: Chuyển đổi ảnh PNG sang JPG
Vậy nên đôi khi chúng ta tự hỏi: nén file hoạt động ra sao? Tiếp theo mình sẽ trình bày cho các bạn một cái nhìn tổng quan về hoạt động nén file.
Nén file là gì?
Nói một cách đơn giản, nén file (hoặc data compression) là hành động làm giảm kích cỡ của một file, trong khi vẫn có thể bảo tồn và phục vụ sử dụng các dữ liệu gốc. Cách thức này cho phép các file dữ liệu chiếm ít diện tích lưu trữ hơn, ngoài ra còn giúp truyền dữ liệu qua internet dễ dàng hơn nữa.
Điều quan trọng bạn cần lưu ý là hoạt động nén file chỉ có thể đạt được một giới hạn nhất định. Trong khi nén file thành dạng file ZIP giúp giảm kích cỡ file xuống, bạn không thể tiếp tục nén file đó thêm một lần nữa để giảm thêm kích cỡ.
Hiện nay tồn tại hai kiểu nén file
- Lossy compression
- Lossless compression
Kiểu nén lossy compression hoạt động ra sao?
Lossy compression (hay nén mất mát) giảm kích cỡ file bằng cách loại bỏ các bits thông tin không cần thiết. Hình thức phổ biến của lossy compression chính là hình ảnh như JPGE, MP3 – là hai ví dụ điển hình phổ biến nhất.
File MP3 không chứa tất cả thông tin audio từ bản ghi gốc, thay vì vậy, nó chỉ sử dụng và phát ra những âm thanh mà tai người có thể nghe được. Bạn sẽ không thể nào nhận biết được file MP3 bị thiếu hay mất mát dữ liệu ra sao, vì vậy, việc xóa thông tin dư thừa dẫn đến kích thước file thấp hơn mà không gặp phải bất kỳ nhược điểm nào.
Tương tự, file JPGE loại bỏ những những thành phần không quan trọng có trong bức ảnh. Chẳng hạn như trong một bức ảnh có bầu trời xanh ở trên, nén JPGE có thể sẽ thay đổi tất cả các pixel bầu trời thành một hoặc hai màu xanh lam – thay vì phải sử dụng cả chục màu sắc khác nhau để biểu diễn hình ảnh bầu trời xanh.
Tuy nhiên, khi bạn càng nén dữ liệu nhiều lần, chất lượng file nén so với file gốc sẽ dần bị giảm đi rõ rệt.
Lossy compression phù hợp khi file chứa nhiều thông tin hơn những gì bạn cần. Ví dụ bạn có một file hình ảnh ở dạng RAW được chụp từ máy ảnh. Trong khi bạn muốn duy trì chất lượng hình ảnh để in ra tấm banner lớn, nhưng nó chả là gì hay có tác dụng gì khi bạn upload file lên Facebook cả.
Bức ảnh chứa quá nhiều thông tin không phù hợp khi bạn xem chúng trên các trang mạng xã hội. Việc nén file hình ảnh thành định dạng JPEG sẽ loại bỏ một số thông tin, nhưng hình ảnh hầu như vẫn rất gần gũi với mắt người thường.
Lossy compression thường được sử dụng cho mục đích gì
Như mình đã đề cập bên trên, lossy compression là một cách tuyệt vời để giảm thiểu chi phí truyền tải cho hầu hết các kiểu dữ liệu. Bởi vậy, nó rất quan trọng cho các công ty sử dụng trao đổi lượng dữ liệu lớn như Netflix,… truyền tải các file thông tin khổng lồ liên tục. Bằng cách giảm kích cỡ file càng nhỏ càng tốt, trong khi vẫn duy trì chất lượng, giúp hoạt động của chúng trở nên hiệu quả hơn. Bạn có thể tưởng tượng rằng nếu mỗi video trên Youtube được lưu trữ và truyền đi ở định dạng ban đầu mà không được nén thì sẽ như thế nào?
Nhưng lossy compression không hoạt động tốt đối với các file dữ liệu được coi là chứa thông tin quan trọng. Chẳng hạn, sử dụng lossy compression trên file text hay bảng tính (Excel) sẽ dẫn đến việc file dữ liệu này không thể mở được hoặc sẽ bị cắt xén khi mở lại.
Khi lưu trữ dưới định dạng lossy, thường thì bạn sẽ có thể thiết lập mức độ nén sẽ đạt ở chất lượng bao nhiêu. Chẳng hạn, rất nhiều trình sửa ảnh có một thanh trượt để để chọn chất lượng ảnh sau khi nén từ 0-100.
Lưu trữ hình ảnh ở một mức độ nào đó như 80 hoặc 90% sẽ giảm kích cỡ của file khá nhiều, mắt người sẽ khó có thể nhân biết hết được. Nhưng việc nén và lưu file dữ liệu nhiều lần trên cùng một file với định dạng lossy sẽ làm giảm chất lượng hình ảnh so với ban đầu.
Kiểu nén lossless compression hoạt động ra sao?
Lossless compression là cách giảm kích cỡ file để tái cấu trúc dữ liệu thành một kiểu khác. Trái ngược với kiểu nén dữ liệu lossless, nó không loại bỏ bất kỳ thông tin nào. Thay vì vậy, lossless compression về cơ bản hoạt động bằng cách loại bỏ sự dư thừa trong dữ liệu.
Lấy một ví dụ đơn giảm minh họa, dưới đây là một ngăn xếp gồm 10 cục ghép hình, bao gồm 2 màu xanh, 5 màu vàng, và ba đỏ. Ngăn xếp này là một cách khá đơn giản để thể hiện những khối màu đó, nhưng có một cách khác để làm như vậy.
Thay vì sử dụng để hiển thị ra cả 10 khối ghép hình như ở trên, chúng ta có thể loại bỏ tất cả các khối chỉ để lại một khối để biểu thị cho mỗi loại màu sắc. Khi đó, nếu chúng ta sẽ dùng con số để biểu thị có bao nhiêu miếng xếp hình của mỗi màu, nghĩa là chúng ta đã thể hiện cùng một thông tin chính xác bằng số lượng miếng xếp hình ít hơn nhiều so với ban đầu. Thay vì dùng 10 miếng xếp hình, thì chúng ta chỉ cần sử dụng 3 miếng thôi.
Đây là một cách thể hiện khá đơn giản về cách lossless compression có thể được ứng dụng. Nó lưu trữ thông tin tương tự theo cách hiệu quả hơn nhiều bằng cách loại bỏ sự dư thừa.
Tiếp theo, hãy xem xét một ví dụ thực tế, trong chuỗi dữ liệu dưới đây:
ssssssssssssssssssssssaaaaaaaaffffffffffff
Bạn hoàn toàn có thể nén chuỗi bên trên thành
s22a8f12
Nó cho phép chúng ta sử dụng 8 ký tự để biểu thị 42 ký tự trên cùng dạng dữ liệu.