What are the best way of handling AEM caching in dispatcher?



I recently came across situation where I need to clear my dispatcher cache manually. For instance, If I am modifying any Js/css files, I would need to clear my dispatcher cache manually in order to get those modified new Js/css else it would be serving the old version of code. I just heard that ACS developed version clientlib which will help us do versioning. I have so many question on this.

Before version clientlib how did AEM manage?

Doesn't AEM has intelligent to manage versioned clientlibs?

Is it correct of way of handling it?

Can we create a Script whil will take back up of the existing before clearing those JS/css files?

What are the other options we have?