技术频道导航
HTML/CSS
.NET技术
IIS技术
PHP技术
Js/JQuery
Photoshop
Fireworks
服务器技术
操作系统
网站运营
卡卡网是专业的网站测速平台,网速测试,测试网站速度,就来卡卡网 ~
问题反馈网络日志

【DiyVM】沙田机房/香港云/回国CN2线路/AMD EPYC/39元一月5M/CN2海外云主机 24元/月BGP+CN2海外云 低至25元/月海外主机 低至$2/月

DiyVM:香港VPS惊爆价36元一月
★站长/主播变现★有流量就来
5M CN2 GIA云主机 24元起
一一一云主机 26元起一一一
官方高价收量,每日稳定结算

一一云主机 24元 3折起一一
海外CN2云 低至$2.5/月
海外云低至2折 298/年
免费测试★APK免杀 谷歌过保护
官方收量CPA/CPS长期稳定

海外主机 5M CN2 低至$2/月
恒创科技 一 海外服务器 ● 高速稳定
★解决安装报毒★谷歌过保护机制
超级签★免杀★加固★满意付款
全球云主机 3天试用再买

【菠萝云】香港4G内存99元,马上开通
亿人互联-津/京BGP托管租用/VPS
苹果签名/APP封装/远控免杀
10M CN2海外云VPS 53元/月
CN2 GIA/1000Mbps $111/月

实力产品变现
实力产品变现
实力产品变现
实力产品变现
实力产品变现

赞助商

分类目录

赞助商

最新文章

今天使用PHP操作数据库,出现了错误,提示如下:PHP Fatal error:...
之前用 imagecopyresized() 生成缩略图,但是效果不是太理想,后...
编程就有这么奇妙,有时一个小小的错误,就可能导致来回折腾了不少时间,就在今天,我...
很多人在使用程序裁剪图片时,是在原图上直接裁剪,理想的做法是先等比缩小图片,再把...
今天在执行一个php程序时,出现了这样一个错误提示: Fatal error: ...
在本文中,我们将探讨如何在 PHP 编程语言中获取当前页面的 URL。 ...
今天用PHP生成网页,浏览时发现有些问题,就是开头总是空一行和出现几个乱码。一开...

搜索

使用HTTP_IF_MODIFIED_SINCE缓存提高php执行效率

作者:admin    时间:2012-5-22 21:38:49    浏览:3147

在php编程过程中,使用HTTP_IF_MODIFIED_SINCE缓存的技术我其实很少有用过,今天我突然有种感觉,用HTTP_IF_MODIFIED_SINCE缓存是否能在个别地方提高php的脚本执行效率呢。于是对个别代码进行修改。

下文中第一段脚本被每个用户通过AJAX请求调用多次,它调用不同服务器里另外一段脚本,用途是获得文本文件的最后一行,但是我认为还有很大的提升空间,进一步优化和提高效率。

AJAX 提交请求

  • <?php session_start();
  • $fileName = $_POST['textFile'];
  • $result = file_get_contents($_SESSION['serverURL']."fileReader.php?textFile=$fileName");
  • echo $result;
  • ?>

它对外部脚本发出请求读取一个文本文件

  • <?php
  • $fileName = $_GET['textFile'];
  • if (file_exists('text/'.$fileName.'.txt')) {
  •     $lines = file('text/'.$fileName.'.txt');
  •     echo $lines[sizeof($lines)-1];
  • }
  • else{
  •     echo 0;
  • }
  • ?>

下面给出了几种优化方法

脚本1我做了如下优化:

  • <?php
  •   session_start();
  •   // added basic argument filtering
  •   $fileName = preg_replace('/[^A-Za-z0-9_]/', '', $_POST['textFile']);
  •   $fileName = $_SESSION['serverURL'].'text/'.$fileName.'.txt';
  •   if (file_exists($fileName)) {
  •       // script 2 could be pasted here
  •       //for the entire file
  •       //readfile($fileName);
  •       //for just the last line
  •       $lines = file($fileName);
  •       echo $lines[count($lines)-1];
  •       exit(0);
  •   }
  •   echo 0;
  • ?>

脚本2可以通过缓存进行优化,但那样比较复杂。

  • <?php
  •   $lastModifiedTimeStamp filemtime($fileName);
  •   if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
  •       $browserCachedCopyTimestamp = strtotime(preg_replace('/;.*$/', '', $_SERVER['HTTP_IF_MODIFIED_SINCE']));
  •       if ($browserCachedCopyTimestamp >= $lastModifiedTimeStamp) {
  •           header("HTTP/1.0 304 Not Modified");
  •           exit(0);
  •       }
  •   }
  •   header('Content-Length: '.filesize($fileName));
  •   header('Expires: '.gmdate('D, d M Y H:i:s \G\M\T', time() + 604800)); // (3600 * 24 * 7)
  •   header('Last-Modified: '.date('D, d M Y H:i:s \G\M\T', $lastModifiedTimeStamp));
  • ?>

但是对于上述第2个脚本优化,如果是在内存读整个文件看似需要点额外开销,如果文件较小,这个优化方法还是不错的。但是如果文件较大,可能使用 fopen() 、 fseek() 、fread()更好些。

  • $filePointer = fopen($fileName, 'r');
  • $i = 1;
  • $chunkSize = 200;
  • do {
  •     fseek($filePointer, -($i * $chunkSize), SEEK_END);
  •     $line = fread($filePointer, $i++ * $chunkSize);
  • } while (($pos = strrpos($line, "\n")) === false);
  • return substr($line, $pos + 1);

本次优化主要是使用了HTTP_IF_MODIFIED_SINCE缓存的技术,通过这样优化后,程序的执行效率有没有提高呢,而服务器的性能是否也会因此而受到影响呢?虽然目前我还没有正式试验,但从程序分析上来看,优化效果肯定不错。

标签: 缓存  
x
广告: CN2云主机 免费试用