The more frequently you defrag the shorter it takes. So my advice has been run the defrag task on a schedule. Third party defraggers may have better heuristics that allows it to finish in less time than Window's built-in defragger, but if they are scheduled to run at middle of night, it has negligible impact on your productivity.
Vista's defragger runs weekly by default, so you should not need to tweak anything. XP's defragger is not scheduled to run automatically, but it's simple enough to create a scheduled task for it.