Ответы пользователя по тегу Next.js
  • Стоит ли использовать Next.js для крупного ECOM проекта?

    @dimuska139
    Backend developer
    Если фронтенд на React, и при этом нужно, чтобы с сайтом хорошо дружили поисковики, то NextJS обязателен. Да, даже несмотря на то, что гугл давно говорит, что умеет сканировать js сайты. По факту индексирует он их хуже. А другие поисковики вообще с js не дружат.

    какими подводными камнями

    Скорее с летящими в вас камнями. Есть достаточно много людей, которые не хотят использовать React для разработки сайтов и клепают по старинке: весь html генерится на сервере средствами какого-нибудь php + jQuery на фронте. И эти люди будут постоянно швырять в вашу сторону камни, с пеной у рта пытаясь вам доказать, что вы все переусложняете. Но надо понимать, что у крупных интернет-магазинов обычно сложный фронтенд, и пилить его на jQuery или на чистом js - самоубийство, потому что код будет в 99% случаев помойкой.

    А если серьезно, то единственное, что мне в NextJS не понравилось - это роутинг. Но и это субъективно.
    Ответ написан
    Комментировать
  • Как программно инвалидировать SSR кеш в NextJS?

    @dimuska139 Автор вопроса
    Backend developer
    В общем, сам решил вопрос. У cacheable-response можно в параметре cache указать свой экземпляр Keyv, передав в конструктор класса нужный store. Соответственно, если передать туда @keyv/redis, то кеш будет храниться в Redis. При желании можно просто из Redis удалять нужный ключ и все - вот и инвалидация.
    Может немного неправильно объяснил, так что вот код моего server.js:
    const express = require('express');
    const next = require('next');
    const redirects = require("./redirects");
    const cacheableResponse = require('cacheable-response');
    const port = parseInt(process.env.PORT, 10) || 3001;
    const dev = process.env.NODE_ENV !== 'production';
    const app = next({ dev });
    const KeyvRedis = require('@keyv/redis');
    const Keyv = require('keyv');
    
    const handle = app.getRequestHandler();
    
    const keyvRedis = new KeyvRedis('redis://127.0.0.1:6399'); // TODO: Get from dotenv
    
    const ssrCache = cacheableResponse({
        ttl: 1000 * 60 * 120, // 2 hours
        get: async ({ req, res, pagePath, queryParams }) => ({
            data: await app.renderToHTML(req, res, pagePath, queryParams)
        }),
        cache: new Keyv({ store: keyvRedis }),
        send: ({ data, res }) => res.send(data)
    });
    
    
    app.prepare().then(() => {
        const server = express();
    
        redirects.forEach(({ from, to, type = 301, method = 'get' }) => {
            server[method](from, (req, res) => {
                res.redirect(type, to)
            })
        });
    
        server.use((req, res, next) => {
            res.append('Set-Cookie', "HttpOnly;Secure;SameSite=Strict");
            next();
        });
    
        server.get('/posts/:slug', (req, res) => {
            const queryParams = { slug: req.params.slug };
            const pagePath = '/post';
            return ssrCache({
                req,
                res,
                pagePath,
                queryParams
            });
        });
    
        server.get('/', (req, res) => {
            const pagePath = '/';
            return ssrCache({
                req,
                res,
                pagePath
            });
        });
    
        server.all('*', (req, res) => {
            //console.dir(req.url);
            return handle(req, res)
        });
    
        server.listen(port, err => {
            if (err) throw err;
            console.log(`> Ready on http://localhost:${port}`)
        })
    });
    Ответ написан
    Комментировать
  • Стоит ли использовать Next.js в рунете?

    @dimuska139
    Backend developer
    Да, стоит. Потому что в противном случае Яндекс, Мейлру и т.п. поисковики не будут видеть контент твоего сайта. Гугл будет видеть, но ранжирует он SPA-сайты хуже. На своем сайте использую SSR с помощью NextJS - все отлично (у меня блог).

    P.s. что касается сайтов, которые участвовали в исследовании: возможно, там SSR настроен только для определенных страниц.
    Ответ написан