He estado tratando de hacer que Safari comience a precargar activos mientras se carga una página, pero nada parece funcionar. Sin embargo, Chrome y Firefox parecen hacerlo bien.
La configuración es bastante simple. Un script muestra el siguiente html con una pausa de 2 segundos en el medio. La primera parte de la respuesta se ha vaciado y transmitido al navegador. Esto se confirma con la capacidad de Firefox y Chrome para comenzar a obtener el js antes.
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="preload" href="http://localhost:8888/js.js" as="script" />
<script href="http://localhost:8888/js.js"/>
</head>
<!-- here the script rendering the HTML would actually pause
for 2s before rendering the rest of the document -->
<!-- the first part of the response has been
flushed and sent to the browser already -->
<body>
</body>
</html>
Obtener el archivo JS también tiene un retraso de 2 segundos. Esto facilita la visualización de las cosas en las líneas de tiempo del navegador.
Tenga en cuenta que Chrome y Firefox comenzarán a cargar el JS antes incluso si no hay <link preload> presente. Parece que simplemente comienzan a analizar el HTML tan pronto como obtienen un poco y descargan cualquier js que encuentren en el camino.
En Firefox obtengo la siguiente cascada:

En Chrome obtengo casi lo mismo:

En Safari, sin embargo, todo lo que puedo obtener es:
Lo que muestra claramente que Safari no intenta cargar el script de forma asincrónica y, en cambio, espera que se reciba la respuesta html completa.
¿Qué me estoy perdiendo? ¿Safari simplemente no realiza ninguna carga previa de activos?
Por el momento, Safari no es compatible con <link rel=preload> , lo que explica la cascada que estás viendo. La buena noticia es que Jen Simmons, una de sus Web Evangelists, ha preguntado en Twitter para qué lo usarían los devops si existiera.