2014-09-16 18 views
9

Một nút cổ chai lớn mà tôi có lúc này là tạo PDF mỗi khi có ai đó đặt hàng. Nó không phải là một việc lớn đối với một đơn hàng, nhưng khi có rất nhiều trong một khung thời gian ngắn, quá trình này rất chậm.Tạo các tệp PDF có hình ảnh quá chậm

PDF cần thông tin văn bản, mã QR, mã vạch, biểu trưng và 1 hoặc nhiều hơn (tối đa 20+) hình ảnh 1/4 chiều rộng.

quá trình hiện tại w/DOMPDF:

  1. code hình ảnh QR tạo w/PHP và lưu lại dưới dạng png
  2. Bar code hình ảnh được tạo ra và lưu lại dưới dạng png
  3. DOMPDF tạo PDF

Tư tưởng mới:

  1. html2pdf tạo PDF, và sử dụng nó qr và mã vạch thẻ để tạo ra mã vạch

Đó lý thuyết sẽ chăm sóc những hình ảnh QR và mã vạch, nhưng vẫn còn, phần còn lại của hình ảnh làm cho nó quá chậm.

Làm theo cách này, không có bất kỳ hình ảnh nào ngoài mã QR và mã vạch, PDF có thể tạo ra ~ 500 mili giây, nhưng ngay sau khi tôi bắt đầu thêm hình ảnh, nó sẽ lên tới 2, 3, 4, 5 + giây mỗi lần.


Khi chạy thử nghiệm và xử lý ~ 10 nghìn đơn hàng (trong vài phút), nó vẫn đang xử lý các tệp PDF khoảng 12 giờ sau đó cho đến khi tôi tắt nó đi.

PDF được tạo trong một quy trình xếp hàng riêng biệt, vì vậy người đó không phải đợi khi đặt hàng, nhưng - vẫn ... không thể mất hơn 5 giờ để họ nhận được xác nhận PDF trong khi lưu lượng truy cập cao .


Câu hỏi/TLDR:

Làm thế nào tôi có thể làm cho quá trình của tôi về tạo file PDF với một mã qr năng động, một mã vạch năng động, văn bản động, và 1-20 hình ảnh tĩnh (hình ảnh là như nhau trên tất cả các tệp PDF) nhanh hơn?

Có những thứ tiềm năng khác mà tôi chưa từng nghĩ tới không? Có thể làm một mẫu PDF và bằng cách nào đó sử dụng PHP để chỉ cần điền vào các điểm năng động?

+0

DOMPDF đang sử dụng GD? Tôi đoán tưởng tượng có thể nhanh hơn. Tuy nhiên, việc xử lý các tệp pdf khổng lồ với nhiều hình ảnh trong php chậm và tốn bộ nhớ. Chúng tôi đã triển khai giải pháp tạo tệp mủ và sau đó in chúng sang pdf. Bạn có thể thử điều đó. Để xử lý hình ảnh, bạn có thể thử sử dụng imagick thay vì GD. Câu hỏi * là * rộng, bạn sẽ phải thử và đánh giá các giải pháp khác nhau. Tôi nghi ngờ có thể đưa ra câu trả lời "đúng". Nó có thể là một ý tưởng tốt để hồ sơ mã hiện tại của bạn cũng như để xem chính xác nó là chậm. – burzum

+0

