編集:これは私のコードのバグが原因でした(おそらく)。デバッグしてテストで正しい応答のチェックを追加した後、テストで違いがないことを証明します(少しイライラします)。以下の私自身の回答で詳しく説明します。
/編集
こんにちは、
私は PHP 用の SASS 用の小さな CSS ラッパーを自分で作成し、SASS ファイルを実行する前にファイル名と可能なフラグを受け入れるようにプログラムしました (フラグが立てられていない場合は、おそらくキャッシュします)。
また、いくつかのテストとバージョン番号も実施しました。2は、バージョン番号よりも約2 倍から 4 倍遅くなります。1、ただし、バージョン1はバージョン2よりも多くのコードを実行する必要があります (最初にフラグの URL を解析するのではなく、ディスクから直接インクルードします)。
なぜ実際にテストが一貫しすぎて、ディスクアクセスのオーバーヘッドでそれを呼び出すことができないのか、私にはわかりません。
速度テストは次のとおりです。
最初に - ファイルを生成し、次に - キャッシュから要求するだけ
バージョン 1 合計: 10.886秒 平均: 10.886ミリ秒/ファイル 最初: 466.42ミリ秒
バージョン 2 合計: 21.235秒 平均: 21.235ミリ秒/ファイル 最初: 14.54ミリ秒キャッシュから要求するだけ
バージョン 1 合計: 7.886秒 平均: 7.886ミリ秒/ファイル (最初): 2.93ミリ秒
バージョン 2 合計: 21.657秒 平均: 21.657ミリ秒/ファイル (最初): 6.98ミリ秒バージョン
1 実行 1: 合計: 7.915 平均: 7.915ミリ秒/ファイル 最初: 2.49ミリ秒
バージョン 2 実行 1: 合計: 9.508 平均: 9.508ミリ秒/ファイル 最初: 3.23ミリ秒
バージョン 1 実行 2: 合計: 1 :17.137 平均: 7.714ミリ秒/ファイル 最初: 4.61ミリ秒
バージョン 2 実行 2: 合計: 1:15.717 平均: 7.572ミリ秒/ファイル 最初: 2.69ミリ秒 * - 実行 2 は10,000呼び出しでした。
バージョン 1
/* HELPER FUNCTIONS */
function is_option($opt) { global $url_options; return in_array($opt,$url_options); }
function fail($message) { echo $message; die(); }
//prepare options array
$options=array();
$url_options = @explode('_',basename($_GET['f']));
if (!is_array($url_options))
{ fail('Wrong parameters given (or parameter can\'t be accepted)'); }
$loadfile = array_shift($url_options);
if (!file_exists('source/'.$loadfile.'.sass'))
{
if (!file_exists('source/'.$loadfile.'.scss'))
fail('Wrong parameters given (file doesn\'t exist)');
else
$options['property_syntax']='scss';
}else{
$options['property_syntax']='sass';
}
$src_file = 'source/'.$loadfile.'.'.$options['property_syntax'];
$css_file = 'cache/'.$loadfile.'.css';
if (file_exists($css_file) && !is_option('no-cache'))
{
header('content-type: text/css');
require($css_file);
die(); //ALL OK, loaded from cache
}
バージョン 2
//quick! load from cache if exists!
if (file_exists('cache/'.($cachefile=basename('/',$_GET['f']))))
{
header('content-type: text/css');
require('cache/'.$cachefile);
die(); //ALL OK, loaded from cache
}
/* HELPER FUNCTIONS */
function is_option($opt) { global $url_options; return in_array($opt,$url_options); }
function fail($message) { echo $message; die(); }
//prepare options array
$options=array();
$url_options = @explode('_',basename($cachefile));
if (!is_array($url_options))
{ fail('Wrong parameters given (or parameter can\'t be accepted)'); }
$loadfile = array_shift($url_options);
if (!file_exists('source/'.$loadfile.'.sass'))
{
if (!file_exists('source/'.$loadfile.'.scss'))
fail('Wrong parameters given (file doesn\'t exist)');
else
$options['property_syntax']='scss';
}else{
$options['property_syntax']='sass';
}
$src_file = 'source/'.$loadfile.'.'.$options['property_syntax'];
$css_file = 'cache/'.$loadfile.'.css';
おそらくバージョン 1 を使用します。実行するコードが少ないにもかかわらず、なぜ v2 の方が正確に遅いのかを理解したいと思います...
編集:readfile
よりも少し速いようでrequire
、2 つのバージョンが統計的に同じになるように見えますが、バージョン1はまだ高速です (ただし、1000 回と 10000 回の呼び出しでわずか 2 秒なので、これはランダムなディスク使用量である可能性があります)。