简单的页面缓冲技术
前言
其实说它为技术,也许不能说是真正的技术。这只不过是我自已想出来的页面处理的方法,当然与别人 的想法可能是一致的。不过我还是想给它一个好听的名字。那么我这里所指的页面缓冲是什么呢?就是指将动态生成的页面保存起来,供下一次的使用。这样下一次访问它可能就不需要动态生成了。就象提供了一个cache 一样。在我的网站上,也许你的网站也是如此,使用了象模板之类的技术,这样用户所看到的页面就 是动态生成的。但是一个页面对于你是这样,对于别人可能还是这样,即在一段时间内是不会变化的,如果 将上次生成的结果直接返回给下一次访问的用户不是更好吗?减少了生成时间,效率要高一些。我想随着网 站的发展,速度与效率问题还是要考虑的。这里我给出我的实现,希望对大家有所帮助。只是一个思路,没 有具体的实现。
使用条件
是不是所有的网页最好都使用呢?我想不需要,而且也不可能。之所以能缓冲就是因为下一次访问与上 一次访问的内容可能是完全一样的。所以对于经常变化的页面就不合适了。比如页面上要显示计数信息的就不太合适。还有就是如果你的动态页面输出时,没有先输出到变量中,而是直接返回给用户,如使用echo, print ,readfile之类的输出,我个人认为现在还作不到。因为无法将输出结果得到,保存到文件中去(反 正我是想了半天没有想出有什么可以将直将输出的东西截下来,重定向到文件中去)。那么比较适的动态页面的处理就是:输出结果应该可以放到一个字符串之中。所以使用条件就是:
页面基本不会变化
动态页面的处理结果可以存放到字符串中
这样使用模板类来处理动态页面就很好了。通过在模板中设置可替换的变量,然后根据实际的值替换相 应的模板中的变量,同时可以将结果放到字符串中进行输出,这种模板类的处理非常适合保存处理后的页面。当然不使用模板类,也可以通过字符串的处理来生成输出结果也是可行的。至于怎么做就不讨论了。
实现
如前所述,不是一个真正的实现,而是一个实现的思路。
处理流程:
根据访问的要求,生成缓冲文件名
查看文件名是否存在,如果文件不存在,则生成动态页面,将页面保存,同时输出结果,结束;如果 存在,则执行第3步统计文件的修改时间,及与动态页面生成有关的文件的修改时间 比较缓冲文件的修改时间与其它页面的修改时间,如果其它页面修改时间大于缓冲文件修改时间,认为动态结果可能会发生变化,则重新生成动态页面结果,保存到文件中,且输出结果,结束;否则执行第5步
说明缓冲文件最新,则直接输出缓冲文件
这就是我的处理。至于缓冲文件如何保存,可以建一个临时目录也可以使用数据库处理。如果使用了数 据库则判断文件是否最新的方式也应作变化,比如在数据库中增加生成时间字段,比较这个时间字段与其它文件的修改时间即可。方法大家自已想。
我的具体实现的例子
为了帮助大家有个感性认识,这里我给出在我的主页上实现的基于文件处理的方法。只有主要的处理代
码,不完整。
--------------------------------------------------------------------------------
1 $tmpfile="../tmp/".basename($REQUEST_URI);
2 $tmpfile=str_replace("?", "_", $tmpfile);
3 $tmpfile=str_replace("&", "_", $tmpfile);
4 if(file_exists($tmpfile))
5 {
6 $cflag=false;
7 $dtmp=filemtime($tmpfile);
8 $itmp=filemtime($incfile);
9 $cflag=$cflag | ($dtmp 10 $ctmp=filemtime(basename($PHP_SELF));
11 $cflag=$cflag | ($dtmp 12 $ttmp=filemtime("template/content.ihtml");
13 $cflag=$cflag | ($dtmp 14 }
15 else
16 $cflag=true;
17
18 if(!$cflag) //使用存在的文件
19 {
20 readfile($tmpfile);
21 exit;
22 }
23
24 //创建新的文件
25 include "template.class.php3";
26
27 $fp=fopen($incfile, "r");
28 $content=fread($fp, filesize($incfile));
29 fclose($fp);
30
31 //下面进行模版处理
32 $t = new Template("template", "keep");
33
34 $t->set_file("contentfile","content.ihtml");
35
36 $t->set_var(
37 array(
38 "content"=>$content
39 ));
40
41 $t->parse("outputcontent","contentfile");
42
43 $fp=fopen($tmpfile, "w");
44 if($fp)
45 {
46 flock($fp, 3);
47 fwrite($fp, $t->get_var("outputcontent"));
48 flock($fp, 1);
49 fclose($fp);
50 }
51 $t->p("outputcontent");
?>
--------------------------------------------------------------------------------
先向大家介绍一下我的目录结构:
/---bin/ 执行程序目录
| |--content.php3 用于处理文件显示的程序
| |--template/ 用于存放模板文件的目录
| |---content.ihtml 模板文件
|-docs/ 数据文件
|-tmp/ 存放缓冲文件
content.php3文件用来处理动态页面。用户可以通过content.php3?page=id号来读出一个数据文件。具
体方法我就不说了,大家只要知道每个数据文件都有一个不同的id号,这样content.php3?page=id号的方式
就可以唯一标识一个数据文件。
第1-3行,生成临时文件名。将'?','&'等字符替换成'_'。
第4行,判断临时文件名是否存在,如果有则执行第18-22行,并结束。
第6-13行,判断与生成动态页面有关的文件修改时间与临时文件哪个更新,设置重新生成标志。在这里使用
filemtime()来得到最后修改时间。
第24-41行,利用模板类生成动态结果,放在变量中。关于模板的处理可以参考《模板,PHPLIB处理方式》
一文。
第43-50行,生成临时文件。此处对文件进行了加锁处理,以象写冲突。
第51行,输出结果。
这就是我的处理,大家可以自行修改。
缓冲是一项有意义的技术,可以提高访问速度,减少系统消耗。不过方法可能有多种多样,大家可以自
由发挥。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











PHP 함수 소개—filemtime(): 파일의 마지막 수정 시간 가져오기 개요: PHP에서 filemtime()은 파일의 마지막 수정 시간을 가져오는 데 사용되는 매우 일반적으로 사용되는 함수입니다. 이 기능을 통해 파일의 마지막 수정 타임스탬프를 가져와 파일 작업 및 처리를 용이하게 할 수 있습니다. 이 기사에서는 filemtime() 함수를 사용하는 방법을 소개하고 독자가 이 함수를 더 잘 이해하고 사용할 수 있도록 코드 예제를 제공합니다. 함수 구문: intfilemtime

Golang 및 템플릿 패키지: 개인화된 사용자 인터페이스 만들기 현대 소프트웨어 개발에서 사용자 인터페이스는 사용자가 소프트웨어와 상호 작용하는 가장 직접적인 방법인 경우가 많습니다. 사용하기 쉽고 아름다운 사용자 인터페이스를 제공하기 위해 개발자는 사용자 인터페이스를 만들고 사용자 정의할 수 있는 유연한 도구가 필요합니다. Golang에서 개발자는 템플릿 패키지를 사용하여 이 목표를 달성할 수 있습니다. 이 기사에서는 Golang 및 템플릿 패키지의 기본 사용법을 소개하고 코드 예제를 통해 개인화된 사용자 인터페이스를 만드는 방법을 보여줍니다.

Golang의 템플릿 패키지를 통한 데이터 시각화 빅데이터 시대의 도래와 함께 데이터 시각화는 정보 처리 및 분석의 중요한 수단 중 하나가 되었습니다. 데이터 시각화는 데이터를 간결하고 직관적인 방식으로 제시하여 사람들이 데이터를 더 잘 이해하고 분석하도록 돕습니다. Golang에서는 템플릿 패키지를 사용하여 데이터 시각화 기능을 구현할 수 있습니다. 이 기사에서는 Golang의 템플릿 패키지를 사용하여 데이터 시각화를 구현하고 코드 예제를 제공하는 방법을 소개합니다. 골랑템

PHP 함수 "filemtime"을 사용하면 파일의 마지막 수정 시간을 얻을 수 있습니다. 사용법은 매우 간단합니다. 파일 경로를 매개변수로 전달하면 함수는 파일의 마지막 수정 시간을 나타내는 타임스탬프를 반환합니다. 다음으로 이 기능의 사용법과 몇 가지 코드 예시를 소개하겠습니다. PHP에서는 다음과 같은 방법으로 "filemtime" 함수를 사용할 수 있습니다: $file_path='path/to/file.txt';//파일 경로

Go 언어는 간결한 구문, 효율적인 성능 및 손쉬운 개발을 통해 점점 더 인기를 얻고 있는 프로그래밍 언어입니다. Go 언어는 "text/template"이라는 강력한 템플릿 엔진을 제공하지만, 이를 사용할 때 "undefine:template.Must" 오류가 발생할 수 있습니다. 다음은 이 오류를 해결하는 방법입니다. 올바른 패키지를 가져오십시오. "텍스트/템플릿" 템플릿 엔진을 사용하는 경우 "텍스트/템플릿"을 가져와야 합니다.

PHP 함수 소개: is_file() 함수 PHP 프로그래밍에서 is_file() 함수는 매우 유용한 함수입니다. 경로나 파일이 존재하는지, 일반 파일인지 판단하는데 사용됩니다. 이 기사에서는 is_file() 함수를 사용하는 방법을 소개하고 몇 가지 구체적인 코드 예제를 제공합니다. 먼저 is_file() 함수의 구문을 살펴보겠습니다. boolis_file(string$filename)is_

Golang 및 템플릿 패키지: 강력한 프런트엔드 개발 도구 상자 구축 오늘날의 소프트웨어 개발에서 프런트엔드 개발은 프로젝트 전반에 걸쳐 점점 더 중요해지고 있습니다. 우아하고 안정적인 프런트 엔드 개발 솔루션을 제공하기 위해 Golang 언어와 내장 템플릿 패키지를 사용할 수 있습니다. 이 기사에서는 Golang과 템플릿 패키지를 사용하여 강력한 프런트 엔드 개발 도구 상자를 구축하는 방법을 소개합니다. 1. Golang: 효율적이고 사용하기 쉬운 프로그래밍 언어 Golang은 현대적인 언어입니다.

Golang 및 템플릿 패키지: 편리한 프런트엔드 인터페이스를 신속하게 개발 현대 웹 개발에서 프런트엔드 인터페이스 개발은 중요하고 필수적인 링크입니다. 프런트엔드 인터페이스의 디자인은 아름다워야 할 뿐만 아니라 사용자 경험도 좋아야 합니다. 그러나 전통적인 프런트엔드 개발 프로세스에는 많은 시간과 노력이 필요한 경우가 많습니다. 다행스럽게도 Golang은 개발자가 편리한 프런트엔드 인터페이스를 빠르게 구축할 수 있도록 설계된 템플릿 패키지를 제공합니다. Golang은 효율적이고 간결하며 동시적이고 정적인 유형의 언어입니다.
