多个 javascript/css 文件:最佳实践?

IT技术 php javascript jquery html css
2021-01-24 05:04:44

我现在有大约 7 个 Javascript 文件(多亏了各种 jQuery 插件)和 4-5 个 CSS 文件。我很好奇处理这些问题的最佳实践是什么,包括它们应该在文档中的哪个位置加载?YSlow 告诉我 Javascript 文件应该 - 在可能的情况下 - 包含在最后。身体的尽头?它提到分隔符似乎是他们是否写内容。我所有的 Javascript 文件都是函数和 jQuery 代码(都在 ready() 时完成),所以应该没问题。

那么我应该包含一个 CSS 和一个 Javascript 文件,并让它们包含其余的文件吗?我应该将所有文件连接成一个吗?我应该将 Javascript 我的标签放在文档的最后吗?

编辑: FWIW 是的,这是 PHP。

6个回答

我建议使用PHP Minify,它允许您为一组 JS 或 CSS 文件创建单个 HTTP 请求。Minify 还处理用于客户端缓存的 GZipping、压缩和 HTTP 标头。

编辑:Minify 还允许您设置请求,以便为不同的页面包含不同的文件。例如,特定页面上的一组核心 JS 文件以及自定义 JS 代码或其他页面上的核心 JS 文件。

在开发过程中,像往常一样包含所有文件,然后当您接近切换到生产时运行 minify 并将所有 CSS 和 JS 文件加入单个 HTTP 请求。设置和使用它真的很容易。

同样是的,CSS 文件应该设置在头部,JS 文件放在底部,因为 JS 文件可以写入您的页面并可能导致大量超时问题。

以下是您应该如何包含您的 JS 文件:

</div> <!-- Closing Footer Div -->
<script type="application/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.1.min.js"></script>
</body>
</html>

编辑:您还可以使用Cuzillion来查看您的页面应该如何设置。

这是正确的,因为 JS 文件位于底部,并且在您的其余代码已经加载并运行之后。如果您仍想提高您的 YSlow 分数,您可能需要重新编码您的网站以更改此设置。我个人没有遇到任何重大问题,包括在我的代码中使用 jQuery。
2021-04-04 05:04:44
使用 minify,您可以让每个页面都有单独的包含语句。因此,对于您需要这一点 JS 的页面,请包含它,不要将它包含在其他页面中。这是否有意义或有帮助?
2021-04-09 05:04:44
我今天早些时候尝试过这个,但遇到了几个问题:首先,我的 ready() 样式稍后出现(它在应用时实际上非常明显),我无法直接在我的代码中嵌入 jquery 调用(因为 jquery.js尚未加载),我还有其他一些奇怪的缓存问题。
2021-04-13 05:04:44
如果您只有一个 JavaScript 文件,则不必将其放在底部。
2021-04-14 05:04:44
例如,我一直在使用 jquery 在几个页面上进行一些自定义表格样式。使用底部的 jquery,我必须将它移动到一个公共文件中,然后让代码在 id 或其他东西上工作。在每个页面上运行该代码似乎有点浪费。
2021-04-14 05:04:44

我是这样做的:我最多使用两个 JavaScript 文件,通常每个页面使用一个 CSS 文件。我弄清楚哪些 JS 文件将在我的所有页面中通用(或足够多的文件,所以它很接近 - 包含 jQuery 的文件将是一个很好的候选),然后我连接它们并使用jsmin-php缩小它们,然后我缓存合并文件。如果有任何仅特定于该页面的 JS 文件剩余,我也会将它们连接、缩小并将它们缓存到一个文件中。第一个 JS 文件将在多个页面上调用,第二个仅在那个页面上或可能几个页面上调用。

如果你喜欢css-min你可以在 CSS 中使用相同的概念,尽管我发现我通常只使用一个文件来处理 CSS。额外的一件事,当我创建缓存文件时,我在文件的开头放入了一些 PHP 代码,以将其作为 GZipped 文件提供,这实际上是您获得大部分节省的地方。您还需要设置过期标头,以便用户的浏览器也有更好的机会缓存文件。我相信您也可以通过 Apache 启用 GZipping。

对于缓存,我检查文件创建时间是否早于我设置的时间量。如果是,我重新创建缓存文件并提供它,否则我只获取现有的缓存文件。

您没有明确表示您可以访问服务器端解决方案,但假设您可以访问,我总是采用一种涉及使用 PHP 执行以下操作的方法:

jquery.js.php:

<?php
$jquery = ($_GET['r']) ? explode(',', $_GET['r']) : array('core', 'effects', 'browser', 'cookies', 'center', 'shuffle', 'filestyle', 'metadata');
foreach($jquery as $file)
 {
echo file_get_contents('jquery.' . $file . '.js');
 }
?>

有了上面的代码片段,我就可以像往常一样调用文件:

<script type="text/javascript" src="jquery.js.php"></script>

然后,如果我知道我将需要的精确功能,我只需将我的需求作为查询字符串传递(jquery.js.php?r=core,effects)。如果我的 CSS 要求是分支的,我也会做同样的事情。

如果在涉及远程包含时缓存曾经是一个问题,大多数浏览器会善意地重新考虑您是否只是将时间戳传递到 URL 中...
2021-03-18 05:04:44
这种事情不会抑制缓存吗?
2021-04-11 05:04:44
但是......使用缓存头应该仍然是首选方法。
2021-04-11 05:04:44

我不建议使用基于 javascript 的解决方案(如 PHP Minify)来包含您的 css,因为如果访问者禁用了 javascript,您的页面将无法使用。

缩小和合并文件的想法很棒。

我在我的网站上做了类似的事情,但为了简化开发,我建议一些如下所示的代码:

if (evironment == production) {
  echo "<style>@import(/Styles/Combined.css);</style>"
} else {
  echo "<style>@import(/Styles/File1.css);</style>"
  echo "<style>@import(/Styles/File2.css);</style>"
}

这应该让您在开发期间将文件分开以便于管理,并在部署期间使用组合文件来加快页面加载。这假设您有能力在部署过程中组合文件和更改变量。

一定要按照 YUI 的建议将您的 js 包含在底部,将 css 包含在顶部,因为保持 JS 低会对页面其余部分的外观产生切实影响,并且感觉会更快。

不知道那篇文章中的语法是否类似于 php。这只是随机伪代码:)
2021-03-24 05:04:44
以 ; 结束 'echo' 行 并在 php 版本的 'environment' 和 'production' 之前添加 '$'。:)
2021-04-11 05:04:44