[{"data":1,"prerenderedAt":802},["ShallowReactive",2],{"navigation_docs":3,"-versions-1-1-1-use-cases-performance-engineering":282,"-versions-1-1-1-use-cases-performance-engineering-surround":797},[4,63,109,175],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":62},"API","i-lucide-braces","\u002Fapi","api",[10,14,18,22,26,30,34,38,42,46,50,54,58],{"title":11,"path":12,"stem":13},"Html2Pdf Component","\u002Fapi\u002Fcomponent","api\u002F01.component",{"title":15,"path":16,"stem":17},"Core Props","\u002Fapi\u002Fprops","api\u002F02.props",{"title":19,"path":20,"stem":21},"PDF Headers in Vue","\u002Fapi\u002Fheaders","api\u002F03.headers",{"title":23,"path":24,"stem":25},"PDF Footers in Vue","\u002Fapi\u002Ffooters","api\u002F04.footers",{"title":27,"path":28,"stem":29},"Security","\u002Fapi\u002Fsecurity","api\u002F05.security",{"title":31,"path":32,"stem":33},"Watermarks","\u002Fapi\u002Fwatermarks","api\u002F06.watermarks",{"title":35,"path":36,"stem":37},"Metadata & Compression","\u002Fapi\u002Fmetadata-compression","api\u002F07.metadata-compression",{"title":39,"path":40,"stem":41},"Programmatic API","\u002Fapi\u002Fprogrammatic-api","api\u002F08.programmatic-api",{"title":43,"path":44,"stem":45},"Loader, Progress, Metrics, Events & Slots","\u002Fapi\u002Fevents-slots","api\u002F09.events-slots",{"title":47,"path":48,"stem":49},"TypeScript","\u002Fapi\u002Ftypescript","api\u002F10.typescript",{"title":51,"path":52,"stem":53},"PDF Styling & data-pdf-ignore","\u002Fapi\u002Fpdf-styling","api\u002F11.pdf-styling",{"title":55,"path":56,"stem":57},"API Reference","\u002Fapi\u002Ffull-reference","api\u002F12.full-reference",{"title":59,"path":60,"stem":61},"Compose Existing PDF Pages","\u002Fapi\u002Fcomposition","api\u002F13.composition",false,{"title":64,"icon":65,"path":66,"stem":67,"children":68,"page":62},"Get Started","i-lucide-book-open","\u002Fget-started","get-started",[69,73,77,81,85,89,93,97,101,105],{"title":70,"path":71,"stem":72},"Introduction","\u002Fget-started\u002Fintroduction","get-started\u002F01.introduction",{"title":74,"path":75,"stem":76},"Installation","\u002Fget-started\u002Finstallation","get-started\u002F02.installation",{"title":78,"path":79,"stem":80},"Quick Start","\u002Fget-started\u002Fquick-start","get-started\u002F03.quick-start",{"title":82,"path":83,"stem":84},"Rendering Modes","\u002Fget-started\u002Frendering-modes","get-started\u002F04.rendering-modes",{"title":86,"path":87,"stem":88},"Component Registration","\u002Fget-started\u002Fregistration","get-started\u002F05.registration",{"title":90,"path":91,"stem":92},"Preview & Download","\u002Fget-started\u002Fpreview-download","get-started\u002F06.preview-download",{"title":94,"path":95,"stem":96},"Smart PDF Pagination","\u002Fget-started\u002Fpagination","get-started\u002F07.pagination",{"title":98,"path":99,"stem":100},"Nuxt 3 & Nuxt 4 SSR","\u002Fget-started\u002Fnuxt-ssr","get-started\u002F08.nuxt-ssr",{"title":102,"path":103,"stem":104},"Migration Guide","\u002Fget-started\u002Fmigration","get-started\u002F09.migration",{"title":106,"path":107,"stem":108},"PDF Paper Formats and Orientation","\u002Fget-started\u002Fpaper-formats","get-started\u002F10.paper-formats",{"title":110,"icon":111,"path":112,"stem":113,"children":114,"page":62},"Use Cases","i-lucide-flask-conical","\u002Fuse-cases","use-cases",[115,119,123,127,131,135,139,143,147,151,155,159,163,167,171],{"title":116,"path":117,"stem":118},"Playground","\u002Fuse-cases\u002Fplayground","use-cases\u002F01.playground",{"title":120,"path":121,"stem":122},"Selectable Text Mode","\u002Fuse-cases\u002Fselectable-text","use-cases\u002F02.selectable-text",{"title":124,"path":125,"stem":126},"Clickable PDF Links","\u002Fuse-cases\u002Fclickable-links","use-cases\u002F03.clickable-links",{"title":128,"path":129,"stem":130},"Images & CORS","\u002Fuse-cases\u002Fimages-cors","use-cases\u002F04.images-cors",{"title":132,"path":133,"stem":134},"Production Guide","\u002Fuse-cases\u002Fproduction-guide","use-cases\u002F05.production-guide",{"title":136,"path":137,"stem":138},"Troubleshooting","\u002Fuse-cases\u002Ftroubleshooting","use-cases\u002F06.troubleshooting",{"title":140,"path":141,"stem":142},"Testing & Browser Support","\u002Fuse-cases\u002Ftesting-browser-support","use-cases\u002F07.testing-browser-support",{"title":144,"path":145,"stem":146},"Performance Engineering","\u002Fuse-cases\u002Fperformance-engineering","use-cases\u002F08.performance-engineering",{"title":148,"path":149,"stem":150},"Full Performance Engineering Report","\u002Fuse-cases\u002Fperformance-report","use-cases\u002F09.performance-report",{"title":152,"path":153,"stem":154},"Community & Feedback","\u002Fuse-cases\u002Fcommunity","use-cases\u002F10.community",{"title":156,"path":157,"stem":158},"Acknowledgements","\u002Fuse-cases\u002Facknowledgements","use-cases\u002F11.acknowledgements",{"title":160,"path":161,"stem":162},"Fonts, Charts, SVG and Image Optimization","\u002Fuse-cases\u002Fmedia-typography","use-cases\u002F12.media-typography",{"title":164,"path":165,"stem":166},"PDF Generation Flow","\u002Fuse-cases\u002Fproject-flow","use-cases\u002F13.project-flow",{"title":168,"path":169,"stem":170},"Ask the vue-pdf-export documentation","\u002Fuse-cases\u002Fask-docs","use-cases\u002F14.ask-docs",{"title":172,"path":173,"stem":174},"Vue to PDF in Vue 3 and Nuxt","\u002Fuse-cases\u002Fvue-to-pdf","use-cases\u002F14.vue-to-pdf",{"title":176,"path":177,"stem":178,"children":179,"page":62},"Versions","\u002Fversions","versions",[180,252],{"title":181,"path":182,"stem":183,"children":184},"v1 Documentation","\u002Fversions\u002F1.1.1","versions\u002F1.1.1\u002Findex",[185,186,218,232],{"title":181,"path":182,"stem":183},{"title":187,"path":188,"stem":189,"children":190,"page":62},"Api","\u002Fversions\u002F1.1.1\u002Fapi","versions\u002F1.1.1\u002Fapi",[191,194,197,201,205,208,211,214],{"title":11,"path":192,"stem":193},"\u002Fversions\u002F1.1.1\u002Fapi\u002Fcomponent","versions\u002F1.1.1\u002Fapi\u002F01.component",{"title":15,"path":195,"stem":196},"\u002Fversions\u002F1.1.1\u002Fapi\u002Fprops","versions\u002F1.1.1\u002Fapi\u002F02.props",{"title":198,"path":199,"stem":200},"Headers","\u002Fversions\u002F1.1.1\u002Fapi\u002Fheaders","versions\u002F1.1.1\u002Fapi\u002F03.headers",{"title":202,"path":203,"stem":204},"Footers","\u002Fversions\u002F1.1.1\u002Fapi\u002Ffooters","versions\u002F1.1.1\u002Fapi\u002F04.footers",{"title":39,"path":206,"stem":207},"\u002Fversions\u002F1.1.1\u002Fapi\u002Fprogrammatic-api","versions\u002F1.1.1\u002Fapi\u002F08.programmatic-api",{"title":43,"path":209,"stem":210},"\u002Fversions\u002F1.1.1\u002Fapi\u002Fevents-slots","versions\u002F1.1.1\u002Fapi\u002F09.events-slots",{"title":47,"path":212,"stem":213},"\u002Fversions\u002F1.1.1\u002Fapi\u002Ftypescript","versions\u002F1.1.1\u002Fapi\u002F10.typescript",{"title":215,"path":216,"stem":217},"Full README Reference","\u002Fversions\u002F1.1.1\u002Fapi\u002Ffull-reference","versions\u002F1.1.1\u002Fapi\u002F12.full-reference",{"title":64,"path":219,"stem":220,"children":221,"page":62},"\u002Fversions\u002F1.1.1\u002Fget-started","versions\u002F1.1.1\u002Fget-started",[222,225,228],{"title":70,"path":223,"stem":224},"\u002Fversions\u002F1.1.1\u002Fget-started\u002Fintroduction","versions\u002F1.1.1\u002Fget-started\u002F01.introduction",{"title":82,"path":226,"stem":227},"\u002Fversions\u002F1.1.1\u002Fget-started\u002Frendering-modes","versions\u002F1.1.1\u002Fget-started\u002F04.rendering-modes",{"title":229,"path":230,"stem":231},"Pagination","\u002Fversions\u002F1.1.1\u002Fget-started\u002Fpagination","versions\u002F1.1.1\u002Fget-started\u002F07.pagination",{"title":110,"path":233,"stem":234,"children":235,"page":62},"\u002Fversions\u002F1.1.1\u002Fuse-cases","versions\u002F1.1.1\u002Fuse-cases",[236,239,242,245,248],{"title":116,"path":237,"stem":238},"\u002Fversions\u002F1.1.1\u002Fuse-cases\u002Fplayground","versions\u002F1.1.1\u002Fuse-cases\u002F01.playground",{"title":136,"path":240,"stem":241},"\u002Fversions\u002F1.1.1\u002Fuse-cases\u002Ftroubleshooting","versions\u002F1.1.1\u002Fuse-cases\u002F06.troubleshooting",{"title":140,"path":243,"stem":244},"\u002Fversions\u002F1.1.1\u002Fuse-cases\u002Ftesting-browser-support","versions\u002F1.1.1\u002Fuse-cases\u002F07.testing-browser-support",{"title":144,"path":246,"stem":247},"\u002Fversions\u002F1.1.1\u002Fuse-cases\u002Fperformance-engineering","versions\u002F1.1.1\u002Fuse-cases\u002F08.performance-engineering",{"title":249,"path":250,"stem":251},"Vue HTML to PDF Examples","\u002Fversions\u002F1.1.1\u002Fuse-cases\u002Fvue-html-to-pdf","versions\u002F1.1.1\u002Fuse-cases\u002F12.vue-html-to-pdf",{"title":253,"path":254,"stem":255,"children":256},"Full References by Package Version","\u002Fversions\u002Ffull-references","versions\u002Ffull-references\u002Findex",[257,258,264,270,276],{"title":253,"path":254,"stem":255},{"title":259,"path":260,"stem":261,"children":262},"vue-pdf-export 1.1.1 Full Reference","\u002Fversions\u002Ffull-references\u002F1.1.1","versions\u002Ffull-references\u002F1.1.1\u002Findex",[263],{"title":259,"path":260,"stem":261},{"title":265,"path":266,"stem":267,"children":268},"vue-pdf-export 1.2.0 Full Reference","\u002Fversions\u002Ffull-references\u002F1.2.0","versions\u002Ffull-references\u002F1.2.0\u002Findex",[269],{"title":265,"path":266,"stem":267},{"title":271,"path":272,"stem":273,"children":274},"vue-pdf-export 1.2.1 Full Reference","\u002Fversions\u002Ffull-references\u002F1.2.1","versions\u002Ffull-references\u002F1.2.1\u002Findex",[275],{"title":271,"path":272,"stem":273},{"title":277,"path":278,"stem":279,"children":280},"vue-pdf-export 1.3.0 Full Reference","\u002Fversions\u002Ffull-references\u002F1.3.0","versions\u002Ffull-references\u002F1.3.0\u002Findex",[281],{"title":277,"path":278,"stem":279},{"id":283,"title":144,"body":284,"description":788,"extension":789,"links":790,"meta":791,"navigation":792,"path":246,"seo":793,"stem":247,"__hash__":796},"docs\u002Fversions\u002F1.1.1\u002Fuse-cases\u002F08.performance-engineering.md",{"type":285,"value":286,"toc":778},"minimark",[287,291,296,342,346,501,505,596,604,608,737,740,744,751,761,764,768,771],[288,289,290],"p",{},"The large-document milestone was not only a benchmark exercise. It changed the runtime architecture and added repeatable correctness, cleanup and memory diagnostics.",[292,293,295],"h2",{"id":294},"executive-outcome","Executive outcome",[297,298,299,303,306,309,312,315,333,336,339],"ul",{},[300,301,302],"li",{},"paginated Canvas documents can render page by page instead of one giant document-height canvas",[300,304,305],{},"50-page and 100-page Canvas exports are verified as real, non-empty PDFs on the incremental path",[300,307,308],{},"static HTML footer content is rasterized once and reused across pages",[300,310,311],{},"selectable-text mode caches repeated image sources within one generation",[300,313,314],{},"long work can be cancelled and then safely regenerated",[300,316,317,318,322,323,322,326,329,330],{},"progress can expose ",[319,320,321],"code",{},"stage",", ",[319,324,325],{},"progress",[319,327,328],{},"currentPage"," and ",[319,331,332],{},"totalPages",[300,334,335],{},"temporary DOM, Canvas backing stores and encoded image references are released earlier",[300,337,338],{},"browser yielding was added between expensive chunks",[300,340,341],{},"encrypted raster memory retention was isolated and reproduced directly in jsPDF",[292,343,345],{"id":344},"phase-map","Phase map",[347,348,349,365],"table",{},[350,351,352],"thead",{},[353,354,355,359,362],"tr",{},[356,357,358],"th",{},"Phase",[356,360,361],{},"Focus",[356,363,364],{},"Result",[366,367,368,380,391,402,413,424,435,446,457,468,479,490],"tbody",{},[353,369,370,374,377],{},[371,372,373],"td",{},"Phase 1",[371,375,376],{},"Benchmark\u002Fstress foundation",[371,378,379],{},"Actual page count, Blob size, Canvas geometry, timing, memory and progress telemetry.",[353,381,382,385,388],{},[371,383,384],{},"Phase 2.1",[371,386,387],{},"Static HTML footer bottleneck",[371,389,390],{},"Render once + reuse; major time, output-size and heap reductions in the fixture.",[353,392,393,396,399],{},[371,394,395],{},"Phase 2.2",[371,397,398],{},"Clean memory isolation",[371,400,401],{},"Fresh-context methodology separated temporary peaks from retained heap.",[353,403,404,407,410],{},[371,405,406],{},"Phase 2.3A",[371,408,409],{},"Security isolation",[371,411,412],{},"Basic user-password encryption identified as the trigger for high raster retention.",[353,414,415,418,421],{},[371,416,417],{},"Phase 2.3B",[371,419,420],{},"Large-PDF correctness",[371,422,423],{},"Page count alone was proven insufficient; Blob size and Canvas telemetry were added.",[353,425,426,429,432],{},[371,427,428],{},"Phase 2.4",[371,430,431],{},"Scaling and cliff diagnostics",[371,433,434],{},"Raster payload + jsPDF encryption pattern isolated; legacy long-canvas failure instrumented.",[353,436,437,440,443],{},[371,438,439],{},"Phase 3.1",[371,441,442],{},"Incremental Canvas",[371,444,445],{},"Page-bounded captures replaced the giant capture for paginated Canvas documents.",[353,447,448,451,454],{},[371,449,450],{},"Phase 3.2",[371,452,453],{},"Security re-test",[371,455,456],{},"Giant-canvas issue addressed; encrypted-raster retention remained dependency-level.",[353,458,459,462,465],{},[371,460,461],{},"Phase 3.2.1",[371,463,464],{},"Raw jsPDF reproduction",[371,466,467],{},"Strongest retention pattern reproduced without Vue component lifecycle.",[353,469,470,473,476],{},[371,471,472],{},"Phase 3.3",[371,474,475],{},"Cancellation + progress",[371,477,478],{},"Cooperative cancellation, recovery and current-page progress added.",[353,480,481,484,487],{},[371,482,483],{},"Phase 3.4",[371,485,486],{},"Repeated assets + cleanup",[371,488,489],{},"Per-generation image cache and shorter DOM\u002FCanvas lifetimes.",[353,491,492,495,498],{},[371,493,494],{},"Phase 3.5",[371,496,497],{},"Routing regression hardening",[371,499,500],{},"Correct incremental Canvas branch restored and protected by 50\u002F100-page E2E tests.",[292,502,504],{"id":503},"headline-measured-results","Headline measured results",[347,506,507,524],{},[350,508,509],{},[353,510,511,514,518,521],{},[356,512,513],{},"Metric",[356,515,517],{"align":516},"right","Before",[356,519,520],{"align":516},"After",[356,522,523],{"align":516},"Improvement",[366,525,526,540,554,568,582],{},[353,527,528,531,534,537],{},[371,529,530],{},"HTML footer, no logo",[371,532,533],{"align":516},"7.82 s",[371,535,536],{"align":516},"1.43 s",[371,538,539],{"align":516},"~81.7% less time \u002F 5.47× faster",[353,541,542,545,548,551],{},[371,543,544],{},"HTML footer + logo",[371,546,547],{"align":516},"11.81 s",[371,549,550],{"align":516},"1.29 s",[371,552,553],{"align":516},"~89.1% less time \u002F 9.16× faster",[353,555,556,559,562,565],{},[371,557,558],{},"Footer-heavy PDF",[371,560,561],{"align":516},"~46.7 MB",[371,563,564],{"align":516},"~1.0 MB",[371,566,567],{"align":516},"~97.9% smaller",[353,569,570,573,576,579],{},[371,571,572],{},"No-logo peak heap",[371,574,575],{"align":516},"102.6 MB",[371,577,578],{"align":516},"26.5 MB",[371,580,581],{"align":516},"~74.2% lower",[353,583,584,587,590,593],{},[371,585,586],{},"Giant Canvas capture geometry",[371,588,589],{"align":516},"~99.96M px",[371,591,592],{"align":516},"~1.74M px\u002Fpage",[371,594,595],{"align":516},"~98.26% lower peak capture area",[288,597,598,599,603],{},"These percentages describe specific benchmark fixtures or capture geometry; they are ",[600,601,602],"strong",{},"not"," universal whole-package speed or memory guarantees.",[292,605,607],{"id":606},"current-incremental-canvas-correctness","Current incremental Canvas correctness",[347,609,610,629],{},[350,611,612],{},[353,613,614,617,620,623,626],{},[356,615,616],{"align":516},"Requested pages",[356,618,619],{"align":516},"Actual pages",[356,621,622],{"align":516},"Time",[356,624,625],{"align":516},"PDF size",[356,627,628],{},"Largest encoded Canvas",[366,630,631,647,662,677,692,707,722],{},[353,632,633,636,638,641,644],{},[371,634,635],{"align":516},"10",[371,637,635],{"align":516},[371,639,640],{"align":516},"1.53 s",[371,642,643],{"align":516},"1.5 MB",[371,645,646],{},"1191 × 1461",[353,648,649,652,654,657,660],{},[371,650,651],{"align":516},"25",[371,653,651],{"align":516},[371,655,656],{"align":516},"4.33 s",[371,658,659],{"align":516},"3.9 MB",[371,661,646],{},[353,663,664,667,669,672,675],{},[371,665,666],{"align":516},"40",[371,668,666],{"align":516},[371,670,671],{"align":516},"7.54 s",[371,673,674],{"align":516},"6.2 MB",[371,676,646],{},[353,678,679,682,684,687,690],{},[371,680,681],{"align":516},"50",[371,683,681],{"align":516},[371,685,686],{"align":516},"9.68 s",[371,688,689],{"align":516},"7.8 MB",[371,691,646],{},[353,693,694,697,699,702,705],{},[371,695,696],{"align":516},"60",[371,698,696],{"align":516},[371,700,701],{"align":516},"12.56 s",[371,703,704],{"align":516},"9.3 MB",[371,706,646],{},[353,708,709,712,714,717,720],{},[371,710,711],{"align":516},"75",[371,713,711],{"align":516},[371,715,716],{"align":516},"16.87 s",[371,718,719],{"align":516},"11.7 MB",[371,721,646],{},[353,723,724,727,729,732,735],{},[371,725,726],{"align":516},"100",[371,728,726],{"align":516},[371,730,731],{"align":516},"25.25 s",[371,733,734],{"align":516},"15.8 MB",[371,736,646],{},[288,738,739],{},"The maximum encoded Canvas remained page-sized as the requested page count increased.",[292,741,743],{"id":742},"encrypted-raster-pdfs","Encrypted raster PDFs",[288,745,746,747,750],{},"The strongest high-retention behavior was reproduced with raw jsPDF, so the project documents it as ",[600,748,749],{},"memory retention"," rather than mislabeling it as a permanent Vue memory leak.",[288,752,753,754],{},"Upstream issue: ",[755,756,760],"a",{"href":757,"rel":758},"https:\u002F\u002Fgithub.com\u002Fparallax\u002FjsPDF\u002Fissues\u002F4017",[759],"nofollow","jsPDF #4017 - encrypted raster PDF memory retention",[288,762,763],{},"For large text-heavy secured documents whose CSS is supported by the vector renderer, selectable-text mode can be much lighter than raster Canvas mode. This is workload-dependent, not a universal renderer benchmark.",[292,765,767],{"id":766},"verification-mindset","Verification mindset",[288,769,770],{},"Large exports are checked with more than “the Promise resolved”: actual page count, Blob size, Canvas dimensions, cancellation\u002Frecovery and cleanup signals are part of the regression strategy.",[288,772,773,777],{},[755,774,776],{"href":775},"\u002Fuse-cases\u002Fperformance-report?version=v1","Read the complete phase-by-phase engineering report",".",{"title":779,"searchDepth":780,"depth":780,"links":781},"",2,[782,783,784,785,786,787],{"id":294,"depth":780,"text":295},{"id":344,"depth":780,"text":345},{"id":503,"depth":780,"text":504},{"id":606,"depth":780,"text":607},{"id":742,"depth":780,"text":743},{"id":766,"depth":780,"text":767},"Understand vue-pdf-export large-document performance engineering, incremental Canvas rendering, memory reduction, cancellation, cleanup and regression testing.","md",null,{},true,{"title":794,"description":795},"Performance Engineering (1.1.1 and earlier)","Version 1.1.1 large-document performance: incremental Canvas rendering, memory, cancellation and cleanup.","Dis1VHsv2CU-OF3uCh2pAHW6XA5RbyTLUjTwKBdRds0",[798,800],{"title":140,"path":243,"stem":244,"description":799,"children":-1},"Review vue-pdf-export browser support and testing guidance across Chromium, Firefox, WebKit, Safari, SSR fixtures and npm, pnpm, Yarn, Yarn PnP and Bun consumers.",{"title":249,"path":250,"stem":251,"description":801,"children":-1},"Copy Vue 3 and Nuxt 3\u002F4 HTML-to-PDF examples for selectable text, pagination, headers, footers and Blob output with published vue-pdf-export 1.1.1.",1792374153678]