【问题标题】:link rel="preload" with PHP and Apache将 rel="preload" 与 PHP 和 Apache 链接
【发布时间】:2019-05-09 10:07:57
【问题描述】:

正如 here 所描述的那样,预加载脚本和 css 以加快网页加载速度可能是个好主意。

我的网页是基于PHP的,所以我做了:

<!DOCTYPE html>
<html lang="en">
<head>
    <link rel="preload" href="/styles.css" as="style" />
    <link rel="preload" href="/script.js" as="script" />
<?php
   flush();  // Please, output the code above!
   sleep(2); // Simulate some processing
?>
<link rel="stylesheet" type="text/css" href="/styles.css" />
</head>
<body>Test
<script src="/scripts.js"></script>
</body>
</html>

发生的情况是网络服务器保留内容直到处理整个脚本,这意味着 html 代码仅在等待 2 秒后发送,这使得预加载语句无用。

我尝试在睡眠语句之前添加flush();,但没有效果。

知道如何对 PHP 生成的页面使用预加载吗?我正在使用 PHP 7.x 和 Apache 2.4。

【问题讨论】:

    标签: php html apache


    【解决方案1】:

    你误解了“预加载”的概念

    在这里阅读:https://developer.mozilla.org/en-US/docs/Web/HTML/Preloading_content

    当使用 PHP 生成网页时,在整个页面生成之前,您将看不到任何内容。

    如果您使用 flush() 强制将缓冲区写入“OUTPUT”,您可能需要先阅读手册。

    https://www.php.net/manual/en/function.flush.php

    无论如何,使用“预加载”的最佳位置是另一个页面所需的资源,可能在当前页面上加载。

    【讨论】:

    • 感谢您的回复。我稍微更改了代码以使用例更清晰:使用预加载,在进行处理时浏览器应该能够使用这个时间并加载 script.js 和 style.css。
    • 但似乎我无法使用 flush(); 发送 html 代码的第一部分;例如,无需打开 gzip 传输,这可能比不预加载更糟糕。
    • 是的,你自己回答了这个问题。您必须在将整个页面发送到客户端(在本例中为浏览器)之前生成整个页面
    猜你喜欢
    • 2019-03-09
    • 2016-08-07
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-12
    相关资源
    最近更新 更多