HTTP2 Push- размещение тегов скрипта в res.end
После прочтения статьи HTTP2 с использованием модуля Speedy NPM у меня возник вопрос.
Преимущество HTTP2 push заключается в том, что браузер кэширует ресурсы до того, как браузер запрашивает их.
В этом примере:
spdy.createServer(options, function(req, res) {
// push JavaScript asset (/main.js) to the client
res.push('/main.js', {'content-type': 'application/javascript'}, function(err, stream) {
stream.end('alert("hello from push stream!")');
});
// write main response body and terminate stream
res.end('Hello World! <script src="/main.js"></script>');
}).listen(443);
Что значит <script src="/main.js"></script>
на самом деле заставить браузер делать в res.end('Hello World! <script src="/main.js"></script>')
?
И если index.html имеет <script src="/main.js"></script>
внутри него, зачем помещать его в res.end('Hello World! <script src="/main.js"></script>')
?
1 ответ
res.end('Hello World! <script src="/main.js"></script>');
отправляет очень минимальную веб-страницу. (Это отсутствует <html><head><body> etc...
, потому что это простой пример.) Это выглядит так:
Hello World!
<script src="/main.js"></script>
На веб-странице отображается "Hello World!" но вы не увидите <script>
тег предоставлен. Браузер анализирует "веб-страницу", обрабатывает ссылку на main.js
и обнаруживает, что уже получил этот файл (из .push
). Наконец, этот скрипт выполняется и открывает alert()
,
main.js
был предварительно отправлен даже до того, как контент "веб-страницы" был доставлен, это res.push('/main.js',...)
,