Archive
Posts Tagged ‘优化’

WinXP 的系统盘清理方法

August 14th, 2009 2 comments

有时候,在许多老一点的机器上或是分区不合理的情况下,我们会遇到 C 盘空间不够的错误信息。C 盘作为系统盘(本文默认系统安装在 C 盘上),足够的可用空间对于操作系统的正常运行无疑是非常重要的。所以,有必要分区进行一次清理。我在帮他人修机器的过程中,数次碰到了这样的问题,因此根据经验总结一下。虽然有些时候,一些系统工具也可以完成清理系统的工作,但程序是死的,人是活的,所以在清理的效果上,我觉得手动操作的效果会更好一些,而且对于你清理的每个东东是什么也可以大概了解一番,可以有效避免误删。

首先,为了正确查看到各个文件夹,可以在控制面板的“文件夹选项”中把“显示系统文件夹的内容”、“显示所有文件和文件夹”这些选项勾上,以便清理。

  • 删除 C:\Windows\SoftwareDistribution\Download 中的所有内容。此文件夹是 Windows Update 自动更新程序从网上下载的补丁文件,往往在系统执行了自动更新以后,并不会被自动清除,可以手动将所有内容删掉。
  • 删除 C:\Windows 下面所有以 $NtUninstall 开头的文件夹。此文件夹也与 Windows 更新有关。往往你在打了补丁以后,系统会将被替换掉的系统文件放到这里,并启用 NTFS 压缩(所以文件夹会显示蓝色)。另外还有一个 $hf_mig$ 的文件夹也是备份的内容,可以删除。删除这些文件夹的后果是,在“添加/删除程序”中看到的那些 Windows 更新无法被卸载了,因为备份已经被删掉。当然,很少有人需要将系统补丁卸载掉,那样就失去补丁的意义了。
  • 删除 C:\Windows 下面的 ie7、ie7updates、ie8 和 ie8updates 文件夹。这些文件夹是在安装 IE7 或者 IE8 浏览器时对系统文件作出的备份,以及应用于 IE7 和 IE8 的补丁文件备份。同样,如果不需要卸载新安装的浏览器和补丁,可以删除这些文件夹。
  • 以上是几个清理起来比较管用的地方,往往可以腾出 1GB 甚至更多的可用空间。下面说的属于非正常的清理。只供参考。

  • 清除系统文件保护的缓存文件。在 cmd.exe 中输入 sfc /purgecache 这个命令,等待硬盘一阵狂转后,C:\Windows\System32\dllcache 文件夹就被清空了。再敲入 sfc /cachesize=0 可以确保缓存为空,以后也不会添加文件进来。这个操作也能释放很多空间,但是由于它是以放弃系统文件保护为代价的,所以执行的时候有必要斟酌一下。
  • 清除帮助文件和日韩输入法文件。C:\windows\help 下面有 70MB 左右的帮助文件,然而一般人是很少看帮助的,所以可以将其中的文件删除掉,以节省空间。注意其中的子文件夹可以清空,但其本身不可被删除,因为有系统文件保护在随时监控。C:\windows\ime 目录下安装了中日韩三种语言的输入法。对于用不到日语和韩语输入的用户,可以清除这些文件夹。这些文件夹含有 cht 、 jp 、 kr 等字眼。删除这些文件夹后不会影响相关文件和网页的显示,它们只是输入法而不涉及语言的解释和显示。
  • c:\msocache 也是可以删除的对象。它是 Microsoft Office 程序向硬盘中缓存的安装程序,以便进行日后的添加、修改等操作。这些文件删除了不影响 Office 程序的使用,但进行 Office 功能变更比如添加组件的时候需要重新提供安装程序。然后 Office 安装程序还会把这些文件缓存一遍。(很不能忍)
  • C:\config.msi 与上面类似,它是 Windows Installer 运行时产生的配置和备份文件,觉得占地方了就删除吧,不影响已安装的程序的使用。
  • C:\Program Files 文件夹占用的地方很多,可惜这里面都是实打实的程序,不能乱动。如果觉得看着这么多程序不顺眼,可以把程序安装到别的分区中去。

  • c:\Documents and Settings 则是用户配置文件夹,有点类似于 UNIX/Linux 中的 /home 。用户账户从系统删除以后,它的用户文件夹并不会被删除。需要的时候可以把里面有用的文件复制出来(多半位于 Desktop 中),然后把文件夹删除掉。
  • 不得不提的是临时文件夹,这个文件夹的位置依据系统的环境变量来确定。在控制面板 -> 系统 -> 高级 -> 环境变量 中可以查看到。一般位置是 c:\documents and settings\USERNAME\local settings\temp ,其中要把 USERNAME 替换成自己的登录名。这个文件夹是系统中的程序存放运行时临时文件的地方。程序们都很无良,管用不管删,创建的文件就那样扔在文件系统中,日子长了文件夹就自然变大了。这些文件都可以放心删掉。

说了这么多,附加着提一下“虚拟缓存页面文件”和“休眠”文件。前者的名字是 pagefile.sys ,用于虚拟内存。系统默认是自动管理的,然而有时候我们不需要它出现在 C 盘,这时可以在“系统”属性中调整它的位置。后者是用于休眠的系统文件。如果启用了休眠,C 盘下就会出现一个 hiberfil.sys,它和你当前的系统内存一样大,用于在休眠的时候把内存中的文件转储到硬盘中。一般来说还是待机更方便一点,所以这个文件也可以清除掉。方法是在控制面板的电源选项中,把“启用休眠”前的勾去掉。

