No, not neccesarily.
With the link http header (different from the <link> tag) you just send the http headers, but can still change the response body based on what the browser does.
Alternatively, By sending just the start of the document, then pausing, you can change the rest of the document based on what the browser does with the start, since browsers start loading css/js referenced in the document before the main document completes loading. (Before web sockets were a thing, this was basically the technique used for that sort of thing, called "long polling")
None of this requires javascript.