Ladění výkonu

Optimalizace vykreslování a paměti

Profil zdrojů Doconutu je ovládán třemi věcmi: render DPI, co zůstává v keši, a jak dlouho relace žijí. Tento průvodce popisuje páky v pořadí podle dopadu.

Rozlišení — největší páka

ImageResolution (25–300 DPI) určuje jak čas vykreslování, tak velikost obrázku. Většina formátů má výchozí hodnotu 200 DPI; obrázky a PSD mají výchozí 100.

csharp
// Náhled seznamu dokumentů nepotřebuje tiskovou kvalitu
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { ImageResolution = 100 });

Poloviční DPI přibližně čtvrtinuje počet pixelů na stránku — rychlejší vykreslování, menší přenosy, méně paměti v keši. Vyhraďte 250–300 DPI pro případy s častým přiblížením (CAD, technické výkresy).

Pro PDF s velkým množstvím vložených obrázků PdfConfig přidává jemnější ovládání: CompressImages + CompressQuality, ResizeImages + ResizeResolution a CompressFast. Pro běžné obrázky ImageConfig.MaxImagePixelSize (výchozí 3000 px) omezuje velikost výstupu.

Kešování stránek — paměť vs. pře‑vykreslování

BaseConfig.CachePages (výchozí true) uchovává každou vykreslenou stránku v paměti po celou dobu trvání relace. To je správné výchozí nastavení pro interaktivní prohlížení — uživatelé posouvají dopředu i dozadu. Vypněte to, když:

  • dokumenty jsou obrovské a jsou prohlíženy jednorázově, od začátku do konce,
  • mnoho souběžných relací by násobilo počet kešovaných stránek,
  • raději platíte CPU za každé zobrazení než držíte RAM.
csharp
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { CachePages = false });

Na klientovi ViewerConfig.CacheEnabled = true přednačítá malé posouvající se okno nadcházejících obrázků stránek v paměti prohlížeče. Jedná se o keš přednačítání pro konkrétní zobrazení, ne o trvalý localStorage.

Relace — paměť, kterou nevidíte

Každá otevřená relace drží parsovaný model dokumentu plus (s CachePages) jeho vykreslené stránky, dokud neuplyne posuvný TimeOut (výchozí 60 minut) od posledního požadavku. Dvě návyky udržují toto pod kontrolou:

  • Zavřete, s čím jste skončili. viewer.CloseDocument(token) uvolní engine okamžitě místo čekání na nečinné okno.
  • Nastavte vhodnou dobu timeoutu. Náhled, na který se uživatelé podívají dvě minuty, nepotřebuje hodinovou relaci:
csharp
var token = await viewer.OpenDocumentAsync(path, new DocOptions { TimeOut = 10 });

Pamatujte na kompromis: po vypršení platnosti widget zobrazí Document session not found. Please re-open document. — zvolte timeout, který odpovídá skutečným čtecím relacím.

Formátově specifické přepínače

  • Excel: MemoryOptimizationPreference je ve výchozím nastavení zapnutý a snižuje paměťovou náročnost při vykreslování velmi velkých sešitů — nechte jej zapnutý, nebo nastavte na false, pokud chcete vyměnit paměť za malý nárůst rychlosti; SheetNames / PrintArea omezují vykreslování na to, co je podstatné.
  • Režim přesměrování má počáteční náklad: DefaultRender = false převádí celý dokument do PDF při otevření. Získává nativní textové vyhledávání, ale u 500stránkového dokumentu volání otevření nese tuto konverzi — neaktivujte jej reflexivně.
  • Word/PowerPoint na serveru bez fontů dokumentů: Windows Server bez Office má mnohem méně fontů než vývojový počítač. Chybějící fonty způsobují pomalé hledání náhrad a špatné metriky; nainstalujte fonty, nebo nasměrujte FontFolders na složku, která je obsahuje.

