Long loading times for js files due to connectionTimeout setting
Азат Усманов <[email protected]>
| Newsgroups | gmane.comp.jakarta.tomcat.user |
|---|---|
| Message-ID | <5316381763332848@dddcee22-124e-4950-83f3-0fce6b02c27f> |
issue with js file loading time and Connection timeout
Hello everyone! A colleague of mine at $work discovered a strange issue with his local tomcat in regards to loading times of js files and neither of us has any idea why its happening the way it is. So he was developing some ajax /js code to notify the users of our system in case the user got/ any new notifications. And noticed long 20s loading time for his ajax script. When I see it for myself I have(checkout his branch from git repo) no issues with load times(on my computer the script is loading in 23 ms) His susspected that the issue might be with connectionTimeout setting, because once he changed it from 20000 to 1000 the file was servered after 1s of wait time.He also noticed once he added maxKeepAliveRequests attribute with the setting of 1 .the delay dissapeared. completely, re
gardless of the connectionTimeout setting value.
here is the strange part. my connector does have the same ConnectionTimeout setting value of 20000ms, NO maxKeepAliveRequests attribute
specified on the connector and the loading time has no delay. Any Idea why? Below is my local connector
<Connector URIEncoding="UTF-8" connectionTimeout="20000" maxPostSize="-1" port="8081" protocol="HTTP/1.1" redirectPort="8443" useBodyEncodingForURI="true"/>
Both our machines have the own copy of tomcat 9.0.64 version which connect to the same oracle 21 c db. Java is 1.8.202 on both machines. He is using Mac I am on Windows 11
below is js file itself, althouth he tested the issue with much more simple alert type js , the issue remained the same.
// Expose globally
window.startNotificationCheck = startNotificationCheck;
var baseUrl = window.location.origin + '/Education';
function startNotificationCheck(updateFunction) {
checkNotificationsAndUpdateCount(updateFunction);
}
async function checkNotificationsAndUpdateCount(updateCountFunction) {
let timerId; // Timer ID to control polling
let errorOccurred = false; // Local variable to track errors
async function check() {
try {
// const data = await checkNotifications();
let result = await makeRequest(
`${baseUrl}/protected/student-cabinet/Notifications/check/all`,
{ headers: { 'X-Check-Notifications': 'true' } }
);
// Unwrap the inner data so the update function gets counts directly
const counts = result.data ?? {};
// Call UI update with the counts object
updateCountFunction(counts);
errorOccurred = false;
} catch (error) {
errorOccurred = true;
clearTimeout(timerId);
// Check if it's an unauthorized error
if (error.status === 401 || error.message.includes('Unauthorized')) {
//при завершении сессии
} else {
console.log('Notification check timer stopped due to an error: ' + error.message);
}
}
}
// Define the recursive polling function
function scheduleNextCheck() {
if (!errorOccurred) {
timerId = setTimeout(async () => {
await check();
scheduleNextCheck(); // Schedule the next check in 30 seconds
}, 30000);
}
}
// Start the polling loop
check().then(scheduleNextCheck);
}