Skip to content

Commit ff23195

Browse files
authored
perf: skip unused scripts in pdf mode (#9366)
1 parent 746aa43 commit ff23195

File tree

2 files changed

+20
-11
lines changed

2 files changed

+20
-11
lines changed

src/Docfx.App/PdfBuilder.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,8 @@ static async Task CreatePdf(IBrowser browser, ProgressTask task, Uri outlineUrl,
133133
var pageNumber = 1;
134134
var nextPageNumber = 1;
135135

136+
var page = await browser.NewPageAsync(new() { UserAgent = "docfx/pdf" });
137+
136138
// Make progress at 99% before merge PDF
137139
task.MaxValue = pages.Length + (pages.Length / 99.0);
138140
foreach (var (url, node) in pages)
@@ -158,14 +160,14 @@ static async Task CreatePdf(IBrowser browser, ProgressTask task, Uri outlineUrl,
158160

159161
async Task<byte[]> CapturePdf(Uri url, int startPageNumber)
160162
{
161-
var page = await browser.NewPageAsync();
162163
var response = await page.GotoAsync(url.ToString());
163164
if (response is null || !response.Ok)
164165
throw new InvalidOperationException($"Failed to build PDF page [{response?.Status}]: {url}");
165166

166167
await page.AddScriptTagAsync(new() { Content = EnsureHeadingAnchorScript });
167168
await page.AddScriptTagAsync(new() { Content = InsertHiddenPageScript(startPageNumber - 1) });
168-
await page.WaitForLoadStateAsync(LoadState.NetworkIdle);
169+
await page.WaitForLoadStateAsync(LoadState.DOMContentLoaded);
170+
await page.WaitForFunctionAsync("!window.docfx || window.docfx.ready");
169171
var bytes = await page.PdfAsync(new()
170172
{
171173
HeaderTemplate = "<span></span>",

templates/modern/src/docfx.ts

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,22 @@ declare global {
2525
async function init() {
2626
window.docfx = window.docfx || {}
2727

28-
initTheme()
29-
30-
await Promise.all([
31-
enableSearch(),
32-
renderInThisArticle(),
33-
renderMarkdown(),
34-
renderNav(),
35-
highlight()
36-
])
28+
const pdfmode = navigator.userAgent.indexOf('docfx/pdf') >= 0
29+
if (pdfmode) {
30+
await Promise.all([
31+
renderMarkdown(),
32+
highlight()
33+
])
34+
} else {
35+
await Promise.all([
36+
initTheme(),
37+
enableSearch(),
38+
renderInThisArticle(),
39+
renderMarkdown(),
40+
renderNav(),
41+
highlight()
42+
])
43+
}
3744

3845
window.docfx.ready = true
3946

0 commit comments

Comments
 (0)