I have used:
100% Isopropyl Alcohol - works well, removes flux quite quickly. Downsides are quick evaporation, slight white residue after drying, and it'll leave the flux residue right back on the board if you don't freshen up the liquid often. However, isopropyl is cheap!
White residue is dirty IPA, either flux in it, or a low percentage solution with contaminates. IVe done a bit of hand assembly production at work, and a good 3-step process was 2 bins of alcohol, and a wash bottle. Scrub and remove all the residue in the first bath, take it out, shake it off, put it in the second bath to remove flux/alcohol solution from the first washing. Quick scrub with a second brush, then rinse it with the wash bottle, over top of the second bin, so the alcohol drains into it. Blot dry, and re-rinse if needed.
When the 2nd bath starts getting full, dump most of it into the first bath. All the heavy junk stays in the first bath, and the 2nd bath is kept pretty clean by the alcohol you use to rinse running into it constantly topping it off. And youre always rinsing with pure alcohol, but not being too wasteful with it.
The boards would come out looking just as clean as when I got them from the board fab.