Hmm. In my experience it is not dramatically slower in practice. It's still a win though and having the compiler/developer tools installed properly from your OS package manager ought to be enough to make it work on the next npm install of the project.
Two seconds is pretty slow I'd agree. You can experiment with the trace feature:
TRACE=1 node app
You'll get A LOT of output, but sorting through it you can find out how long various parts of the loading process are taking.
A common culprit: joins that fetch other documents that contain widgets which fetch other documents, and so on, fetching more than you need. We usually address this by limiting the data returned by a join:
_places: {
type: 'joinByArray',
idsField: 'placeIds',
label: 'Places',
getOptions: {
fields: {
slug: 1,
title: 1
}
}
}