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

Преамбула

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

Смысл?

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

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

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

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

Я вообще в 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);
	}
}
0
29
4 года назад
Отредактирован alexprey
0
Свелт пока упустим, так как это скорее компилятор нежели фреймворк.
ну так ты же хотел без фреймворков, вот пожалуйста
NazarPunk:
Теже jQuery
jquery устарел уже в реалиях современных браузеров и просто предоставляет бесполезные обертки над стандартными функциями JS~NazarPunk:
Я вообще в php херачу всё на классах со статическими методами
фуу
не лень писать инклуды или запоминать нэймспэйсы.
Для этого придумали IDE, которая все делает за тебя
0
29
4 года назад
0
jquery устарел уже в реалиях современных браузеров и просто предоставляет бесполезные обертки над стандартными функциями JS
Обёртки над js всёравно нужно писать ибо таже работа с DOM на чистом js то ещё удовольствие, а единый синтаксис для них это удобно. Да и в глобальное пространство имён он вводит всего две переменные, что не мешает писать на чистом js сколько душе угодно. Да и не забывайте, что в ТЗ всегда может быть строчка о поддержке старых браузеров.
фуу
Аргументация уровня бог
Для этого придумали IDE, которая все делает за тебя
Autoloading уже всё сделал за меня, зачем мне ещё в каждом файле протыкивать инклуды?


alexprey, посмотрел я на Svelte и вы ещё ругаете jQuery в лишних обёртках
Притом абсолютно то же самое умеет smarty, притом одни и теже шаблоны он может собирать как на бэке, так и на фронте.
Загруженные файлы
0
29
4 года назад
0
Обёртки над js всёравно нужно писать ибо таже работа с DOM на чистом js то ещё удовольствие, а единый синтаксис для них это удобно
Ну как сказать... Разница не велика по написанию кода, а просадка по производительности и времени первого рендера и дополнительный сетевой трафик для мобилок обеспечен
// Native JS
const elementsCollection = document.querySelectorAll("button[data-action='show-registration-form']");
elementsCollection.forEach(buttonElement =>
	buttonElement.addEventListener("click", clickEvent => {
		// ....
	}
);
// JQuery
const elementsCollection = $("button[data-action='show-registration-form']");
elementsCollection.on("click", clickEvent => {
	// ...
});
Да и не забывайте, что в ТЗ всегда может быть строчка о поддержке старых браузеров.
Для этого уже давно используются нормальные средства разработки, подключение дополнительного бандла с полифилами и транспайлер в старую версию ES. А потом немного магии с помощью нового nomodule аттрибута, который отключает лишние бандлы для современных браузеров. И все, даже поддержка всратого IE8 обеспечена
посмотрел я на Svelte и вы ещё ругаете jQuery в лишних обёртках
ты не учел, что в результата компиляции свелт ты получаешь 2 чистых файла (js + css) или 1 (js, стили вшиваются), которые самодостаточные и ничего дополнительного не надо подключать.
0
29
4 года назад
0
Ну как сказать... Разница не велика по написанию кода, а просадка по производительности и времени первого рендера и дополнительный сетевой трафик для мобилок обеспечен
Причём тут первый рендер, если для него нужен только html и css.
ты не учел, что в результата компиляции свелт ты получаешь 2 чистых файла (js + css) или 1 (js, стили вшиваются), которые самодостаточные и ничего дополнительного не надо подключать.
Префиксы он тоже сам добавляет? Я при сборке проэкта тоже получаю всего два файла .js и .css, которые успешно попадают в кэш.
0
29
4 года назад
0
Причём тут первый рендер, если для него нужен только html и css.
ошибаешься, js, картинки и прочее тоже участвуют в процессе первого рендера. Причем для js еще можно указать, чтобы он был исключен из первого рендера и вообще грузился асинхронно без первого приоритета.
NazarPunk:
Префиксы он тоже сам добавляет?
да, посмотри babel
Я при сборке проэкта тоже получаю всего два файла .js и .css, которые успешно попадают в кэш.
не забывай о размере бандла, при чистом виде он будет минимальным. Один только jquery весит 87 Кб, функций которые ты почти не используешь, а мы умещаем в этот размер целое приложение с нехилой функциональностью полноценным дизайном и поддержкой всех не модных брузеров
Чтобы успешно сложить и использовать кеш тебе нужен стабильный интернет и постоянный пользователь. Если рассматривать мобильных юзеров и стандартный поток клиентов на сайт, то твоя теория сильно наворачивается.
0
29
4 года назад
0
Один только jquery весит 87 Кб, функций которые ты почти не используешь
Я смотрю просто адские размеры без gzip, что ни один браузер их не потянет,
лучше делать 100500 GET запросов на каждый чих
Загруженные файлы
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.