最后提醒一下,删除之前,最好把系统中重要的文件备份一下,避免因为误操作造成损失。总之,希望这些总结能起到应有的作用~ :-)

Wordpress 手动提速 – 缓存优化

May 19th, 2009 16 comments

由于大多数的 wordpress 博客都架设在与他人共享的虚拟主机上,所以速度和优化便成了 blogger 们经久不哀的话题。为了优化,我也看过不少的文章。看来看去,很多人只是老调重弹地讲了 WP Super Cache 插件;以及有些空泛地提出要去除不必要插件、优化 javascript 等,可惜这只说明了方向问题却没有点明该如何朝这个方向去做。只好依自己生平所学,手动地折腾了一把 Wordpress 优化。

服务器端缓存机制

虚拟主机用户一般无法更改服务器的配置,我们也就不能在这方面有很大的期望。不过“缓存”这一手段仍然是一种相对可行的底层优化方法。Wordpress 有众多的缓存插件来支持这一行为,包括 WP Cache、WP Super Cache、DB Cache 等。

WP Cache 和 WP Super Cache 这样的插件通过生成 HTML 静态页面来降低服务器负荷,达到提速的目的。我个人却不太喜欢这样的方式。其原因有:一,这样做会丧失动态网站的灵活性。特别是那些根据客户端不同会作出不同响应的功能。比如我的主题中有一个 is_bot() 函数,用来针对搜索引擎的机器人作出一些 SEO 的调整。一旦我启用了静态缓存插件,便丧失了这种灵活性。有人说这些功能可以改成 Javascript 实现,但真要改动起来也比较麻烦,有些得不偿失。二,某些个人博客的瓶颈并不在PHP执行这个环节,而是客户与服务器之间的网络线路。甚至我认为,个人博客没有上万的 PV 完全没有必要采用静态化的策略。

DB Cache 插件我觉得可以试试,因为它的原理是缓存数据库查询,特别是虚拟主机中数据库服务器不是本机(localhost)时,这个插件会提高响应速度。但必须注意的一点是很多虚拟主机对于每用户可占用的内存是有限制的,如果这个值太低,那么这个插件也不太适用。

把缓存交给用户

与其在服务器上费力地设置缓存,更好的办法其实是“把缓存交给用户”。我用 Firebug + Yslow 分析自己博客的时候,发现它提示我的博客没有给静态内容设置缓存。于是用 cURL 连接到网站上通过观察 HTTP Header 来分析了缓存的机制。我的博客上 Apache 会发送“Last-modified”和“E-Tag” Header,这似乎也是大多数博客虚拟主机的配置。这样浏览器在请求的时候会发出“If-modified-since”请求,让服务器判断请求的内容(比如图片)是否在某个时间(通常是浏览器缓存的时间)以后发生变化。如果没有变化,服务器返回 HTTP 304 Not Modified 响应,浏览器则可以放心地使用本地缓存,从而降低了 HTTP 请求开销。

Yslow 建议给静态内容设置一个“永久”的缓存。这个永久通常是设置一年甚至更长的缓存期来实现的。设置缓存以后,服务器在对请求作出响应的时候会附加一个 Expires Header,告诉浏览器这个东西在多长时间内不会过期。这样浏览器就可以放心地使用缓存,甚至连 If-modified-since 请求和一个 HTTP 304 响应也不必要了。这样就大大地节省了在网络上的开销。访问者只是在第一次访问时会请求动态内容,接下来则会直接使用缓存的内容,达到了“把缓存交给用户”的目的。

实现方法

要做到这个也是件很容易的事情,对于 Apache 服务器来说,使用 mod_expire 就能轻松地设置缓存期。在 .htaccess 文件中加入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<IfModule mod_expires.c>
# 启用缓存机制
ExpiresActive On
 
# 图片缓存时间为 1 年
ExpiresByType image/gif "now plus 1 year"
ExpiresByType image/jpeg "now plus 1 year"
ExpiresByType image/x-icon "now plus 1 year"
ExpiresByType image/png "now plus 1 year"
 
# Javascript, CSS 缓存时间为 12 小时
ExpiresByType text/css "now plus 12 hours"
ExpiresByType text/javascript "now plus 12 hours"
ExpiresByType application/javascript "now plus 12 hours"
</IfModule>

有人要说,如果我的内容改变了怎么办呢?因为这样设置以后浏览器并不会向服务器询问是否有新的内容,而是老老实实地相信自己的缓存内容了。
如果你的改动是少数的几个图片,那么只需要在图片的 URL 后面自己加上一个任意的 query string 即可。比如说原来的图片 URL 是

http://blog.xiaoding.org/wordpress/wp-includes/images/smilies/icon_smile.gif

现在只需要在原地址后面加上一个 query 参数即可,此参数对于静态内容可以任意构造,我此处写的是 AnyQueryString

http://blog.xiaoding.org/wordpress/wp-includes/images/smilies/icon_smile.gif?AnyQueryString

这样浏览器会认为此时的图片与原来的不同,将再一次下载它。于是我们就达到了更新的目的。