CHR-RAM is good for situations where you can turn the screen off briefly. It takes a couple of frames worth of time to fill up all 8k of CHR. Data transfer over $2007 is a slow process. The other thing to remember is you will need to make space for the CHR data in your PRG-ROM instead, if you use CHR-RAM, since you are going to be copying it into RAM at runtime.
For mappers that support it, you can specify CHR-RAM with a CHR-ROM size of 0 in the iNES header.
Banked CHR-ROM allows you to switch banks instantly (even mid-screen if needed). It also has the advantage that the CHR data does not have to share space with your PRG-ROM, which may be limited. The simplest mappers that support this are
CNROM and
GxROM.
All of these options are relatively easy to build (i.e. simple discrete logic mappers), if you're looking to make cartridges.