Scheduling updates to VRAM is a problem with many possible approaches with different tradeoffs. The approach in neslib/nesdoug isn't well separated from the rest of the library, so making a different choice here tends to require throwing away the rest of the library. Instead, this should be broken out such that inclusion of the NMI update and data structures depends on the functionality actually being used.
Scheduling updates to VRAM is a problem with many possible approaches with different tradeoffs. The approach in neslib/nesdoug isn't well separated from the rest of the library, so making a different choice here tends to require throwing away the rest of the library. Instead, this should be broken out such that inclusion of the NMI update and data structures depends on the functionality actually being used.