【问题标题】:Are there downsides to loading javascript or CSS via server-side conditionals?通过服务器端条件加载 javascript 或 CSS 是否有缺点?
【发布时间】:2012-05-19 00:15:47
【问题描述】:

假设我有一个 javascript 或 CSS 文件,它只用于网站上的一个或少数几个页面。我还有一种方法可以轻松识别何时提供这些页面,例如人类可读的 URL。使用服务器端测试有条件地为 JS 提供服务以查看脚本是否必要是不好的做法吗?以 PHP 为例,我可能会这样做:

<?php
if($page='myFancyPage')
{
?>
    <script src="myFancyScipt.js"></script>
<?php
}
?>

我不会失去浏览器缓存的好处吧?我不应该这样做还有其他原因吗?

我认识到,随着网站变得越来越大并且必须堆积越来越多的条件,这可能会变得笨拙。但除了这个问题之外,是否有理由避免这种做法?

【问题讨论】:

  • 鉴于有多少人谈论需要将脚本或 css 合并到一个文件中(以减少服务器请求),我想知道人们如何看待这种技术作为替代方案?组合起来可能会很痛苦(尤其是当您稍后添加在站点上仅具有有限用途/范围的脚本时)。
  • 考虑到合并后的 css 或 js 文件的大小约为 JPG 的平均大小,您仍然领先于合并。对于小文件,请求是瓶颈,而不是有效负载。

标签: javascript css caching optimization


【解决方案1】:

否,因为条件是在 SERVER 而不是 CLIENT。

客户端不知道为什么得到了文件,但是当它得到它时,它会被缓存。

【讨论】:

  • 额外响应/请求的开销是不利的
  • @AndyDavies 这是我的评论,但我毫无理由地被否决了。+1 给你好先生。
【解决方案2】:

浏览器缓存发生在客户端(浏览器),而您的 PHP 将在服务器端执行。如果您的浏览器看到其中包含myFancyScript.js 的页面,那么对该页面的所有后续请求都将使用myFancyScript.js 的缓存版本,假设来自服务器的响应标头允许并且浏览器服从标头。

【讨论】:

    【解决方案3】:

    您不会失去文件缓存的好处,除非它们被需要并且没有被提供!文件缓存只有在文件没有更改并且已经存在于客户端时才会使您受益。

    有选择地链接到您的外部文件有一个好处(仅链接this 页面需要的文件),因为您的文件将加载得更快,因为它不必解析多余的 js/css...你更好只添加页面需要的文件

    【讨论】:

      【解决方案4】:

      这取决于...

      一般而言,建议是尽量减少页面对外部资源的请求数量,因为额外请求/响应的开销通常大于文件源合并到另一个文件源的情况。

      这就是为什么标准性能建议是将 JS 文件合并在一起以创建最小下载次数的原因

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-12-01
        • 2020-12-15
        • 2015-10-05
        • 2015-04-08
        • 1970-01-01
        • 1970-01-01
        • 2020-02-12
        相关资源
        最近更新 更多