В моей кеш-системе я хочу, чтобы при запросе новой страницы выполнялась проверка, существует ли файл, а если нет, то копия сохраняется на сервере. Если он существует, то он не должен быть перезаписан
У меня проблема в том, что я могу использовать функции, предназначенные для медленной работы.
Это часть моей текущей реализации для сохранения файлов:
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, находятся на виртуальном диске. Я добавил сброс перед выходом в надежде, что контент будет выводиться быстрее.
Я не могу использовать прямую адресацию памяти в это время, потому что размеры файлов, которые будут сохранены, все различны.
Есть ли набор функций, которые я могу использовать, чтобы выполнить код, который я предоставил, быстрее, по крайней мере, за несколько миллисекунд, особенно код загрузки файлов?
Я пытаюсь сократить время до первого байта.
Во-первых, предпочитаю 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);
}
}
Вы должны увидеть небольшое улучшение, но имейте в виду, что доступ к файлам медленный, и вы проверяете доступ к файлам три раза перед отправкой любого содержимого.
Других решений пока нет …