piranha / twinspark-js

Declarative enhancement for HTML: simple, composable, lean.
https://twinspark.js.org/
MIT License
421 stars 20 forks source link

Вопросы к стриму "Викинь ти той React" #3

Closed JAremko closed 3 years ago

JAremko commented 3 years ago

@piranha На прошлом стриме был вопросник. Почему бы не бахнуть и к этому?

Чаво больше всего интересно:

piranha commented 3 years ago

Хмм, знаешь, я подумал что на большую часть вопросов я отвечу просто рассказом в начале плюс демкой того, как оно работает. Но я на твои могу прям тут ответить, а на стриме уточнить, если надо будет.

1) Потому что был/есть сервер-сайд рендеринг, а всё остальное помогало минимально — попробую это чуть раскрыть. 2) Я наверное вообще в целом про SPA, чем про один конкретный реакт. :) 3) На самом деле с радостью, но у него есть 1 вещь, которую Карсон похоже любит, что ли: наследование. Меня она тупо бесит. Я покажу потом пример, о чём речь, но он чёта вообще не горит желанием это менять, а я не могу себя заставить юзать. Я бы сказал, что это можно вообще пообсуждать, в чём разница с htmx (и почему unpoly кошмар :)). 4) Работает клёво, лучше чем стандартные "контроллер + шаблон", так что пока так и продолжаем 5) Кароч история такая. Если ты даёшь браузеру с сервера готовый хтмл - у тебя всё быстро. А если ты шлёшь какие-то куски, жсоны, объединяешь это всё - то через некоторое время у тебя всё медленно. :) Життя бентежне! Я разное попробовал и понял, что цель - уменьшение кол-ва жса. А это знач надо как можно больше всего перенести на сервер. 6) Мы отдаём страницы для анонимов и потом подгружаем кусочки для авторизованного юзера. С дебагом вслух, окей? А то хз чё писать, вроде как-то терпимо всё. 7) (executeRequests 16) Та не, просто игрался, надо ж какое-то время выбрать, за какое запросы в батч соберутся? Ну как-то так, типа кто за кадр не успел - не так и хотел. 8) (IntersectionObserver) Слушай, интересно, вполне можно сделать видео с разбором кода. Оно self-contained, довольно маленькое... только не понимаю до конца, как это сделать, чтоб было не скучно. :)

JAremko commented 3 years ago

@piranha Спасибо! Ждем стрима.

piranha commented 3 years ago

А я правильно понял, что Vaadin на беке кучу жса генерит по инструкциям на джаве? Или в чём там суть?

JAremko commented 3 years ago

@piranha Да, основная идея это пилить убийцы экселей и тп руками корпоративных жавистов - в браузере. Клиентская часть это чисто вьюшка(раньше на GWT щя веб компоненты) и да это дело из готовых блоков на Java собирается. Логика на сервере гоняется поэтому оно на каждый чих раундтрипит. Кто-то пытался Clojure прихреначить но хзн. Вопрос только один. Зачем это в браузере если оно с пингом работать не будет :confused:

Демка https://demo.vaadin.com/dashboard

JAremko commented 3 years ago

@piranha

На самом деле с радостью, но у него есть 1 вещь, которую Карсон похоже любит, что ли: наследование. Меня она тупо бесит. Я покажу потом пример, о чём речь, но он чёта вообще не горит желанием это менять, а я не могу себя заставить юзать. Я бы сказал, что это можно вообще пообсуждать, в чём разница с htmx (и почему unpoly кошмар :)). Работает клёво, лучше чем стандартные "контроллер + шаблон", так что пока так и продолжаем

А нельзя законтрибутить в htmx конфиг который эту фишку вырубает? Или она прямо там весь код пронизывает? Тут кажется что-то в этом духе обсуждали и даже замаржили https://github.com/bigskysoftware/htmx/issues/244

piranha commented 3 years ago

Ну мож, надо подумать. Мне просто кажется что конфигурация такого левела - это плохо. Эта херня учит плохому, вот шо. Но нельзя не отметить то, что хтмх хорошо пошел и чувак прилично сил вложил и продолжает.

Кароч, надо подумать. Вкороткую - сапортить твинспарк много времени не занимает, зато он работает ровно как задумано. :)

Ну я думал думал, и батчи тоже придется контрибьютить, а это наносит довольно серьезные ограничения в виде того как хтмл с сервера надо возвращать. В твинспарке оно так задумано, а там обратную совместимость поломает, или придется выдумывать два режима получения...

А без батчей эта вся херня становится неэффективной до крику)

JAremko commented 3 years ago

@piranha Про батчи тоже тикеты были https://github.com/bigskysoftware/htmx/issues/430 и https://github.com/bigskysoftware/htmx/issues/129 (магия какая-то).

Батчи как адхок с таймером должно быть несложно запихнуть. Может как реальное расширение уже попотеть прийдется.. Но интерес к этому похожее есть. Кстати у них интересные расширения есть.

piranha commented 3 years ago

Таймаут то херня! Вопрос в том шоб обратно все распарсить.

Но ты меня убедил, как нить по свободе изучу вопрос :)

JAremko commented 3 years ago

Ну я думал думал, и батчи тоже придется контрибьютить, а это наносит довольно серьезные ограничения в виде того как хтмл с сервера надо возвращать. В твинспарке оно так задумано, а там обратную совместимость поломает, или придется выдумывать два режима получения...

Немного поколупал. Там для парсинга ответа есть экстеншен поинт transformResponse его юзает темплейтер может прямо из этой чтуки и посвапать дополнительные элементы/тригирить эвенты на худой конец :thinking:

JAremko commented 3 years ago

@piranha Если я правильно понял то логика наследование запихана в getClosestMatch который просто рекурсивно чекает родительский элемент. Так что тут вообще просто будет это дело вырубить конфигом/патчем.

s-stude commented 2 years ago

У яких випадках twinspark не треба юзати? Anti-cases?

piranha commented 2 years ago

Figma - це точно коли не треба :)

s-stude commented 2 years ago
piranha commented 2 years ago

1) Є отакий екшен

twinspark.func({anon: (o) => !window.auth()});

А потім юзаєм отак (см в сорсі kasta.ua):

<div id="up" 
     ts-req="/api/v2/ssr/header" 
     ts-req-selector="#up" 
     ts-req-before="anon, prevent, gtmOnly chua-anon" 
     ts-trigger="load" 
     class="header">

ts-req-before заважає йому виконуватися для аноніма, а так load триггерне завантаження цього елементу для звичайного користувача.

2) Так, але ми це й так робили для того, щоб серверний хтмл якомога ефективніше кешувати

3) А ми оперуємо компонентами, просто деякі компоненти виставляються в HTTP-апі. Зараз це трохи ручний процес (хтось йде і додає новий урл для компоненти), але я хочу зробити якийсь загальний механізм і для виставлення, і для використання.