РЕДАКТИРОВАТЬ : Это произошло из-за ошибки в моем коде (вероятно), после отладки и добавления проверки правильности ответа в моих тестах, тест доказывает, что НЕТ разницы (что меня раздражает), больше в мой собственный ответ ниже.
/ EDIT
Здравствуйте,
Я написал небольшую CSS-оболочку для SASS для PHP и запрограммировал ее для принятия имени файла и возможных флагов перед запуском (и, возможно, кэшированием, если не помечено иначе) моего файла SASS.
Я также провел несколько тестов и номер версии. 2 что-то около 2x - 4x медленнее, чем номер версии. 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 мс
Версия с readfile вместо require
Версия 1, прогон 1: всего: 7,915 ср: 7,915 мс / файл сначала: 2,49 мс
Версия 2, прогон 1: всего: 9.508 avg: 9.508 мс / файл сначала: 3.23 мс
Версия 1, запуск 2: всего: 1: 17.137 avg: 7.714 мс / файл сначала: 4.61 мс
Версия 2, запуск 2: всего: 1: 15,717 avg: 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
, принес две статистически одинаковые версии, хотя версия 1 все еще быстрее (но это всего 2 секунды для вызовов 1000 И 10000, так что это может быть случайное использование диска)