keeping latest messages visible at bottom of list, caching more DOM queries