In JavaScript il pattern dell'osservatore viene usato abbastanza spesso. C'è una cosa complicata e sono i riferimenti che il soggetto conserva degli osservatori. Hanno bisogno di pulizia. Per le applicazioni regolari utilizzare le seguenti regole di massima:La programmazione reattiva funzionale in JavaScript causa problemi maggiori con i riferimenti listener?
- Se il soggetto ha una durata di vita più breve rispetto (o uguale a) l'osservatore, posso solo fare
subject.on('event', ...)
- Se il soggetto ha una durata di vita più lunga che l'osservatore, devo usare
observer.listenTo(subject, 'event', ...)
Nel secondo caso, il listenTo
è consapevole del ciclo di vita dell'osservatore e rimuoverà automaticamente ascoltatori quando è il momento per l'osservatore morire.
Nell'attuale stile SPA (Single Page Application), in cui solo alcune parti dell'applicazione sono attive in qualsiasi momento, questo è qualcosa che diventa molto importante. Se lo combini con le prese per il web, che sono un candidato perfetto per un flusso di eventi e molto probabilmente vissuto da molto tempo, questo diventa ancora più importante.
Con FRP, avendo qualcosa come un flusso di eventi che rappresenta i valori che cambiano nel tempo, sono (senza saperlo) creare molti ascoltatori. Ogni filter
, map
e flatMap
crea un nuovo flusso collegato (probabilmente utilizzando un listener) al precedente.
Nella mia mente sembra abbastanza difficile determinare come e quando ho bisogno di rimuovere quegli ascoltatori. Non riesco a immaginare di essere il primo a pensare a questo problema, ma non ho potuto trovare molto su questo su Internet.
Ho visto alcuni framework in altre lingue utilizzare riferimenti deboli. JavaScript non ha il concetto di riferimenti deboli (WeakMap non è utilizzabile qui). Anche se lo fosse, sembra una cattiva idea perché non è chiaro quando avviene la garbage collection.
- Come si risolve questo negli attuali framework?
- Le strutture si legano al ciclo di vita degli oggetti? Se sì: come?
Se pensi che questa domanda debba essere chiusa, per favore aggiungi un commento. Forse aggiungere un suggerimento per rendere la domanda più specifica. O forse un puntatore a un punto in cui questa domanda è più adatta. Se non è chiaro, si prega di fare domande. Voglio davvero usare FRP. – EECOLOR
Mi dispiace dover votare per chiudere. Questa domanda è fin troppo aperta. –
@JK. Hai qualche suggerimento su come migliorare la domanda? – EECOLOR