Boost.Asio is great library but it has one huge drawback -- extreamly slow compilation times. A simple implementation (really simple) of HTTP protocol (about 1k lines of cod
We are using boost thread, asio and a few other libs, including Qt. Using precompiled headers carefully made a 10:1 improvement in build time. We referred to the following for guidance:
http://www.cygnus-software.com/papers/precompiledheaders.html
There are ways to do precomiled headers so that they don't creep into every file and Windowsify your code.
What platform? On Linux, both ccache and distcc are awesome, included in most distributions and a snap to set up, either individually or even combined.
boost::lambda
or boost::bind
to construct your completion handlers?
boost::bind
is less complex => compiles faster.Well, you probably solved this long ago. But just in case.
Precompiled headers do not magically improve compilation times. They improve cross-translation-unit compile times by cacheing the first header evaluation. Thus you won't see a benefit unless you are #include
ing ASIO across multiple source files. Any new template instantiations will further make this last benefit even less noticeable.
I suggest isolating ASIO to a single source file. Don't include ASIO in any 'non-detail' header files. If you must do the latter, try to hide it by using the Pimpl pattern.
If you find yourself requiring ASIO functionality in multiple source files, then think about building an abstraction layer between your code and ASIO. If you keep it as simple as possible, ensuring the bridging code never changes, then you can even #include
this interface in the PCH.