Strategie na straně klienta

  • LargeDoc = true — strategie lazy-load pro velmi velké dokumenty; stránky se načítají, jak se uživatel k nim přibližuje.
  • AutoLoad = false (výchozí) — nevykreslujte, dokud skutečně nevoláte View(token).
  • ShowThumbs = false — přeskočte generování/požadavky na miniatury pro jednostránkové nebo vložené náhledy.
  • Povolení FixedZoom zabraňuje volným změnám zoomu; když mapujete C# ViewerConfig, nastavte FixedZoomPercentMobile (výchozí C# 75) pro malé obrazovky.

Spuštění jednou, ne při každém požadavku

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance) patří do Application_Start, vedle DoconutHost.Initialize — registrace kódování při každém požadavku je zbytečná práce; úplné zapomenutí na to rozbije dokumenty se starými kódovými stránkami.

První dokument po spuštění

Doconut načítá své dokumentové enginy při prvním otevření dokumentu v aplikaci — po spuštění fondu, po každém recyklování a v každé nové aplikační doméně. Toto první otevření je pomalejší než následující, a antivirus v reálném čase jej může výrazně zpomalit: enginy se načítají z paměti a Microsoft Defender skenuje tento kód při načítání. Vyloučení složky nepomůže, protože není zapojen žádný soubor.

Měřeno na 4jádrovém Windows Server 2022, otevření dvoustránkového Word dokumentu:

První dokumentKaždý další dokument
Defender v reálném čase zapnutýasi 70 s0.3–7.5 s, v závislosti na formátu
Defender v reálném čase vypnutý12–15 s0.3–7.5 s, v závislosti na formátu

Zaplaťte jednou, dříve než to udělají vaši uživatelé:

  • Udržujte pracovní proces aktivní: nastavte Start Mode aplikačního fondu na AlwaysRunning a zvýšte nebo vypněte jeho idle time-out, aby během klidné noci nebyly enginy vyloženy.
  • Nahřejte jej při startu: povolte IIS Application Initialization (preloadEnabled="true" na webu) a nasměrujte jeho initializationPage na vaši stránku, která otevře malý dokument. První skutečný uživatel tak najde enginy již načtené.
  • Dejte prvnímu požadavku čas: kontrola zdraví load balanceru nebo upstream proxy s krátkým timeoutem může vzdát se studeného startu, který by jinak uspěl.

Zda měnit nastavení antiviru na serveru, je rozhodnutí vašeho bezpečnostního týmu; výše uvedené nahřátí funguje i bez něj.

Aplikační fond

Na jednom serveru žijí relace dokumentů a kešované stránky v pracovním procesu. Každé recyklování aplikačního fondu — naplánované, úprava Web.config nebo idle time-out fondu (výchozí 20 minut v IIS) — je všechny odstraní a otevření prohlížeče pak zobrazí Document session not found. Please re-open document.

  • Slaďte idle time-out fondu a plán recyklace s tím, jak dlouho uživatelé skutečně čtou, nebo buďte připraveni znovu otevřít dokumenty po recyklaci.
  • Spusťte fond jako 64‑bitový proces (nechte Enable 32-Bit Applications vypnuté). Velké dokumenty potřebují adresní prostor, který 32‑bitový pracovní proces nemá.
  • Webfarm udržuje relace ve sdíleném úložišti, takže recyklace na jednom uzlu je neodstraní — viz Relace a zabezpečení.

Kontrolní seznam ladění

  1. Nastavte nejnižší ImageResolution, který vaše UX akceptuje.
  2. Nechte CachePages zapnutý pro interaktivní prohlížení; vypnutý pro jednorázové nebo vysoce souběžné scénáře.
  3. Explicitně zavírejte relace; zkrácením TimeOut tam, kde je používání burstové.
  4. Použijte LargeDoc + výchozí AutoLoad = false na klientovi pro velké dokumenty.
  5. Použijte DefaultRender = false pouze když potřebujete PDF projekci s textem.

Byla tato stránka užitečná?