用 JSON 处理缓存
来自 IBM developerWorks 的《用 JSON 处理缓存》:
数据验证是每个企业 Web 应用程序中最富于挑战性、日新月异的部分。通常验证元数据会使 JavaScript 模块中混入服务器端代码。在本文中,您将了解如何在服务器代码的帮助下将元数据缓存在客户端的优秀方法,服务器代码将提供 JSON(JavaScript Object Notation)形式的字符串化元数据。这种方法还允许以类似 Ajax 的方式来处理多值和多组属性。
来自 IBM developerWorks 的《用 JSON 处理缓存》:
数据验证是每个企业 Web 应用程序中最富于挑战性、日新月异的部分。通常验证元数据会使 JavaScript 模块中混入服务器端代码。在本文中,您将了解如何在服务器代码的帮助下将元数据缓存在客户端的优秀方法,服务器代码将提供 JSON(JavaScript Object Notation)形式的字符串化元数据。这种方法还允许以类似 Ajax 的方式来处理多值和多组属性。
总算完成了这篇文章--PHP & memcached,希望对同学们有用,另外,欢迎大家一起交流讨论 。
如何分离个人信息,缓存动态页面
肖理达 (KrazyNio AT hotmail.com), 2005.06.07, 转载请注明出处
一直想写一篇关于动态页面 cache 的文章,但每次“提笔”却又放弃,因为总是觉得准备得还不够充分。今天埋头写下,只是希望对自己的工作做一些笔录。
1、问题起源
我们经常会在一个动态页面中加入很多个人信息,以 CMS 首页为例,用户登录之前显示登录框,登录之后显示其用户名,并根据权限显示其可用模块的链接。由于每个用户登录之后,显示出来的动态信息都是不一样的,所以这部分无法进行 cache,我们将这部分信息定义为“[u]个人信息[/u]”,它的特性是根据登录用户进行动态改变。
现在问题来了,就是一个 CMS 的首页,访问者的登录概率并不是百分百的,应该说有一大部分人访问首页是没有登录的,这个时候的首页是一个公共的页面,没有任何个人信息,或者说这时候首页的任何动态信息都是可以转换成静态的,也就是说这部分是可 cache 的。
2、使用 JavaScript 分离个人信息
解决这个问题的方法有很多种,一种是将个人信息和其他信息进行分离,如在 CMS 首页中加入一个外部的 JavaScript 文件,而这个文件的内容实际上是由 PHP 动态生成的。CMS 首页 index.php 代码片段:
<script language=”JavaScript” src=”/js/personal.php”></script>
….
<script language=”JavaScript”>
document.write(sUser);
document.write(sLinks);
</script>
personal.php 代码片段:
<?php
session_start();
header(”Cache-Control: no-store, no-cache, must-revalidate”);
?>
sUser = “<?php echo $_SESSION['USER']; ?>”;
sLinks = “<?php echo addslashes($_SESSION['LINKS']); ?>”;
这种方法比较适合个人信息较少,易于集中显示的情况。通过 JavaScript 外挂代码实现个人信息分离之后,personal.php 是永不 cache 的,这样也就可以放心地对 CMS 首页进行 cache 了,具体的 cache 方法可采用 304 […]
跟进中:Michael Radwin discusses HTTP caching in OSCON 2004. Points out that cookies do not need to be transmited for static images, and this requires separate domain. You really have to use a proxy software like TCP Trace to monitor HTTP behaviour.
今天发现 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; ?>';
在生成的静态 […]