关于 Cache(2)

Posted on 30th July 2004 by Nio in Cache, 程序人生

今天发现 PHP Everywhere 还在讨论前两天的 WEB Cache 问题:Caching Personalised Pages,文中就 Shaz 的评论进行分析,提到了几种关于如何实现个性化页面的 Cache 的方法:

1) 使用 SESSION 存放用户个性化数据,比如用户名、头像图片地址之类的数据,但是这种方式不能存放过多的数据。

2) 将用户个性化数据集中在页面的某个区域,然后将页面的其他部分生成静态的 HTML 文件。当然,这是比较理想的状况,一般可能不会太容易实现。

3) 为了更新过时的数据,可以使用计数器,用于保存页面的更新次数,此计数器值保存在数据库中,然后创建触发器,此触发器可以保存在像 PostgreSQL 或 Oracle 这样的数据库中,也可以在 PHP 代码中实现。每次用户登录访问页面时,取出页面的更新计数值,与用户 SESSION 中保存的这个值进行相比较,如果这两个值不相同,表示页面已经更新,此时触发器将重新加载用户的个性化数据。这种方法必须是 [u]获取更新计数的代价[/u] 小于 [u]更新用户个性化数据的代价[/u] 才行。

4) 另外一种方式是利用客户端浏览器 Cache 数据。创建一个由 PHP 生成的 JavaScript 代码文件,用户登录之后会通过此 JavaScript 获取其个性化数据。当然,此 JavaScript 必须输送恰当的 caching 头文件信息,否则浏览器不会进行正确更新缓存文件的动作。保存个性化数据的 JavaScript 代码类似于:

theUser='<?php echo $_SESSION['USER_NAME'J; ?>';
theFavoriteIcon = '<?php echo $_SESSION['FACE_ICON'J; ?>';

在生成的静态 HTML 文件中,使用如下代码输出个性化数据:

<script> document.write(theUser) </script>

此技巧可以在服务器端 Cache 整个 HTML 页面,另外还可以在客户端 Cache 用户个性化数据。

在我的实践中,使用过第 1、2、4 在种方法,还有一种方法就是将动态的数据放入 iframe 中,只不过这种方式通常会导致页面不太美观。我非常赞同最后一种方式,因为这种方式可以将动态数据与静态 HTML 文件分开,很好地实现 Cache 页面的目的。另外,HTTP conditional requests in PHP 写得很棒,以前对这个机制一直不是很了解,这几天决定研究研究。

关于 Cache(1)

Posted on 28th July 2004 by Nio in Cache, 程序人生

今天看到 PHP Everywhere 中有一篇关于 Cache 的文章:The Way of the Cache。文中谈到一个关于各种 PHP CMS Cache 的 benchmark,参与比较的 PHP CMS 包括:* e107 0.615
* Drupal 4.4.2
* Xoops 2.0.7
* Manbo 4.5
* Post-Nuke
* Xaraya 0.9.9

image

(more…)

开始 DB2 的生活

Posted on 28th July 2004 by Nio in 程序人生

一直以来,公司的软件产品主要基于 MySQL 和 Oracle 两种数据库,有钱的客户就用 Oracle,没钱的用 MySQL。但最近由于公司与 IBM 进行合作,有些产品销售方案中包含了 DB2,所以从今天开始钻研 DB2 了,主要是 PHP 与 DB2 的结合,如果有人有这方面的资料(除了 IBM developWork 之外的),请告诉我,好让我尽快进入状态,呵呵。

很想出去旅行

Posted on 27th July 2004 by Nio in 日常生活

整天工作工作,coding coding,人都快憋坏了,只好每天晚上打 CS 发泄发泄,看到网上好多人都出去旅游了,自己也开始动心了,但是没法请假,好惨呀~~

关于 Trustix Secure Linux 2.1 下的 cron

Posted on 23rd July 2004 by Nio in 程序人生

今天在 TSL 2.1 下加了个定时任务,脚本放在 /etc/cron.hourly 目录下,结果发现过来几个小时了都没有执行。于是就找了一下配置文件,发现没有 /etc/crontab 文件,而在 Redhat 中,/etc/cron.(hourly|daily|weekly|monthly) 的定时任务都是在 /etc/crontab 中设置的。

原来 TSL 使用的是 fcron,默认情况下不存在系统的 crontab,只对用户有 crontab 的概念。在 TSL 2.0 的时候,root 的 crontab 中有如下内容:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/bin:/usr/sbin
MAILTO=root
HOME=/

# Run-parts
01 * * * * run-parts /etc/cron.hourly
02 2 * * * run-parts /etc/cron.daily
22 0 * * 0 run-parts /etc/cron.weekly
42 0 1 * * run-parts /etc/cron.monthly

而到了 2.1 则去掉了,如果想在 2.1 执行 /etc/cron.(hourly|daily|weekly|monthly) 的话,可以以 root 身份,使用 crontab -e,将上述代码加入到 root 的 crontab 中。加完之后,在 /var/spool/fcron 目录下会有 root 和 root.orig 文件,root.orig 是文本的内容。

Update:如果想要系统 crontab 的话(实际上还是 root 的 crontab,为了避免混淆,TSL 才将其去掉),可以创建 /etc/fcrontab 文件,然后在此文件中加入上述 root 中的内容,最后通过运行

fcrontab /etc/fcrontab

使其生效,以后只要修改了 /etc/fcrontab 文件,都要运行此命令才能生效。

(more…)