• Существует ли JavaScript-фреймворк для фронт-енда, бек-енда и SSR, который реально простой и удобный?

    @Ryberm Автор вопроса
    И сдается мне, что большинство Ваши требований от непонимания как это приготовить самостоятельно.


    Я уже часть реализовал. Но да, на это уходит время. Может быть, на реализацию всех требований им потребовалось бы несколько недель. И что, у них нет нескольких недель?

    А позже я стал замечать, что критики всего и вся по большей части люди с низкой компетенцией, не понимающие, как это работает внутри.


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

    Ну, я уже реализовал часть этих фич. И код Next вроде уже немало покопал. Поэтому вряд ли я могу совсем "не понимать, как оно внутри".

    3. Мне нужно сделать простенький кеш данных. Кеш нужно сделать именно в памяти, а не в БД и даже не в in-memory БД (я не против БД, но это требование заказчика). Поэтому приходится использовать обычную глобальную переменную. При этом и дергать, и записывать кеш приходится как в SSR (там эти данные потом идут в пропсы страницы), так и в API-роутах. И все бы хорошо, но вот почему-то оказывается, что глобальная переменная в SSR и глобальная переменная в API-роутах - это две разные глобальные переменные. Хотя по логике все сделано верно: глобальная переменная вынесена в модуль, который и импортируется там и там. Но вот так оно работает. И отсюда вытекает соответствующее поведение кеша. Зачем они так сделали? И API-роуты, и SSR находятся в Next, все это крутится в одном приложении, в одном процессе node.js, на одном порту... И вдруг вот такое поведение. С таким же успехом они могли вообще не делать API-роуты, я мог бы сделать API в виде отдельного микросервиса на Express.

    Еще из-за этой проблемы, похоже, они сломали стороннюю либу - next-session.
    Либа, конечно, имеет аналоги, но она была неплоха именно тем, что хранила данные не в самой куке, а в памяти сервера (и поэтому могла хранить весьма много данных, не раздувая при этом запросы и ответы). Ну а теперь в памяти сервера ничего хранить не получится.
    Как видите - проблема не только у меня, но, очевидно, и у автора либы и других ее пользователей.

    5. Недолго? Вы это решали в случае с Next? Почему в этом вопросе куча бравых ответчиков, но как пытаешься понять, с каким фреймворком для SSR знаком каждый из них, то натыкаешься практически на полный пшик?
    Если решали, то поделитесь решением, пожалуйста.
    Я бы сказал, что полноценные прелоадеры (которые появляются там, где надо, а не на всю страницу) - это весьма и весьма сложно.
  • Существует ли JavaScript-фреймворк для фронт-енда, бек-енда и SSR, который реально простой и удобный?

    @Ryberm Автор вопроса
    profesor08,
    1. Чем он крутой? Тем, что всего понемногу натыкано? Натыкано, но ничего не проработано, все обрублено, элементарной конфигурируемости очень не хватает.
    2. Но если у тебя подход "нормальный роутер раз есть" - то да, фреймворк крутой. С таким успехом мусорная свалка еще круче, там столько всего разного есть.
    3. И это API нужно дергать через XHR/Fetch с клиента? А зачем тогда такой SSR-фреймворк нужен, если шаг влево, шаг вправо - все, SSR убирай и делай по-старинке?
    7. Конфигом вебпака?
  • Существует ли JavaScript-фреймворк для фронт-енда, бек-енда и SSR, который реально простой и удобный?

    @Ryberm Автор вопроса
    profesor08, 1. А не странно ли было бы, если бы я сделал? Фреймворк. В одиночку.

    2. Ну вот ты считаешь, что не должен. А между тем Next.js поддерживает API-роуты... С этим что делать?

    3. Мне надо реализовать простенький кеш данных. Данные грузятся со стороннего сервера, грузятся долго, поэтому нужен кеш. Который хранится прямо в памяти. Без БД, даже без Redis/Tarantool (требование заказчика). Поэтому сделал глобальную переменную, в которой и храню данные и timestamp. Эти данные в SSR дергаются из БД, там кладутся в кеш и отдаются в страницу. А если они уже есть в кеше, то сразу из кеша берутся. И все вроде норм. Но еще есть API-роут, и в нем тоже нужно работать с этим кешем. Все это (и SSR, и API-роут) находятся в Next. Но это не получается. Получается два разных кеша - один работает в SSR, другой в API-роуте. Next так устроен. И то, что я выношу глобальную переменную в модуль, и буду импортировать ее оттуда - никак не помогает. В том-то и дело.

    7. Ну у меня CSS в отдельном .css\.scss в файле. Я импортирую этот файл в файле MyComponent.js. Этот компонент я рендерю только в том случае, если открыта страница /foo (ну в ней и рендерю). Открываю страницу /bar, открываю Chrome DevTools и вижу, что CSS-бандл содержит этот CSS. Что делать?
    Сейчас скажешь "ах ты тупой нуб, дебильный джун, да при чем тут некст вообще, ат-ат-ат-ат". Но опять же, в нексте есть фича для этого, вот она. Есть. Но опять убогая.

    9. Примитивная мысль. На возможность человека "подняться" влияет куча факторов.
  • Существует ли JavaScript-фреймворк для фронт-енда, бек-енда и SSR, который реально простой и удобный?

    @Ryberm Автор вопроса
    profesor08,

    Любой может улучшить или добавить фичу,, или исправить баг.

    В своем форке. А примут ли PR - это уже не факт.

    Для начала надо хоть бы одну штучку, малюсенькую, решиться и сделать.

    А почему вы решили, что я ни одной штучки не сделал?

    А не выдумывать проблемы.

    Выдумывать? Я работаю над реальным продакшновым проектом, а не над pet project и не над учебным проектом. Так что все проблемы реальные. Ну вот в старой реализации без Next были прелоадеры, мне надо сделать их на Next. И т.п.

    Это адекватный фреймворк. Ключевое слово фреймворк. Это не цмс.

    В моем списке к CMS можно отнесли в лучшем случае 3 пункта. Не более.
  • Существует ли JavaScript-фреймворк для фронт-енда, бек-енда и SSR, который реально простой и удобный?

    @Ryberm Автор вопроса
    Алексей Уколов, это вы так воспринимаете. Почему? Потому что нет фреймворков, где реализовано хотя бы 2-3 из этих пунктов? Или потому что вы не знаете, есть они или нет?
  • Существует ли JavaScript-фреймворк для фронт-енда, бек-енда и SSR, который реально простой и удобный?

    @Ryberm Автор вопроса
    profesor08, можно. Не сразу, конечно. Сначала я все эти идеи реализую в виде костылей. Потом форка. Потом пулл-реквесты, а если не примут, то оно так и останется форком.
    Но... а не проще ли выбрать более адекватный фреймворк? В который меньше доработок придется вносить.
    С этой целью и вопрос. Очень жаль что никто не знает фреймворков, в которых бы хоть что-то из этого уже было реализовано.
  • Существует ли JavaScript-фреймворк для фронт-енда, бек-енда и SSR, который реально простой и удобный?

    @Ryberm Автор вопроса
    pfg21, ну тут сложно мне что-то комментировать. Маловато пока опыта. Да, в IT есть совсем разные люди. И этот вопрос тому пример. Одни пишут, что я совсем плохой, другие более-менее адекватны и по делу. Наверно, то же самое и с работодателями.
    Я за всю жизнь работал всего в одной команде и по-моему, умных в ней не было, были только хитрожопые. И тимлид особенно.
    Но как раз поэтому велосипед это риск. Да и заметь, о реализации велосипеда речь и не идет! Это потому что у меня нет столько свободных человеко-часов пока что. Поэтому либо продолжать сидеть на Next и костылить его, либо другой готовый фреймворк.
  • Существует ли JavaScript-фреймворк для фронт-енда, бек-енда и SSR, который реально простой и удобный?

    @Ryberm Автор вопроса
    WapSter,
    3. То, что их нельзя мутировать в рантайме, нет? Я кеш данных храню в памяти в виде глобальной переменной.
    4. Что непонятного? Сервисы - это код, который не обрабатывает запросы клиента, а постоянно крутится на сервере и что-то делает.
    5. Они могут быть не нужны только там, где все идеально быстро грузится. Анимация переходов - бывает, но убогий вариант.
    6. Увы, да, стандартная, но гораздо удобнее было бы вместо поебушек с URL написать сразу

    router.push.setParam('page', '1');
    И в этом случае мы со страницы foo.bar/foo переходим на foo.bar/foo?page=1
    или
    router.push.setParam('page', null); // и параметр уберется

    И так тоже:
    router.push.setParam('page', router.onlyInternal); // это значит, что под капотом добавить параметр, но в адресную строку не добавлять. Полезно для тех же прелоадеров, чтобы в несколько этапов грузить данные и состояние (этап) хранилось под капотом, но не в адресной строке браузера

    При этом можно и по-старинке
    router.push.go(url);
    А сам router.push нужен потому, что есть еще и router.replace.
    7. О том, чтобы в любой странице был только тот CSS, который нужен ей. А почему ты по ссылке не посмотрел, о чем я? Ты не хочешь обсуждать тему нормально? Ты можешь не обсуждать ее вообще.
  • Существует ли JavaScript-фреймворк для фронт-енда, бек-енда и SSR, который реально простой и удобный?

    @Ryberm Автор вопроса
    Михаил, если вопрос не удалят, то отпишись, когда разберешься)
    Хотя идея переписывать код на Kotlin не особо понравится ни мне (с учетом бюджетов), ни заказчикам (которые хотят все-таки иметь возможность заменить меня кем-то другим, если не сойдемся в чем-то).
  • Существует ли JavaScript-фреймворк для фронт-енда, бек-енда и SSR, который реально простой и удобный?

    @Ryberm Автор вопроса
    pfg21, в использование велосипед наверняка не возьмут. Возьмут ли меня в использование (т.е. джуниором) или хотя бы миддлом - и то большой вопрос.
  • Существует ли JavaScript-фреймворк для фронт-енда, бек-енда и SSR, который реально простой и удобный?

    @Ryberm Автор вопроса
    Михаил,

    а) Это не javascript

    Тогда нужно хотя бы пояснять, как оно будет крутиться в браузере. Через webassembly или JavaScript?

    б) Многих вещей пока не хватает. Но платформа активно развивается.

    Нужна конкретика, что из перечисленного там уже есть.

    Причем, например, "прелоадеры там есть" означает не то, что можно кое-как воткнуть какой-то прелоадер - а что реально можно грузить данные SSR в несколько этапов, показывая соответствующие прелоадеры (если долго грузится, то, например, можно сначала прелоадер на всю страницу, потом на ленту постов, а потом на какой-нибудь чат сбоку - итого аж 3 этапа).
  • Существует ли JavaScript-фреймворк для фронт-енда, бек-енда и SSR, который реально простой и удобный?

    @Ryberm Автор вопроса
    WapSter,

    создай свою библиотеку компонентов и методов и преноси ее из проекта в проект через npm i.

    А если пойду работать в команду, то как на меня с моим велосипедом смотреть будут?

    В целом ты описал работу некой cms, а не фреймворка

    В каком месте? Разве что 2, 5, с натяжкой - 6. И то, все это с натяжкой.

    А все что ты описал, это сугубо твои хотелки

    Отнюдь. На добрую половину пунктов были соответствующие issues в репозитории next.js. И лайки под ними были. Значит, уже не "сугубо мои".

    Но все эти issue скатили в discussions, прям как этот товарищ https://www.youtube.com/watch?v=8ZRVdeglk9I
  • Как и зачем вы используете Cypress, если он не поддерживает ни Safari, ни мобильных браузеров?

    @Ryberm Автор вопроса
    Василий Банников, приходилось арендовать, есть такой опыт, только по финансам это немного боком выходит. Browserstack дешевле, а то и вообще бесплатно, аккаунты только регать ) да-да, я занят этим ужасным делом, но собираюсь купить. Ну да ладно, гляну playwright.
  • Как и зачем вы используете Cypress, если он не поддерживает ни Safari, ни мобильных браузеров?

    @Ryberm Автор вопроса
    Василий Банников, где webkit и где safari? В моем проекте много специфики, webassembly например. Точно оно будет работать в safari, если работает в webkit? :)
  • Как и зачем вы используете Cypress, если он не поддерживает ни Safari, ни мобильных браузеров?

    @Ryberm Автор вопроса
    Алексей Ярков, а тут проблема в том, что хотя сам playwright и поддерживает safari, но вот в облачных сервисах типа browserstack эта связка (именно с safari) почему-то недоступна.
    Хорошо, если она появится в будущем. А если нет? Она нужна, за неимением физических устройств Apple и нежеланием их иметь :) Понятно, что есть еще VPS с macOS и можно тестить там, если совсем припрет. Но это тоже не очень все-таки...
  • Как и зачем вы используете Cypress, если он не поддерживает ни Safari, ни мобильных браузеров?

    @Ryberm Автор вопроса
    Василий Банников, и поддержки playwright с safari во многих облачных сервисах типа browserstack тоже нет еще. Просто playwright можно, на маке можно, safari почему-то нет. Вот думаю, а появится ли она. Полгода назад я думал, что появится поддержка safari в cypress, и соответственно в облачных сервисах тоже. Сейчас вижу, что cypress даже не работает над тем, чтобы она там появилась.
  • Как и зачем вы используете Cypress, если он не поддерживает ни Safari, ни мобильных браузеров?

    @Ryberm Автор вопроса
    Алексей Ярков, а оно примерно так и есть) Selenium-то мне не нравится, старый он, и разворачивать неудобно. Это тоже очень значительные минусы.
  • Как и зачем вы используете Cypress, если он не поддерживает ни Safari, ни мобильных браузеров?

    @Ryberm Автор вопроса
    И то только если много пользователей сайта/ЦА на нём сидит.

    Или если пользователи ценные, влиятельные люди, и даже 1 пользователь ценен.
    Например - в интернет-магазинах.
    Есть магазины где покупка в принципе не может быть дешевой. Ну и ты не знаешь на сколько купит тот, у кого яблоко. Может он со своего iPhone зайдет и закажет дошираков на 500 руб, как это часто бывает, а может возьмет мотоцикл за полляма.
    Или - какой-то малоприбыльный, "затянувшийся стартап", где много инвесторов, мало всех остальных, а у инвесторов разные компы включая яблочные.

    но не обязательно в автоматизированном.

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

    Ну и про
    адекватное время
    я бы не сказал, что Cypress работает быстро.
    На ровном месте отжирает 30-60 сек (будучи запущен на железе, где это можно вручную прокликать быстрее). Типа - пройти по 100 строкам tr и проверить суммы в ячейках. И это 30-60 сек. Начинаешь думать, что не так сделал, в чем оптимизировать. Оказывается, что и не в чем... но вот логи надо попробовать убрать. Вставляешь { log: false } везде где можно, и опа, уже 10-20 сек. А логов этих там всего-то штук 300. Ну куда это годится?

    Ну или устанет и наделает ошибок

    Наделать ошибок при ручном e2e-тестировании, кстати, весьма сложно. В 80% ты просто тыкаешь как пользователь, и в 80% случаев это тыкание достаточно простое, потому что UX априори должен быть как можно проще.
    С усталостью плохо тестить разве что UI/UX, потому что все кажется неудобным и бесячим.