【问题标题】:creating only new files in PHP without cpu intensive code仅在 PHP 中创建新文件,无需 cpu 密集型代码
【发布时间】:2015-08-02 07:42:42
【问题描述】:

在我的缓存系统中,我希望它在请求新页面时检查文件是否存在,如果不存在,则将副本存储在服务器上,如果存在,则它不能被覆盖。

我遇到的问题是我可能正在使用设计得很慢的函数。

这是我当前保存文件的一部分:

if (!file_exists($filename)){$h=fopen($filename,"wb");if ($h){fwrite($h,$c);fclose($h);}}

这是我加载文件的一部分:

if (($m=@filemtime($file)) !== false){
if ($m >= filemtime("sitemodification.file")){
    $outp=file_get_contents($file);
header("Content-length:".strlen($outp),true);echo $outp;flush();exit();
}
}

我想要做的是用一组更好的函数来替换它,以提高性能,但仍能实现相同的功能。包括 sitemodification.file 在内的所有缓存文件都驻留在 ramdisk 上。我在退出前添加了一个刷新,希望内容输出更快。

此时我不能使用直接内存寻址,因为要存储的文件大小都不同。

是否有一组我可以使用的函数可以将我提供的代码的执行速度提高至少几毫秒,尤其是加载文件代码?

我正在努力将我的时间保持在第一个字节的低位。

【问题讨论】:

    标签: php performance function performance-testing milliseconds


    【解决方案1】:

    首先,首选is_file 而不是file_exists 并使用file_put_contents

    if ( !is_file($filename) ) {
        file_put_contents($filename,$c);
    }
    

    然后,为这种工作使用适当的功能,readfile

    if ( ($m = @filemtime($file)) !== false && $m >= filemtime('sitemodification.file')) {
            header('Content-length:'.filesize($file));
            readfile($file);
        }
    }
    

    您应该会看到一些改进,但请记住,文件访问速度很慢,并且您在发送任何内容之前检查了 3 次文件访问权限。

    【讨论】:

    • 谢谢,但是filesize和readfile都不检查文件是否存在?
    猜你喜欢
    • 2011-08-08
    • 1970-01-01
    • 2021-06-07
    • 1970-01-01
    • 2018-11-24
    • 2023-02-07
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    相关资源
    最近更新 更多