2014-09-16 58 views
9

Şu anda sahip olduğum büyük bir darboğaz, bir kişi sipariş verdiğinde PDF oluşturuyor. Tek bir sipariş için büyük bir anlaşma değil, ama kısa bir zaman diliminde çok fazla şey olduğunda, bu süreç çok yavaş.Görüntülerle PDF'lerin üretilmesi çok yavaş

PDF'de metin bilgisi, QR kodu, Barkod, logo ve 1 veya daha fazla (en fazla 20+) 1/4 genişliğinde resim olması gerekir.

Güncel süreç/DOMPDF w: PHP w/oluşturulan ve png olarak kaydedilir

  1. QR kod görüntüsü
  2. oluşturulan ve png olarak kaydedilir
  3. Barkod görüntü
  4. DOMPDF PDF
üretir

Yeni düşünce:

  1. HTML2PDF PDF oluşturur ve teorik olarak QR ve Barkod görüntüleri dikkat çekmek barkodları

üretmek için qr ve barkod etiketleri var kullanır ama yine de görüntülerin geri kalanı da bunu yapmak yavaş.

Bu şekilde, (QR ve Barkod) dışındaki herhangi bir resim olmadan PDF, ~ 500 ms'de üretilebilir, ancak görüntü eklemeye başlar başlamaz, 2, 3, 4, 5'e kadar gider Her biri + saniye.


testler ve sadece hayal kırıklığı içinde kapatmaya kadar (birkaç dakika içinde) işleme ~ 10k siparişler, hala 12 saat sonra etrafında PDF'leri işlerken zaman.

PDF ayrı kuyruk sürecinde oluşturulan, bu nedenle kişi sipariş verirken beklemek zorunda değildir, ama - onları yüksek trafik sırasında onay PDF almak için hala ... Bu 5+ saat alamaz .


Sorular/TLDR: Dinamik bir qr kod, dinamik bir barkod, dinamik metin ile PDF oluşturmaya benim sürecini nasıl yapabilirim

