Skip to content

Commit f28874d

Browse files
committed
Update prernder logic and timings
1 parent 8ca0ae4 commit f28874d

1 file changed

Lines changed: 79 additions & 7 deletions

File tree

server.js

Lines changed: 79 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,41 @@ const server = prerender({
1212
'--disable-dev-shm-usage',
1313
'--ignore-certificate-errors',
1414
'--allow-insecure-localhost'
15-
]
15+
],
16+
pageLoadTimeout: 20000,
17+
waitAfterLastRequest: 500,
18+
pageDoneCheckInterval: 300
1619
});
1720

1821
process.env.CACHE_MAXSIZE = process.env.CACHE_MAXSIZE || 1000;
1922
process.env.CACHE_TTL = process.env.CACHE_TTL || 43200;
2023

24+
// Block requests that typically hang and prevent page from finishing
25+
const BLOCKED_PATTERNS = [
26+
/google-analytics\.com/,
27+
/googletagmanager\.com/,
28+
/facebook\.net/,
29+
/facebook\.com\/tr/,
30+
/hotjar\.com/,
31+
/intercom\.io/,
32+
/crisp\.chat/,
33+
/sentry\.io/,
34+
/segment\.com/,
35+
/mixpanel\.com/,
36+
/amplitude\.com/,
37+
/clarity\.ms/,
38+
/doubleclick\.net/,
39+
/\.woff2?(\?|$)/,
40+
/\.ttf(\?|$)/,
41+
/ws:\/\//,
42+
/wss:\/\//,
43+
/\/socket\.io\//,
44+
/\/sockjs-node\//,
45+
/\/hub\?/, // SignalR
46+
/eventsource/i,
47+
/livereload/,
48+
];
49+
2150
server.use({
2251
tabCreated: (req, res, next) => {
2352
const tab = req.prerender.tab;
@@ -26,18 +55,64 @@ server.use({
2655
tab.Console.enable();
2756
tab.Network.enable();
2857

29-
tab.Console.messageAdded((params) => {
30-
console.log('🟡 Browser log:', params.message.text);
58+
const pendingRequests = new Map();
59+
60+
// Use Fetch domain for request interception (replaces deprecated Network.setRequestInterception)
61+
tab.Fetch.enable({ patterns: [{ requestStage: 'Request' }] });
62+
tab.Fetch.requestPaused((params) => {
63+
const url = params.request.url;
64+
const blocked = BLOCKED_PATTERNS.some(p => p.test(url));
65+
if (blocked) {
66+
console.log('🚫 Blocked:', url);
67+
tab.Fetch.failRequest({
68+
requestId: params.requestId,
69+
errorReason: 'Aborted'
70+
});
71+
} else {
72+
tab.Fetch.continueRequest({ requestId: params.requestId });
73+
}
74+
});
75+
76+
tab.Network.requestWillBeSent((params) => {
77+
pendingRequests.set(params.requestId, {
78+
url: params.request.url,
79+
time: Date.now()
80+
});
81+
});
82+
83+
tab.Network.loadingFinished((params) => {
84+
pendingRequests.delete(params.requestId);
3185
});
3286

3387
tab.Network.loadingFailed((params) => {
34-
console.log('🔴 Network Failed:', params.errorText, params.url);
88+
const info = pendingRequests.get(params.requestId);
89+
if (info) {
90+
console.log('🔴 Network Failed:', params.errorText, info.url);
91+
pendingRequests.delete(params.requestId);
92+
}
93+
});
94+
95+
tab.Console.messageAdded((params) => {
96+
console.log('🟡 Browser log:', params.message.text);
3597
});
3698

3799
tab.Runtime.enable();
38100
tab.Runtime.exceptionThrown((exception) => {
39101
console.log('💥 JS Exception:', exception.exceptionDetails.text);
40102
});
103+
104+
// Log pending requests every 3s to identify what's hanging
105+
const interval = setInterval(() => {
106+
if (pendingRequests.size > 0) {
107+
const now = Date.now();
108+
console.log(`⏳ Pending requests (${pendingRequests.size}):`);
109+
pendingRequests.forEach(({ url, time }) => {
110+
console.log(` - ${((now - time) / 1000).toFixed(1)}s ${url}`);
111+
});
112+
}
113+
}, 3000);
114+
115+
req.prerender.on('tabNavigated', () => clearInterval(interval));
41116
}
42117

43118
next();
@@ -51,16 +126,13 @@ server.use({
51126
req.prerender.res.headers = {
52127
'content-type': 'text/html; charset=utf-8',
53128
'content-length': Buffer.byteLength(body, 'utf8'),
54-
// 'cache-control': 'public, max-age=600'
55129
};
56130
}
57131
next();
58132
}
59133
});
60134

61-
62135
server.use(prerender.removeScriptTags());
63-
64136
server.use(memoryCache);
65137

66138
console.log('Prerender on Node 24 is starting...');

0 commit comments

Comments
 (0)