Добавлен , опубликован

Преамбула

Мотивом для создания этого ресурса послужило несколько моментов:
  • при работе с фреймворком ты, как правило, не контролируешь процесс рендеринга/перерисовки твоего компонента (например, не всегда можешь выбрать между синхронным и асинхронным рендерингом)
  • фреймворки, как правило, не могут в виртуализацию (адекватная производительность требует знания внутренностей, а это то чего обычно делать не хочется)
  • невообразимое количество оберток (коллстек превращается в нечитаемую срань, по крайней мере если не знаком с имплементацией фреймворка, но тут читаем предыдущий пункт)
  • плохая оптимизация, nobrainer-подход, когда вместо task-specific кода используется generic имплементация на +100500 строк

Смысл?

Да вот, подумал а вось кому будет интересно порассуждать об особенностях разработки без фреймворков. Только давайте без копетанства мол это не поможет найти работу и всего в таком духе...
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
21
Думаю чтоб было по-честному, начать стоит мне, пусть и с банальщины.
  • без компонентов не обойтись, по сути это и есть ООП
  • в качестве альтернативы я вижу веб-компоненты
  • компайлинг в статичные файлы в процессе сборки тоже вполне ничего себе подход
  • это лучше для мозгов, меньше магии, больше контроля

архитектура?

Если в случае с фреймворком это просто древо компонентов, то без фреймворков все не настолько очевидно.
29
Svelte - фреймворк без фреймворка, пишешь компонентны на html + inline css (scss, less) + нативный js (typescript), в итоге все сворачивается в красивый код без лишнего непотребства и оберток. Иногда случаются нюансы, но редко и вполне решаемо.
30
Что подразумевается под фрэймвоком? Теже jQuery, Bootstrap, smarty очень ускоряют процесс разработки и позволяют контролировать всё что хочется.
21
NazarPunk, хороший вопрос. Чтоб не начинать об этом думать, я просто отошлюсь к четырем пунктам с преамбулы как определяющим характеристикам.
очень ускоряют процесс разработки
Хоть подходы и разные, по сути все они передают тебе в руки заготовки архитектуры в обмен на те проблемы что я описал. Подумалось знает ли кто какие оптимальные подходы к проектированию веб-апок без фреймворков. Свелт пока упустим, так как это скорее компилятор нежели фреймворк.
30
Хоть подходы и разные, по сути все они передают тебе в руки заготовки архитектуры в обмен на те проблемы что я описал.
Архитектурой в приведённых мной фрэймворках и не пахнет. Они просто позволяют делать некоторые банальные вещи проще и быстрее.

Я вообще в php херачу всё на классах со статическими методами ибо мне лень писать инклуды или запоминать нэймспэйсы. Архитектурой в этом случаем можно вертеть в любом направлении, а фрэймворки только делают банальные вещи проще.

Дешёвый роутер
index.php
ini_set("display_errors", 1);
error_reporting(E_ALL);

(function () {
	include 'include/config.php';
	include 'include/autoloader.php';
	include 'include/defines.php';
	include 'include/class/vendor/Smarty/Smarty.class.php';

	define('IS_AJAX', false);

	header::cache(false);

	comet::connect();

	try {
		router::route();
	} catch (Throwable $e) {
		http_response_code(404);
		echo '<pre>';
		echo $e->getMessage();
		echo str_repeat(chr(13) . chr(10), 2);
		var_dump($e->getTrace());
		echo '</pre>';
	}
})();
router.php
class router {
	public static function uri() {
		static $out = null;
		if (is_array($out)) return $out;

		$uri = (stripos($_SERVER['REQUEST_URI'], '?')) ? stristr($_SERVER['REQUEST_URI'], '?', true) : $_SERVER['REQUEST_URI'];
		$out = explode('/', substr($uri, 1));

		for ($i = 0; $i <= 10; $i++) {
			$out[$i] = array_key_exists($i, $out) ? trim($out[$i]) : '';
		}

		if (!preg_match('/^[a-z0-9_-]+$/i', $out[0])) $out[0] = 'home';
		return $out;
	}

	public static function route() {
		$uri = self::uri()[0];

		if (in_array($uri, ['signout', 'sign-out', 'logout'])) user::signOut();

		$folder = $uri === 'root' ? '/admin/page' : '';
		$path   = SMARTY_TEMPLATE_DIR . "/page$folder/$uri/$uri.php";

		if (is_readable($path)) {
			include $path;
			return;
		}

		header::noFound(true);
	}
}
29
Свелт пока упустим, так как это скорее компилятор нежели фреймворк.
ну так ты же хотел без фреймворков, вот пожалуйста
NazarPunk:
Теже jQuery
jquery устарел уже в реалиях современных браузеров и просто предоставляет бесполезные обертки над стандартными функциями JS~NazarPunk:
Я вообще в php херачу всё на классах со статическими методами
фуу
не лень писать инклуды или запоминать нэймспэйсы.
Для этого придумали IDE, которая все делает за тебя
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.