В настоящее время я работаю над приложением Angular, которое должно работать 24 часа в сутки как минимум месяц (производство программного обеспечения).
Клиент принимает только то, что перезапуск браузера происходит только раз в месяц (интервал обслуживания).
Первый вариант использования, который мы реализуем, содержит только один компонент, который отображает некоторую информацию для пользователя.
В данный момент нет взаимодействия с пользователем! Информация передается с сервера на клиент.
В настоящее время я просто опрашиваю обновления данных с сервера и показываю информацию пользователю.
Текущий интервал 200 мс только для исследовательских целей, в реальном сценарии он будет 1000 мс.
Приведенный ниже код вызывает увеличение памяти примерно на 40 МБ в течение 3 часов в Chrome, а также увеличение использования процессора до 50% (при использовании одного из двух ядер).
Целевой технологией для push-уведомлений является SignalR.
Поскольку я обнаружил проблему с памятью с помощью SignalR, представленная здесь реализация опроса используется для выяснения, является ли библиотека SignalR проблемой.
К сожалению, у меня та же проблема.
Конечно, выполнение window.location.reload () каждые 30 минут "решает" проблему, но это не очень хорошее решение.
Если я выполню перезагрузку через 3 часа, страница просто рухнет, и Chrome отобразит «о нет ... разбился».
Я использую Chrome 73 и Edge, с Edge увеличение памяти значительно выше, чем у Chrome.
Используя Angular 7.2
<div *ngIf="info" style="width: 100%; height: 100%; margin: 0 auto;">
<div class="info status{{ info.Status }}">
<div class="location"><p class="font2">{{ info.Location }}</p></div>
<!-- ... further div elements here but no other *ngIf or *ngFor -->
<div *ngIf="info?.Details" class="no-padding">
<div class="column1 no-padding" *ngFor="let item of info.Details">
<div class="inverse"><p class="font1">{{ item.Name }}</p></div>
</div>
</div>
<img class="icon" src="assets/Icon{{info.Icon}}.png"/>
</div>
</div>
</div>
import { Component, OnInit, OnDestroy } from '@angular/core';
import { Subscription, interval, Subject } from 'rxjs';
import { HttpClient } from '@angular/common/http';
import { Info } from '../data/info';
@Component({
selector: 'app-info',
templateUrl: './info.component.html',
styleUrls: ['./info.component.scss']
})
export class InfoComponent implements OnInit, OnDestroy {
subscribetimer: Subscription;
subscribelistener: Subscription;
listener: Subject<Info>;
info: Info;
constructor(private http: HttpClient) { }
ngOnInit() {
this.listener = new Subject<Info>();
this.subscribelistener = this.listener.subscribe(unit => this.info = unit);
this.subscribetimer = interval(200)
.subscribe(data => {
this.http.get<Info>(`http://localhost:5000/poll`)
.subscribe(res => this.listener.next(res));
});
}
ngOnDestroy() {
this.subscribetimer.unsubscribe();
this.subscribelistener.unsubscribe();
}
}
Я ожидаю, что смогу запустить это небольшое приложение 24 часа в сутки, по крайней мере, месяц, не имея проблем с памятью и использованием процессора.