• Работаю с NextJS? Когда использовать SSG, а когда SSR?

    @vovashaplin Автор вопроса
    Static - автоматическая генерация статики без данных ( просто html без данных из сервера )
    SSG - автоматическая генерация статики и JSON с данными ( html с json, в который во время билда внеслись данные)
    SSR - рендеринг на стороне сервера на момент перед показом страницы ( запрос на сервер -> приход данных -> показ страницы пользователю )

    SSG ( getStaticProps и getStaticPaths ) нужен для показа страниц или страниц товаров лишь в том случае, если данные на этх страницах меняются не так часто, потому что нужно делать build каждый раз после смены данных на БД. Но данный способ очень быстрый.
    Но если ваши данные меняются часто, вы или заказчик часто обновляете контент страниц и товаров, то на помощь придет SSR ( getServerSideProps ). Данный способ медленнее чем SSG, но быстрее чем дефолтный запрос на стороне клиента (SPA).

    - главная страница ( просто информативная) Static или SSG
    - страница с товарами, пагинацией, сортировкой и поиском SSR или SSG
    - корзина SSR
    - страница с заполнением заказа SSR
    - страница смены данных пользователя SSR
    - регистрация и вход SSR
    - админ панель для изменения и добавления товаров SSR

    Если есть поправки или думаете что я где-то не прав, пишите.
    Ответ написан
    3 комментария
  • Как получать ответ от сервера, до тех пор пока в теле ответа не будет status: true?

    TTATPuOT
    @TTATPuOT
    https://code.patriotovsky.ru/
    Рекурсивно функцию вызывайте, просто, до тех пор, пока нужный ответ не придёт. Но имейте ввиду, что это будет грузит и сервер, и клиента. Лучше сделать таймаут между вызовами. Пример реализации на Node:
    async function start(tries = 5, delayTime = 1000) {
    
        for (let i = 1; i <= tries; i++) {
            console.log('Try #', i);
            try {
                return await yourFunction();
            } catch(e) {
                if (i >= tries) throw e;
            }
    
            await delay(delayTime);
        }
    }
    
    async function delay(time = 1000) {
        return new Promise(resolve => {
            setTimeout(resolve, time);
        })
    }

    Как раз писал недавно модуль для того же, но с большим функционалом.
    Ответ написан
    3 комментария