Bất kỳ đề xuất nào về CÁCH cụ thể hơn chắc chắn được chào đón. Tôi không tìm kiếm một câu trả lời "bạn đang thiếu dấu chấm phẩy" cho chắc chắn, nhưng - tôi đã mô tả chi tiết về quy trình và vấn đề và sẽ yêu thích bất kỳ đề xuất, ý tưởng ... v.v. Tôi đang thua lỗ và đã chi hết tất cả các tài nguyên khác của mình. Không chắc chắn nơi nào khác để đi khác hơn là hỏi ở đây. :(Phải có một số cách để tạo file PDF với hình ảnh nhanh hơn, cả hai Html2PDF và DomPDF đều chậm như ốc sên khi tôi bắt đầu thêm hình ảnh. Tôi nghĩ có lẽ ý tưởng mẫu có một số công đức, nhưng - không thể tìm thấy bất cứ thứ gì ở đó. – Dave

+0

Hồ sơ kịch bản của bạn và xem nơi nó là chậm, tôi đặt cược vào phần thao tác hình ảnh của nó.Sau đó cố gắng cải thiện nó.Đó là tốt nhất tôi có thể nghĩ ngay bây giờ.Bạn có thể thử các giải pháp cao su là tốt, nó không phải là khó Ví dụ: https://www.sharelatex.com/learn/Inserting_Images Tuy nhiên tôi đã tạo một báo cáo sửa chữa 21 trang với nhiều tài liệu ảnh 7 năm trước và nó hoạt động tốt tại thời điểm này với TCPDF (hoặc cái gì khác Tôi không thể xử lý 10k báo cáo mỗi ngày – burzum

Trả lời

4

Tôi đặc biệt khuyên bạn nên sử dụng thư viện TCPDF. Nó khá nhanh và có thể dễ dàng tích hợp vào CakePHP. Bạn có thể tìm thấy rất nhiều ví dụ về cách bao gồm hình ảnh, mã vạch và mã QR vào PDF tại các ví dụ TCPDF page.

Tiếp tục hoàn thiện các thủ thuật sử dụng hiệu suất từ ​​this page:

  • Cài đặt và cấu hình một cacher PHP opcode như XCache;
  • Chỉnh sửa tệp php.ini và tăng số lượng bộ nhớ tối đa mà tập lệnh có thể tiêu thụ (memory_limit);
  • Chỉnh sửa php.tập tin ini và tăng thời gian thực hiện tối đa của mỗi tập lệnh (max_execution_time);
  • Chỉnh sửa tệp cấu hình/tcpdf_config.php: đặt thủ công các hằng số $ _SERVER ['DOCUMENT_ROOT'], K_PATH_MAIN và K_PATH_URL và xóa phần tính toán tự động;
  • Nếu bạn không sử dụng ngôn ngữ Thái Lan, hãy chỉnh sửa tệp config/tcpdf_config.php và đặt hằng số K_THAI_TOPCHARS thành sai;
  • Nếu bạn không cần ký tự mở rộng, hãy chỉnh sửa tệp config/tcpdf_config.php và đặt phông chữ mặc định thành phông chữ chính;
  • Nếu bạn không cần Unicode UTF-8, hãy đặt thông số $ unicode trên hàm khởi tạo TCPDF thành false và tham số $ encoding thành 'ISO-8859-1' hoặc bản đồ ký tự khác.
  • Theo mặc định TCPDF cho phép phông chữ để giảm kích thước của phông chữ Unicode TTF được nhúng, quá trình này, rất chậm và đòi hỏi nhiều bộ nhớ, có thể được tắt bằng phương thức setFontSubsetting (false);
  • Sử dụng phông chữ chính thay vì phông chữ được nhúng bất cứ khi nào có thể;
  • Tránh sử dụng cú pháp HTML (viết các phương thức writeHTML và writeHTMLCell) nếu không được yêu cầu nghiêm ngặt;
  • Tách các khối HTML lớn thành các phần nhỏ hơn;
  • Tránh sử dụng giao dịch nếu không được yêu cầu nghiêm ngặt;
  • Khởi động lại máy chủ web sau khi thay đổi.

Nếu điều đó không cải thiện hiệu suất ở mức có thể chấp nhận, bạn có thể cài đặt ứng dụng CakePHP của mình (hoặc chỉ kịch bản chạy tệp PDF nếu không sử dụng CakePHP) trên máy chủ thứ hai. và chỉ sử dụng máy chủ đó để tạo PDF.

+1

Cảm ơn rất nhiều về chi tiết. Tôi đã nghe một vài người đề cập đến nó là "nhanh", nhưng bạn có tìm thấy bất kỳ dữ liệu nào để sao lưu dữ liệu đó không? Sẽ thử TCPDF càng sớm càng tốt và đánh dấu là câu trả lời nếu nó hoạt động! :) – Dave

Các vấn đề liên quan