«Настройка» без 10-секундного ожидания: статистика npr.history по первичному ключу
Каждый рендер «Настройки» ждал /section службы bj-quikexport, а та считала min(ts) и count(*) за сутки по npr.history (18,5 млн строк, индекса по ts нет): 6 + 27 с на 28, срез по таймауту 10 с. Теперь начало истории — первая строка по id, строки за сутки/час — двоичный поиск по id (история только дописывается): ~45 мс. То же в /admin/npr/api/freshness. bj-server ждёт раздел QUIK-экспорта не дольше 3 с и иначе отдаёт последний удачный; прогрев версий, пользователей ЛК и раздела после запуска. «Обновления» перезагружают страницу, только если что-то изменилось. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
This commit is contained in:
@@ -189,11 +189,15 @@
|
||||
try{ tried=+sessionStorage.getItem('bj-upd-auto')||0; }catch(e){}
|
||||
if(!force && (now-last<600 || now-tried<600)) return; // проверяли меньше 10 минут назад (или уже пробовали сами)
|
||||
try{ sessionStorage.setItem('bj-upd-auto',String(Math.floor(now))); }catch(e){}
|
||||
busy=true; var b=box.querySelector('.stc'); if(b){ b.className='stc stc-run'; var t=b.querySelector('b'); if(t) t.textContent='Проверяю обновления…'; }
|
||||
busy=true; var b=box.querySelector('.stc'), t=b&&b.querySelector('b'), was=b&&[b.className,t?t.textContent:''];
|
||||
if(b){ b.className='stc stc-run'; if(t) t.textContent='Проверяю обновления…'; }
|
||||
function restore(){ busy=false; if(b){ b.className=was[0]; if(t) t.textContent=was[1]; } }
|
||||
fetch('/admin/setup/update/check',{method:'POST',headers:{'X-BJ-Ajax':'1'},cache:'no-store'}).then(function(r){return r.json()}).then(function(d){
|
||||
box.dataset.last=String(Math.floor(Date.now()/1000));
|
||||
// ничего нового — страницу не перерисовываем (полный рендер «Настройки» дорогой)
|
||||
if(d && d.ok && (d.has_update?'1':'0')===box.dataset.has && (!d.has_update || box.textContent.indexOf(d.available||'\u0000')>=0)){ restore(); return; }
|
||||
location.reload(); // состояние компонентов — с сервера
|
||||
}).catch(function(){ busy=false; location.reload(); });
|
||||
}).catch(function(){ restore(); });
|
||||
}
|
||||
box.addEventListener('click',function(e){ if(e.target.closest('[data-upd-check]')) check(true); });
|
||||
document.querySelectorAll('.settings-nav [data-sec="update"]').forEach(function(b){ b.addEventListener('click',function(){ setTimeout(function(){ check(false); },0); }); });
|
||||
|
||||
Reference in New Issue
Block a user