Neden bu kod bu kadar hızlı?

0 Cevap php

EDIT: This has been because of bug in my code (probably), after debugging and adding checking for correct response in my tests, test prove NO difference (what irks me a little), more in my own answer below.
/EDIT

Merhaba,

Kendimi PHP için SASS için biraz CSS sarıcı yazılı ve (aksi bayraklı değilse, ve muhtemelen önbelleğe alma) Çalışıyorsa önce benim SASS dosya dosya ve olası bayraklar kabul etmek programlanmış ettik.

Ben de, birkaç test ve sürüm nr yürüttük. 2 sürümü nr daha 2x - 4x yavaş etrafında bir şeydir. Version 1 daha fazla kod çalıştırmak olmasına rağmen 1, ardından sürüm 2 (Bu, düz diskten dahil, yerine bayraklar için ilk URL ayrıştırma daha gelmez).

Ben gerçekten neden bunu anlamıyorum ve testleri disk erişim havai onu aramak için biraz da tutarlıdır.

İşte hız testleri şunlardır:

First - generate file, then - just require from cache
Version 1 total: 10.886 s avg: 10.886 ms/file first: 466.42 ms
Version 2 total: 21.235 s avg: 21.235 ms/file first: 14.54 ms

Just require from cache
Version 1 total: 7.886 s avg: 7.886 ms/file first: 2.93 ms
Version 2 total: 21.657 s avg: 21.657 ms/file first: 6.98 ms

Version with readfile instead of require
Version 1 run 1: total: 7.915 avg: 7.915 ms/file first: 2.49 ms
Version 2 run 1: total: 9.508 avg: 9.508 ms/file first: 3.23 ms
Version 1 run 2: total: 1:17.137 avg: 7.714 ms/file first: 4.61 ms
Version 2 run 2: total: 1:15.717 avg: 7.572 ms/file first: 2.69 ms * - run 2 was 10,000 calls.

Version 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
}

Version 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';

Daha az kod çalışır rağmen, muhtemelen, ben sadece tam v2 yavaş NEDEN anlamak istiyorum sürüm 1 ile gidecek ...

EDIT: versiyon 1 hala olmasına rağmen, readfile, require, statik olarak aynı olması için iki sürümü getiren biraz daha hızlı olduğu gözlenmiştir hızlı (ancak 1000 VE 10000 çağrılar için sadece 2 saniye var, yani bu sadece rastgele disk kullanımı olabilir)

0 Cevap