Заметки, ПроектыНастоящий микрофреймворк!

Саша в твиттере подкинул интересную ссылку: новую парадигму создания микро-фреймворков, а именно — массиво-ориентированную парадигму (array-oriented programming). Кому лень идти по ссылке, вот пример реализации:

$app = array(
	'session' => array(),
	'request' => array(
		'method' => 'GET',
		'uri' => '',
		'data' => array()
	),
	
	'response' => array(
		'body' => '',
		'headers' => array()
	),
	
	'errors' => array(
		404 => function(&$request, &$response) {
			$response['body'] = '404 Not Found';
			$response['headers'][] = 'Status: 404';
		}
	),
	
	'routes' => array(
		'/' => function(&$request, &$response) {
			$response['body'] = 'GET /';
		},
		
		'/test' => function(&$request, &$response) {
			$response['body'] = 'GET /test';
		}
	),
	
	'route' => null,
	
	'bootstrap' => array(
		'request' => function(&$app) {
			if ($_SERVER['REQUEST_METHOD'] == 'POST') {
				$app['request']['is_post'] = true;
			}
			$app['request']['uri'] = '/' . trim($_SERVER['REQUEST_URI'], '/');
			$app['request']['method'] = strtoupper($_SERVER['REQUEST_METHOD']);
			$app['request']['data'] = $_REQUEST;
		},
		
		'router' => function(&$app) {
			$route = $app['request']['uri'];
			if (!isset($app['routes'][$route])) {
				$app['route'] = $app['errors'][404];
				return;
			}
			$app['route'] = $app['routes'][$route];
		}
	),
	
	'dispatch' => function(&$app) {
		$route = $app['route'];
		$route($app['request'], $app['response']);
	}
);

foreach ($app['bootstrap'] as $bootstrap) {
    $bootstrap($app);
}
$app['dispatch']($app);

foreach ($app['response']['headers'] as $header) {
    header($header);
}
if ($app['response']['body'] !== null) {
    echo $app['response']['body'];
}

Не правда-ли, выглядит очень интересно! Конечно-же, есть свои минусы и они довольно ощутимые, но иногда такой подход более чем полезен. Например, когда важны скорость выполнения и потребляемые ресурсы. Код выше, на локальной машине, дает следующие результаты:

time: 0.000189065933228 ms;
memory: 4216 b

Как вам в сравнении с ko3, например? )

Kohana, ЗаметкиТюнинг kohana 3.0

Не так давно я представил набросок простейшего фреймворка, предназначеного для изучения новичками и для создания простейших сайтов. Комментарий, оставленный к тому посту уважаемым мною Иваном Броткиным, заинтриговал. Стало очень интересно, чего же можно добиться, если поднастроить ko3 на скорость работы. Интерес чисто академический, поэтому и настройки, по ходу дела, будут такие же. Единственное условие, которое я поставил для себя: фреймворк должен остаться полностью работоспособным, без ограничений!

Итак, начнем. Для начала, отключаем все, что можно: кеш, логирование, все доп.модули. Вывод из контролера в браузер делаем через echo, чтобы избежать использование доп. кода в самой кохане. Смотрим результат:

time: 0.0273728370667;
memory: 749360

Совсем-совсем не плохо, если сравнивать с ko3.2 и дефолтными настройками (напомню: time: 0.0946259498596; memory: 1330864). Но, данные параметры все-равно довольно высоки, поэтому идем дальше.

Тюнинг kohana 3.0 →

Kohana, ПроектыМилли-фреймворк по следам kohana

Мне очень нравится (или нравился, еще не определился) фреймворк kohana. Удобный, легко расширяемый, довольно легкий… Но, каким бы легким он не был, все-равно иногда использовать его не правильно, как из пушки по воробьям. Вот, для примера, такой случай: решил я провести пару опытов над поисковиками и сделать пару мелких сайтов для этих тестов. Сами тесты, в данный момент, абсолютно не принципиальны (о них, возможно, расскажу как-нибудь потом). Важно — сайты для тестов ОЧЕНЬ простые: 1 контроллер с 3-4 методами, 1 модель с 2-3 методами, 3-4 вьюшки, автообновление через полу-универсальный парсер… Использовать полноценный фреймворк с кучей неиспользуемых библиотек и пр. не правильно, на мой взгляд.
Милли-фреймворк по следам kohana →

Kohana, ЗаметкиРазвитие фреймворка kohana

Прочли заголовок? Тогда Вы знаете, о чем я хочу порассуждать вслух…

Для начала, опишу саму проблему: последний год (может быть чуть больше), все проекты я пишу на фреймворке kohana. До коханы пользовался codeigniter-ом. Саму коханы выбрал за минималистичность: минимум встроенных модулей, минимум встроенных классов, минималистичная (но очень удобная) файловая структура и пр. Переходить с CI 1.7 было сложно из-за привычек, но далее все было замечательно (чего не скажу про ko2.x)…

Но сегодня я уверен, что придется все-таки переходить на что-то другое. Скорее всего это будет yii или zf. Первый мне не нравится, но второй я вообще терпеть не могу (((

Напрашивается резонный вопрос — а нахрена? Вот на него я и буду отвечать далее…

Развитие фреймворка kohana →