Công cụ PDF phía máy chủ và phía client: cách mỗi loại hoạt động
Công cụ PDF phía máy chủ tải tệp của bạn lên máy tính của bên vận hành, xử lý ở đó rồi gửi kết quả về. Công cụ phía client thì ngược lại: nó tải chương trình về trình duyệt của bạn, và chương trình xử lý tệp ngay trên thiết bị của bạn. Ở trường hợp đầu, tài liệu của bạn đi xa; ở trường hợp sau, chỉ có code di chuyển.
Khác biệt duy nhất đó quyết định ai có thể nhìn thấy tệp của bạn. Nó cũng giải thích vì sao hai loại công cụ mang lại cảm giác khác nhau, hỏng theo những cách khác nhau và hợp với những việc khác nhau. Bài giải thích này đi qua những gì thực sự diễn ra ở mỗi loại, từng bước một.
Điều gì diễn ra trong công cụ phía máy chủ
- Bạn chọn một tệp. Trang web gửi nó qua internet đến máy chủ của bên vận hành, thường là một lượt tải lên qua HTTPS.
- Máy chủ lưu tệp, ít nhất là trên ổ đĩa hoặc trong bộ nhớ suốt thời gian xử lý, thường trong một hàng đợi cùng tệp của những người khác.
- Một chương trình trên máy chủ, như thư viện PDF, trình chuyển đổi hoặc bộ máy nhận dạng chữ, thực hiện công việc.
- Kết quả cũng được lưu lại, và trang web đưa bạn một liên kết để tải xuống.
- Cả hai tệp sẽ bị xóa sau đó, theo quy định lưu giữ riêng của bên vận hành.
Đây từng là cách thiết kế thực tế duy nhất. Trình duyệt khi đó chậm, và các thư viện đọc và ghi lại được PDF chỉ chạy trên máy chủ. Trình duyệt ngày nay chạy code phức tạp rất nhanh, và các thư viện PDF mã nguồn mở viết bằng JavaScript có thể làm hầu hết việc hằng ngày ngay trong một thẻ trình duyệt.
HTTPS bảo vệ bước 1 khỏi kẻ nghe lén. Bước 2 đến 5 phụ thuộc vào bên vận hành: bảo mật của họ, quyền truy cập của nhân viên, các bản sao lưu và nghĩa vụ pháp lý của họ ở quốc gia đặt máy chủ. Phần lớn bên vận hành xử lý việc này có trách nhiệm, nhưng bạn đang tin tưởng họ làm vậy.
Điều gì diễn ra trong công cụ phía client
- Bạn mở trang công cụ. Trình duyệt tải trang và JavaScript của nó về, giống như mọi trang web khác.
- Bạn chọn một tệp. File API của trình duyệt đọc tệp từ ổ đĩa vào bộ nhớ của thẻ. Không có gì được gửi đi.
- Code chạy trong thẻ thực hiện công việc. Phần nặng thường chạy trong Web Worker, một luồng chạy nền, để trang vẫn phản hồi nhanh.
- Kết quả được dựng trong bộ nhớ và giao cho bạn dưới dạng tệp tải xuống, qua một liên kết tạm trỏ đến bộ nhớ trong chính trình duyệt của bạn.
- Khi bạn đóng thẻ, bộ nhớ được giải phóng. Không có gì cần xóa ở nơi khác, vì không có gì được gửi đi.
Các công cụ PDF của Kopitiam hoạt động theo cách này. Chúng dùng pdf.js, bộ máy PDF mã nguồn mở của Mozilla, để đọc và vẽ trang, với bộ phân tích chạy trong một Web Worker. Chúng dùng pdf-lib, một thư viện mã nguồn mở khác, để dựng PDF mới. Cả hai đều chạy trong thẻ trình duyệt của bạn.
Vì sao công cụ phía client chạy được khi ngoại tuyến
Khi chương trình đã ở trong trình duyệt của bạn, nó không cần mạng để chạy. Đó là lý do cách thử ngoại tuyến có tác dụng: mở công cụ, tắt Wi-Fi, và công cụ vẫn tiếp tục chạy. Nếu nó thật sự tải tệp lên, nó sẽ báo lỗi ngay.
Có vài chi tiết đáng biết. Kopitiam khởi động worker của bộ máy PDF ngay khi trang công cụ mở ra, thay vì khi bạn thả tệp vào, nên các công cụ vẫn chạy nếu mất kết nối sau khi trang đã tải xong. Một số tính năng ít dùng hơn tải thêm code ở lần đầu bạn dùng, như bộ máy phông chữ cho chữ viết không thuộc hệ Latin. Đó là code đến với bạn, không phải tệp của bạn đi ra ngoài.
Giới hạn thật sự của việc xử lý phía client
Làm việc trên thiết bị của bạn có cái giá của nó, và một công cụ trung thực nên nói cho bạn biết.
- Bộ nhớ. Toàn bộ tệp nằm trong bộ nhớ của thẻ, thường là nhiều bản cùng lúc trong khi đang xử lý. Một bản scan 200 MB có thể cần gấp vài lần như vậy. Trình duyệt giới hạn bộ nhớ cho mỗi thẻ, và điện thoại giới hạn chặt nhất.
- Tốc độ. Laptop hoặc điện thoại của bạn làm việc, không phải một trung tâm dữ liệu. Kết xuất 400 trang thành ảnh, hay nén lại mọi ảnh trong một bản scan dài, mất lâu hơn thấy rõ trên thiết bị cũ.
- Pin và nhiệt. Một việc dài trên điện thoại khiến bộ xử lý chạy hết công suất trong một lúc.
- Việc khó. Một số việc dễ hơn nhiều với phần mềm trên máy chủ, như nhận dạng chữ trên kho bản scan lớn, hay chuyển đổi tệp Office phức tạp với bố cục chính xác. Nhiều công cụ vốn chạy phía client vẫn gửi riêng những việc đó lên máy chủ.
Trên thực tế, giới hạn dung lượng của công cụ phía client là thiết bị của bạn chứ không phải một con số trên trang bảng giá. Code của Kopitiam không đặt giới hạn dung lượng tệp, nên một tệp rất lớn hoặc chạy được, hoặc hết bộ nhớ. Tách tệp lớn trước, hoặc dùng trình duyệt trên máy tính thay vì điện thoại, thường sẽ xử lý được.
Hãy lấy ví dụ một bản scan 40 MB bạn cần nén để gửi email, qua kết nối di động chậm. Công cụ phía máy chủ phải tải lên đủ 40 MB rồi mới bắt đầu được, sau đó bạn tải kết quả về, nên phần lớn thời gian chờ là do mạng. Công cụ phía client bỏ qua cả hai lần truyền, nhưng chính điện thoại của bạn phải nén, việc có thể mất khá lâu với một bản scan dài. Không loại nào luôn nhanh hơn: điều đó tùy vào kết nối và thiết bị của bạn.
Kiểu lai, và những khẳng định cần đọc kỹ
Không phải công cụ nào cũng thuần một loại. Bạn sẽ gặp vài kiểu:
- Chủ yếu trên máy, một phần trên máy chủ. Việc đơn giản chạy trong trình duyệt, còn chuyển đổi hoặc nhận dạng chữ thì được tải lên. Hãy tìm thông tin cho từng công cụ, không phải một câu chung cho cả trang.
- Tải lên có mã hóa. Tệp được tải lên nhưng được mã hóa khi truyền và khi lưu. Như vậy tốt hơn là không có gì, nhưng máy chủ vẫn giải mã tệp để xử lý.
- Xử lý trên máy, lưu lên đám mây. Việc xử lý diễn ra trên máy, nhưng kết quả được lưu vào tài khoản của bạn để mở lại sau. Đó là một bản sao trên máy chủ, theo đúng thiết kế.
- Ứng dụng máy tính. Một chương trình cài đặt cũng là phía client, nhưng nó vẫn có thể gửi tệp hoặc dữ liệu sử dụng về nhà phát triển. Chính sách quyền riêng tư của nó vẫn quan trọng.
Cách kiểm tra bạn đang dùng loại nào
Mở công cụ dành cho nhà phát triển của trình duyệt (F12 trên hầu hết trình duyệt máy tính), vào thẻ Network và chạy một tệp thử qua công cụ. Công cụ phía máy chủ sẽ hiện một yêu cầu có kích thước gần bằng tệp của bạn gửi đi khi bạn bắt đầu. Công cụ phía client chỉ hiện các yêu cầu nhỏ, như quảng cáo hoặc tín hiệu phân tích, và không có yêu cầu nào lớn dần theo tệp của bạn. Làm cùng việc đó khi tắt Wi-Fi là phiên bản nhanh của cùng phép thử.
Nên chọn loại nào
Với hợp đồng, phiếu lương, giấy tờ y tế và bản scan giấy tờ tùy thân, phía client là lựa chọn mặc định tốt hơn: không có bản sao nào ở nơi khác để bị lộ hay bị giữ lại. Với tờ giới thiệu công khai hay thực đơn, loại nào cũng được. Khi bạn cần một việc mà trình duyệt làm không tốt, như nhận dạng chữ trên kho lưu trữ 2.000 trang, một công cụ phía máy chủ uy tín với chính sách lưu giữ rõ ràng là lựa chọn hợp lý, dùng cho tệp đó chứ không phải thành thói quen.
Câu hỏi thường gặp
- Công cụ PDF phía máy chủ và phía client khác nhau thế nào?
- Công cụ phía máy chủ tải tệp của bạn lên và xử lý trên máy tính của bên vận hành. Công cụ phía client gửi chương trình về trình duyệt và xử lý tệp ngay trên thiết bị của bạn, nên tệp không bao giờ bị tải lên.
- Xử lý PDF phía client có riêng tư hơn không?
- Có, vì không có bản sao nào của tệp ở đâu ngoài thiết bị của bạn. Một công cụ phía máy chủ có thể được vận hành tốt, nhưng bạn phụ thuộc vào bảo mật và quy định lưu giữ của nó trong suốt thời gian nó giữ tệp.
- Vì sao công cụ phía client gặp khó với PDF rất lớn?
- Toàn bộ tệp phải vừa trong bộ nhớ của thẻ trình duyệt, thường là nhiều lần trong khi xử lý. Điện thoại và laptop cũ có ít bộ nhớ dư hơn, nên một bản scan rất lớn có thể chạy chậm hoặc thất bại. Tách tệp trước thường giúp được.
- Nếu trang web có tải quảng cáo, nó có còn là phía client không?
- Vẫn có thể. Quảng cáo, phông chữ và công cụ phân tích là các yêu cầu nhỏ riêng biệt. Điều quan trọng là nội dung tệp của bạn có bao giờ bị gửi đi không, điều bạn có thể kiểm tra trong thẻ Network hoặc bằng cách thử ngoại tuyến.
- Kopitiam là phía máy chủ hay phía client?
- Các công cụ PDF của Kopitiam là phía client. Chúng dùng pdf.js và pdf-lib trong thẻ trình duyệt của bạn, tệp không bao giờ bị tải lên, và các công cụ vẫn chạy nếu mất kết nối sau khi trang đã tải xong.
