为什么不将PHP文件用于(自定义)CSS和JS?

Jef*_*oel 14 javascript css php

为什么没有人让 .php 他们的文件 CSS JavaScript 文件?

添加<?php header("Content-type: text/javascript; charset: UTF-8"); ?>到文件使浏览器可以读取,您可以通过将Content-type属性设置为css文件来执行相同的操作text/css.

它允许您将PHP和方法的所有变量用于其他语言.举例来说,根据css中的用户首选项更改主题主颜色,或者预加载javascript可以在文档加载时使用的数据.

使用这种技术有不好的方面吗?

tda*_*ers 18

人们比你想象的更频繁地做这件事.你只是没有看到它,因为通常这种技术与URL重写结合使用,这意味着浏览器无法区分静态服务的.css文件和PHP脚本生成的动态样式表.

但是,有一些强有力的理由这样做:

  • 在默认配置中,Apache将PHP脚本输出视为"在任何给定时间可以更改",并设置适当的标头以防止缓存(否则,动态内容将无法正常工作).但是,这意味着浏览器不会缓存您的CSS和javascript,这很糟糕 - 它们将通过网络重新加载每个页面加载.如果你每秒有几百页的加载,这个东西绝对重要,即使你没有,页面的响应度也会受到很大影响.
  • CSS和Javascript一旦部署,很少改变,并且使其成为动态的原因非常少见.
  • 运行PHP脚本(即使只是为了启动解释器)比仅提供静态文件更昂贵,所以除非绝对必要,否则应该避免使用它.
  • 确保你输出的Javascript是正确和安全的,真是太难了; 转义Javascript的动态值并不像你想象的那么简单,如果这些值是用户提供的,那你就是在寻找麻烦.

还有一些更容易设置的替代方案:

  • 编写一些样式表并动态选择正确的样式表.
  • 根据类名制作样式表规则,并在HTML中动态设置它们.
  • 对于javascript,在包含静态脚本之前定义父文档中的动态部分.最典型的情况是在文档中设置一些全局变量并在静态脚本中引用它们.
  • 作为构建/部署过程的一部分,将动态脚本编译为静态文件.这样,您可以在CSS中获得PHP的舒适度,但您仍然可以提供静态文件.

如果你想使用PHP动态生成CSS:

  • 覆盖缓存标头以允许浏览器和代理缓存它们.您甚至可以将缓存过期设置为"never",并添加伪造的查询字符串参数(例如<link rel="stylesheet" type="text/css" href="http://example.com/stylesheet.css?dummy=121748283923">)并在脚本更改时更改它:浏览器会将其解释为不同的URL并跳过缓存版本.
  • 设置URL重写,以便脚本的URL具有.css扩展名:一些浏览器(IE)因为在扩展名不匹配的某些情况下使MIME类型错误而臭名昭着,尽管Content-Type标题正确.


dre*_*010 10

有些人做得更好,就是在PHP中生成JS/CSS脚本并将它们缓存到文件中.

如果你使用PHP提供所有CSS/JS文件,那么你必须调用更多的PHP,这会产生更多的开销(cpu和内存),这在提供静态文件时是不必要的.最好让网络服务器(Apache/nginx/lighttpd/iis等)完成他们的工作并为您提供这些文件而无需PHP.


Ign*_*ams 5

无论是时间还是CPU,运行PHP引擎都没有零成本.而且由于CSS和JavaScript文件通常很少改变,让它们通过引擎运行完全没有任何意义是没有意义的; 最好让浏览器在适当的时候缓存它们.

  • 更不用说静态文件可以在CDN上托管 (3认同)