Это не обучающий материал, а просто впечатления от...
Вспоминая себя в школе, не могу вспомнить, чтобы мне было сильно интересно учиться. Вернее, были любимые предметы — к примеру, физика или астрономия. Но вот прямо особого кайфа от учебы не помню. Просто надо — и от этого никуда не деться.
Впрочем, молодой физик, если урок был последним, давал нам поиграть на компьютерах, так как он вел еще и информатику. Это особенно укрепляло мою любовь к физике.
А вот сейчас учишься тому, что нужно и интересно. И это как бы с одной стороны доставляет удовольствие, когда получается, или наоборот разочарование, когда в очередной раз думаешь: «Какой же я тупой».
По поводу разочарований... Есть у меня их в копилке. И много. Увлечешься чем-то, делаешь что-то, тебе нравится, а потом смотришь, как сделали это же гуру отрасли — и понимаешь: «Какой же я тупой».
У тебя так никогда не получится. Твой удел — мести метлой в грязном, темном переулке ночью, чтобы никто не видел и не опозорился демонстрацией неправильного хвата этой самой метлы.
И бросаешь. Бросаешь то, что тебе нравилось. Только потому, что у кого-то это получается лучше, изящнее, техничнее. Так я в свое время бросил 3D, фотографию, живопись и много чего еще.
Стал эдаким бэкендером по жизни. Результат работы которого не видно.
Распланировать и запустить ферму для рендера — а мастера пусть рисуют свои красочные картинки.
Или автоматизировать торговые процессы в ERP — а владелец пожинает плоды. И так далее.
Сайтики я делал всегда. И вот сейчас на праздники решил сделать новую инкарнацию своего сайта, который в очередной раз прибил, оставив только "index.html".
4 года назад я, как уже ране упоминал в своих постах, решил вернуться в онлайн-айтишечку. Да и сломанная спина не оставляла другого выхода. Ковид снизил когнитивку, и из моего небогатого арсенала знаний теплились только остаточные воспоминания про ASM, Perl, HLSL, C#, PureBasic... Решил: надо что-то новое и популярное для веба, но не вызывающее отвращения, как PHP :)
Выбор пал на Python. Тем более развитие ML снова сделало этот небыстрый, но простой язык популярным.
За месяц я переписал бота, которого ранее заказывал у фрилансера. Затем переписал на Django тогда еще работавший магазин на Joomla. И вот тогда на меня снизошло откровение.
Какое же днище все эти CMS, которые я много лет использовал, меняя как перчатки!
Своё, с любовью собранное на Django, — это как песня! В своём проекте ты всё знаешь и понимаешь. Где баги — это твоя вина, а не очередного кривого плагина. Всё можно поправить и сделать так, как тебе нужно, без ограничений. А быстрота работы сайта поразительна. Нет ожидания, когда все 100500 модулей загрузятся и консоль браузер чиста без чужих ошибок.
Кроме jQuery и Bootstrap я тогда ничего и не использовал. Солянка сборная: тут JS, там jQ, тут кнопка бутстраповская, а тут своя. Ну и что? Мне нужно только показать и забрать данные из DOM. Выглядит приемлемо, работает шустро и без ошибок, что еще нужно?
Не рендерить же и не считать всё на стороне клиента. Вдруг у юзера слабый телефон или узкий канал?
С таким подходом я до сих пор не понимал, чем заняты фронтенд-разрабы. Бгг.
Пару лет назад мой кореш из UK стал фанатиком Svelte. Он тоже в основном бэкендер, но старается быть как и я FullStack: C#, PHP и вот эта новая цацка. Начал меня гипнотизировать на неё.
Я честно не поддавался. JS мне хватает. Не вижу смысла засорять свой и так не бесконечный RAM лишней инфой. Для CRM, ERP, онлайн магазинов более чем достаточно, вся нагрузка на сервере.
Но тут выдалось много свободного времени. Решил реинкарнировать сайт — и заодно пощупать этот Svelte.
Разумеется, сайт на Django. Но почитав про Svelte (да да, я только читаю, а не смотрю видосики. Так быстрее и понятнее), я вообще не сразу понял, как впихнуть его в парадигму Django-шаблонов. Чтобы использовать Svelte на 100%, от шаблонов придётся отказаться и использовать Django как API-сервер.
Тогда зачем вообще Django? Лучше уж FastAPI для этих целей. Но скелет бэкенда уже набросан, переделывать скучно и не интересно.
В Django я и так от многого отказался:
- ORM, потому что async тяжело дружит с ней.
- Сессии и User, по той же причиной, да и кастоидальность через жопу.
Короче, шаблоны Django решил оставить, но строить всё в пределах родительского "div"-а App, на который биндится Svelte-приложение.
Делая свою админку (да-да, я и админкой Django не пользуюсь), потребовался WYSIWYG-редактор для статей. Встроил CKEditor в шаблон. Но потом подумал: какого фига я нарушаю идеологию Svelte?
Стал искать Svelte-решение. Нужно было максимально простое, с форматированием текста и картинок. Без сохранения на сервер, а просто в base64.
Кто-то вкорячивал монстро-вордоподобный TinyMCE. Кто-то портировал Quill как svelte-quill с кучей устаревших модулей и уязвимостей.
Попробовав несколько решений, решил сделать своё.
А мы помним: фронтендер из меня поверхностный.
Посоветовавшись с GPT-4, как лучше все организовать, решил накрапать свой редактор. Изначально весь функционал умещался в одном файле — `editor.svelte`. Пара сотен строк кода. Казалось бы, всё.
Но потом выяснилось: пастишь картинку — она кладётся в PNG base64. Это жирно для хранения в базе и дорого для отдачи юзеру тем более без Lazy. Храним то в base64 прямо в базе. Поэтому надо паковать в WebP, а еще и размеры прямо в редакторе менять было бы не плохо, а перед упаковкой делать ресайз к текущим размерам.
Так появились ещё сотни строк и первая WASM-библиотека.
Затем подумалось, а если потребуется своя табличка на лету, а не пастить откуда-то, а если захочу процитировать кого, или вставить код, чтобы он красиво в рамочке не теряя форматирования..
Так приросло еще несколько сотен строк.
Позже появилась идея поделиться своим решением малоли кто-то будет искать подобное. А винегрет кода в одном файле стыдно показывать. Пришлось разделять, комментировать.
А если кто-то воспользуется и разрешит для юзеров редактор, нужно написать санитара...
IDE мне потом сказало, что метод `execCommand` устарел. Хоть он меня устраивал полностью, но ладно. Напишем свои функции.
Таймер в IDE показал 23 часа долбёжки по клавишам.
Нелюбовь к JS вернулась с новой силой. Перед пушом IDE ругнулась было, что не все стили поддерживаются в старых браузерах..
Лучшие практики я не читал. Если начну, обуяет зависть, безнадега — и уйду в монастырь. И как показывает моя личная практика только изобретение своего личного велосипеда, позволяет понять, как он вообще работает, а не бездумно использовать чужое. Да, уже через год или гораздо раньше, взглянув на это я подумаю, какой кошмар, а если будет время и желание все перепишу, как оно уже бывало, но пока все работает и на данный момент полностью устраивает.
В общем теперь немного понимаю, чем Фронтедеры заняты - это писец какой-то товарищи)
в общем и целом Svelte интересная штука, как мне кажется максимальный потенциал раскроется с api сервером, однако я пока не готов к таким жертвам, да и работать надо, а не только учиться. Заказы сами себя не сделают)
Ну и в целом в идеологии Django всю фронтед работу вынести в Svelte это лишняя работа извиняюсь за тавтологию
Кто желает поковырять или разобраться, как встроить svelte в джанго, то прошу на https://gitverse.ru/DADementr/svelte-svs-editor
А на чем у вас джанговский фронт крутится?
Учитесь, творите и достигайте своих целей!
Ученье — свет, а неученье… ну его в жопу. 😄