Hi, My name is Markus and this is my first blog post on labs :-)
Since some time ago we integrated a change into QNetworkAccessManager that makes HTTP requests run in a separate thread. Someone asked for clarification on that, so here it goes :)
While all this work is happening the network processing is not progressing if it is happening in the same thread as the rest of the browser. What we have seen from network traces is that what we call "synchronization points" is happening: While QtWebKit is busy in the main thread and blocking its event loop, no new network requests are sent out. In really bad cases the HTTP servers stop sending new data. This is especially relevant where you have lower processing power and higher network latency than on the classic desktop PC (Hello mobile device world!).
There are several solutions for this:
Put QtWebKit in a thread, leave networking in user thread
Put the whole QNetworkAccessManager in a thread
Put the HTTP code of QNetworkAccessManager in a thread
What we have done is 3. Technically this works by putting another layer inside QNetworkAccessManager. The actual HTTP protocol code does not change at all, only the way how QNetworkAccessManager is using it. Also your code and QtWebKit's code do not need to change. This means from Qt 4.8 on you get those benefits without needing to enable anything special.
PS: A lot of things are happening inside Qt these days and will continue to happen, even though rumor on the streets says otherwise... While you read this we are making the whole QtWebKit experience even more asynchronous with WebKit2 power! :)