dinsdag 17 januari 2023

Angular traag bij websocket activiteit. Hoe kan dat?

Angular gebruikt zone.js om change detection te doen. Die zone.js heeft websockets gepatched om netwerk activiteit te detecteren. Bij het laden van ieder data gedeelte via de websocket wordt een change detection getriggerd. Daarom duurt het inladen van de gegevens zo lang als je websockets gebruikt en change detection niet goed is ingericht in je applicatie.
Zie https://blog.angular-university.io/how-does-angular-2-change-detection-really-work/

De websocket functie "onmessage" moet je buiten de Angular Zone houden om te voorkomen dat bij iedere aanroep een change detection wordt getriggered:

Doe iets als:
    import { NgZone } from '@angular/core';
    constructor (private _ngZone : NgZone) {};

    await this._ngZone.runOutsideAngular(async () => {
        await this.websocketcode.open();
    });

Geen opmerkingen:

Een reactie posten