ve 1-20 statik görüntüler (görüntüler aynıdır tüm PDF'ler arasında daha hızlı?

Düşünmediğim başka potansiyel şeyler var mı? Belki bir şablon PDF oluşturmak ve bir şekilde dinamik noktaları doldurmak için PHP kullanıyoruz?

+0

DOMPDF GD kullanıyor? Tahminimce hayal gücünün daha hızlı olabileceğini düşünüyorum. Bununla birlikte, php'de çok sayıda görüntü içeren büyük pdfs'lerin işlenmesi yavaş ve bellek tüketiyor. Lateks dosyaları üreten ve daha sonra bunları pdf'ye yazdıran bir çözüm geliştirdik. Bunu da deneyebilirsin. Görüntü işleme için GD yerine imagick'i kullanmayı deneyebilirsiniz. Soru * geniş *, farklı çözümleri denemek ve karşılaştırmak zorunda kalacaksınız. "Doğru" bir cevap vermek mümkün olduğundan şüphe ediyorum. Geçerli kodunuzu da tam olarak nerede olduğunu görmek için profilinize bakmanız iyi bir fikir olabilir. – burzum

+0

NASIL daha spesifik olmak için herhangi bir öneri kesinlikle kabul edilir. Kesin bir "eksik bir yarı-kolon" türü yanıtı aramıyorum ama - süreci ve problemi detaylı olarak tanımladım ve her türlü öneriyi, düşünceyi, vb. Çok sevdim. Kaybettim ve tüm diğer kaynaklarımı harcadım. Burada sormaktan başka nereye gideceğinden emin değilim. :(Görüntülerle daha hızlı PDF oluşturmanın bir yolu olmalı.Hand Html2PDF ve DomPDF görüntüleri eklemeye başladığımda salyangoz gibi yavaştır.Ben belki de şablon fikrinin bazı haklara sahip olduğunu düşündüm, ama - ya orada bir şey bulamadım - – Dave

+0

Komut dosyanızı izleyin ve nerede yavaş olduğuna bakın, bunun görüntü manipülasyonu bölümüne bahse girerim.Onu geliştirmeye çalışın.Şimdi düşünebildiğim en iyisi.Lexx çözümünü de deneyebilirsiniz, o kadar da zor değil Örnek: https://www.sharelatex.com/learn/Inserting_Images Ancak, 7 yıl önce birçok fotoğraf belgesine sahip 21 sayfalık bir onarım raporu oluşturdum ve şu anda TCPDF (veya başka bir şeyle birlikte çalışıyordu)) Bu yüzden bugün de bunu yapmak mümkün olmalıdır.Ancak bir günde 10k raporları işlemek zorunda kalmadım. – burzum

cevap

4

TCPDF kitaplığını kullanmanızı öneririm. Oldukça hızlı ve CakePHP'ye kolayca entegre edilebilir. Görüntüleri, barkodları ve QR kodlarını PDF'ye TCPDF örnekleri page'da nasıl ekleyeceğinize dair birçok örnek bulabilirsiniz.

ayrıca this sayfadan performans kullanım ipuçları iyileştirmek için:

  • yükleyin ve XCache gibi bir PHP işlemkodu Cacher yapılandırmak;
  • düzenleme php.ini dosyası ve bir komut tüketebilir maksimum bellek miktarı (memory_limit) artış;
  • Düzenleme php.ini dosyası ve her bir komut dosyasının maksimum yürütme süresini artırın (max_execution_time);
  • config/tcpdf_config.php dosyasını düzenleyin: $ _SERVER ['DOCUMENT_ROOT'], K_PATH_MAIN ve K_PATH_URL sabitlerini manuel olarak ayarlayın ve otomatik hesaplama bölümünü kaldırın;
  • Tay dili kullanmıyorsanız, config/tcpdf_config.php dosyasını düzenleyin ve K_THAI_TOPCHARS sabitini false olarak ayarlayın;
  • Genişletilmiş karakterlere ihtiyacınız yoksa, config/tcpdf_config.php dosyasını düzenleyin ve varsayılan yazı tiplerini çekirdek yazı tiplerine ayarlayın;
  • UTF-8 Unicode'a ihtiyacınız yoksa, TCPDF yapıcısındaki $ unicode parametresini false değerine ve $ encoding parametresini 'ISO-8859-1' veya diğer karakter haritasına ayarlayın.
  • Varsayılan olarak TCPDF, yazı tipi alt kümesinin katıştırılmış Unicode TTF yazı tiplerinin boyutunu azaltmasına olanak tanır, bu işlem çok yavaş ve çok fazla bellek gerektirir, setFontSubsetting (false) yöntemini kullanarak kapatılabilir;
  • Mümkün olduğunda gömülü yazı tipleri yerine çekirdek yazı tiplerini kullanın;
  • Kesinlikle gerekli değilse, HTML sözdizimini (writeHTML ve writeHTMLCell yöntemleri) kullanmaktan kaçının;
  • Büyük boyutlu HTML bloklarını daha küçük parçalara ayırın;
  • Kesinlikle gerekli olmadıkça işlemleri kullanmaktan kaçının;
  • Web sunucusunu değişikliklerden sonra yeniden başlatın.

kabul edilebilir seviyeye performansını artırmak yoksa daha mevcut kaynaklarla ikinci sunucuda (o CakePHP'yi kullanmıyorsa PDF'leri üretimini çalıştırır veya sadece senaryoyu) CakePHP uygulamasını yükleyebilirsiniz ve bu sunucuyu sadece PDF oluşturma için kullanın.

+1

Detay için çok teşekkürler. Birkaç kişinin "hızlı" olduğunu söylediğini duydum, ama bunu yedeklemek için herhangi bir veri buldun mu? Çalışırsa en kısa sürede TCPDF'yi deneyecek ve cevap olarak işaretleyecektir! :) – Dave