У меня есть следующая архитектура: страница JSP с клиентским кодом JavaScript, бэкэнд - это класс JAVA, который получает данные из базы данных Oracle.Все приложение работает на сервере WebLogic 10.
Функция таймера находится в файле RedbudTimer.js, и страница JSP запускает его так:
<script type="text/javascript" src="/common/gp/js/RedbudTimer.js"></script>
function TimerCallback()
{
window.location.reload();
}
displayTimer('<%= deadLine.toString() %>', true);
, где deadLine - некоторое число.Файл JavaScript выглядит следующим образом:
Date.ONE_SECOND = 1000;
Date.ONE_MINUTE = Date.ONE_SECOND * 60;
Date.ONE_HOUR = Date.ONE_MINUTE * 60;
Date.ONE_DAY = Date.ONE_HOUR * 24;
Date.ONE_WEEK = Date.ONE_DAY * 7;
function TimeSpan(d, toDeadline) {
this.time = d.getTime ? d.getTime() : Date.parse(d);
this.toDeadline = toDeadline;
}
TimeSpan.prototype.valueOf = function () {
var val = this.time - new Date().getTime();
if (!this.toDeadline) val *= -1;
return val;
}
TimeSpan.prototype.toString = function () {
var t = Math.abs(this.valueOf());
var d = Math.floor (t / Date.ONE_DAY);
var h = Math.floor ((t % Date.ONE_DAY) / Date.ONE_HOUR);
var m = Math.floor ((t % Date.ONE_HOUR) / Date.ONE_MINUTE);
var s = Math.floor ((t % Date.ONE_MINUTE) / Date.ONE_SECOND);
var showDays = false;
var display = '';
if (showDays) {
display = (this.valueOf() < 0 ? '-' : '') + [d, (h < 10 ? '0' : '') + h, (m < 10 ? '0' : '') + m, (s < 10 ? '0' : '') + s].join(':');
}
else {
display = (this.valueOf() < 0 ? '-' : '') + [(h < 10 ? '0' : '') + h, (m < 10 ? '0' : '') + m, (s < 10 ? '0' : '') + s].join(':');
}
return display;
}
function displayTimer(time, toDeadline) {
var ts = new TimeSpan(time, toDeadline);
if (ts <= 0){
setTimeout("TimerCallback()", 1000);
clearInterval(intId);
}
else {
document.getElementById('counter').innerText = ts.toString();
var intId = setTimeout("displayTimer('" + time + "'," + toDeadline +")", 1000);
}
}
Как это работает, таймер считает от некоторого числа обратно до 0, а когда он достигает 0, он вызывает TimerCallback на странице JSP,Он отлично работает, когда запускается во внутренней сети сервера, на котором он развернут, но если к нему обращаются извне через прокси-сервер, он работает очень, очень медленно (5 минут для загрузки страницы).
Доступк приложению извне реализовано так:
- внешний доступ к приложению осуществляется через веб-сервер Apache на пограничном сервере
- запрос от внешнего пользователя принимается apache через HTTPS
- экспедитор в Apache отправляет запрос во внутреннюю сеть
Я озадачен этим.Есть идеи, почему это будет так медленно?