php 压缩html css,PHP合并压缩css输出 模块化css撰写

本文探讨了如何通过模块化方式压缩CSS并利用浏览器缓存减少HTTP请求,比较了雅虎的内联CSS与PHP合并压缩的策略,以及对CSS压缩清理函数的详细解释。讨论了加载CSS的取舍,包括一次性加载所有CSS和按需加载的权衡,以及使用minify-css.php带来的灵活性提升。
摘要由CSDN通过智能技术生成

从某种角度讲,我们自从被压缩输出洗脑后,都在不断追求把css和js合并压缩后输出,以减少http请求数,达到加速网页的目的。但是昨天看到雅虎的做法是,直接将css写在网页中,使http请求数减少至0,或许大道至简。而今天,我们则利用php,将css压缩为一个请求,实现我们目前认为最简洁的输出方式。

我已经将该项目托管在GitHub,你可以通过这里fork它。完整的代码已经有了,这里就不列出来,只做剖析和使用方法介绍。

ob_输出

源代码中使用了ob_start和ob_end_flush两个函数,实现输出,而在ob_start的参数中传入了一个函数compress_css。

ob_start表示开始内容缓存,通过include将多个css包含进来,如果没有ob_start,按理应该是直接显示inlcude的css文件的内容。但是加入ob_start后,并不是直接显示出来,而是在执行ob_end_flush的时候才将内容显示出来,在这之前,所有的内容被存放在缓存(内存)中。

而给ob_start传入compress_css作为参数,则是在执行ob_end_flush之前,对内存的内容进行compress_css操作,因此,在输出内容的时候,css被压缩清理过了。

compress css

接下来我们简单讲解一下css的压缩清理。

function compress_css($css) {

$css = preg_replace('#\/\*[^*]*\*+([^/][^*]*\*+)*\/#isU','',$css); // 清除块级注释

$css = str_replace(array(''),'',$css);

$css = str_replace(array("\r","\r","","\t"),'',$css); // 清除换行、缩进

$css = preg_replace("/\s(?=\s)/",'',$css); // 连续的空格替换为一个空格

$css = preg_replace("#\s*(:|;|\{|\})\s*#","$1",$css); // 清除一些特定字符前后的空格,这里是可以扩展的,可以根据你的实际情况,添加或删除某些字符

return $css;

}

代码很简单,虽然可能会有一些遗漏,但是基本上可以将原有的代码压缩到比较小的容量。

浏览器缓存

浏览器缓存基于URL,因此,访客第一次访问你的网站的时候,请求1次该css即可,第二次访问的时候,会直接从浏览器缓存中读取css。

但是有一个小点需要注意,由于本文希望通过模块化的方式载入css,所以,如果你不同的页面载入不同的css,就会发现,请求不同的css的时候,会发出新的http请求。所以这里有一个取舍,你是愿意一次性加载所有的css,然后让用户在以后的访问中直接读取浏览器缓存中的css呢,还是愿意在不同的页面加载不同的css,以让css的容量达到最小而加快网页速度?

模块化载入

我们以往的习惯是,将所有的css写在一个css文件里面,然后通过压缩,创建一个min.css文件,但是仍然是所有的css。这会使很多没有起到实际作用的css被载入,从而影响网页的加载速度。同时,如果你修改了某个样式,需要再次去压缩一遍所有的css,不利于开发调试。

而使用minify-css.php的时候,你可以写很多个css文件,每个css文件功能用途不同,也可以放心的把插件的css和页面的css分开来。你甚至可以为你的网站每个页面撰写特殊的css。总之,css文件的个数并不影响最终的结果。

在url中使用一个f=参数,把想要保护的文件全部列出来,用一个英文逗号分开。比如:base.css,../plugins/a/css/a.css,index.css。

在列出这些文件的时候,必须要注意他们的载入顺序,css的优先级是从文件的末尾开始的,后面的样式会覆盖前面的样式,因此文件的载入顺序也很关键。

而通过这种方式,不仅能让你的网页css载入缩小,而且对于撰写开发来说,也更加灵活。

2016-01-17

2352

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值