Галоўная / Артыкулы

Next.js чы проста React з Vite? Выбір фреймворку па вашам проекту.

Спосаб прымкнення да патрэбнасцяў, каб выявіць, чы рэактыўны проект патрэбуе Next.js чы проста React з Vite, з урахоўваннем SEO, SSR, хостынгу, маршрутацыі і досвіду каманды.

Выдавец: REACTAPP.TOP9 хв чытання2085 слоў

Крыніцы: When (Not) to Use Next.js: A Guide for React Developers

У багатьох командах, які працуюць з React, Next.js стае адаптаваным рашэннем яшчэ перш чым хтось задае пытанне. Документацыя выключная, екасыстэма вельмі вялікая, размешчэнне проекта праходзіць гладка, і існуе загальная думка, што ён робіць веб-сайты быстрэйшымі та спрыяе лепшаму рангаванню, таму запуск кожнага проекта з яго здаецца безпечным выборам. Аднак фреймворк застаецца інструментам з конкрэтным завадам, і Next.js можа стварыць столькі ж працы для неправильнага проекта, сколькі і заўсёды дапамагае для правильнага. Далей паказаны практычны спосаб прымэркавання: што на самай працэ Next.js рашае (SSR, SEO, змешаная рэндэроўка), дзе ён явна дапамагае, распашчытныя случаі, калі звычны React на Vite падходзіць краща, і як прымусіць каманду прымкнуцца да гэтага выбору як да трэбавання, а не да прыярытэта.

Што на самай працэ дадае Next.js React-у

Якшто адмахнуцца ад маркетынгу, Next.js здэйсніцься пераважна з пытанняў, як і дзе будзе рэндэрувацца код React. Конкрэтна, ён забезпечвае:

  • Серверная рэндарызацыя (SSR), статычная гэнерыяцыя пад час складвання (SSG) і ўзмашчанні гэтых методаў, якія працуюць на базе React.
  • Маршрутызацыя на аднойчыні з файламі, таму структура папак задае URL-адрэсы замест аддзінальнай табелі маршрутаў, напісанай вручную.
  • Лёгкія слойы бэкенду, якія ўключаны ў фронтэнд: працоўнікі маршрутаў API, мідлвэр і функцыі на краю сеті, якія дазволяюць адной базе коду служыць для цэлага стака прыемлів.
  • Жошчэйшая інтэграцыя з сучаснымі платформамі хостынгу, прычаму з Верцэлам, для кэшавання, доставкі на краю сеті і развяртання.

Гэты список можна стиснуць у адну фразу, яку варта памятаць пры далейшым обсуждэнні: Next.js заслуговае на свае месца тады, калі для проекту справды важлівыя ўраджанні пад час пачатковага завантажэння, SEO, а таксама аднараджэнне праблем фронтэнду і бэкенду пад аднай фрамворком. Кожны з наведзеных нижэй сцэнарыяў ёсць на самай працэ прабавай такой фразы.

Проекты, дзе Next.js явна дапамагае

Візуабельна наявнасць у рэзультатах пошуку і першыя вражэння — гэта вярткія патрабаванні бізнесу

Дзеяныя продукты залежаць ад органічнага трафіку і першых вражэнняў:

  • сайты з маркетынгам і стартовыя сторанкі продуктав
  • блогі з великай колькасцю контэнту і порталы дакументацыі
  • інтернет-магазіны, якія залежаць ад пошуку

Для такіх проектаў обробка на сервере і статычна генерацыя не ўжо розкіш. Браузер отрымае цэлы HTML прычымо да запуску якога-небудзь JavaScript, таму корыстувачы бачаць контэнт раней, а спам-сканеры можаць індексаваць рэальны тэкст, а не пусты элемент-корань. Next.js таксама дазволяе прадзеяваць сторанкі з ўсімі дадзеннямі, чыста кераваць мета-тагамі па кожнаму маршруту і выкарыстоўваць Incremental Static Regeneration (ISR), каб апавежаць контэнт без перзапуску всіго сайту кожны раз, калі ў чымсь змініцца. Магчыма з’едыніць тыя ж можлівасці ў простым одностораннім додатку, але рэдкасцю так чыста.

Вы хачэце адну парадыгу для всей стак-структуры

Разглядзіце такія проекты:

  • маленькі або сяродні продукт на базе SaaS
  • панель керування, яка падтрымвана калькама автэнтыфікованых канцэнтраў
  • тыповы веб-дапрыемк, дзе адна команда адпавядае за фронтэнд і бэкэнд

Next.js дазволяе коду API і компонентам React знаходзіцца ў однам проекте. Вы можете пісаць працоўнікі канцэнтраў у падметку app/api (або pages/api, якщо вы викорыстоўваете старэйшы Pages Router), выкарыстоўваць мідлвэр для перакананняў аб автэнтыфікацыі, локалізацыі і перыядрабаў, а таксама размістіць усё гэта на будзь-яй платформе, якая розумее Next.js, у тым чысле Vercel, але не толькі ў яе.

Для адзінавічнага разраба чыра маленькай команды такая кансалідацыя ўзяцца ў значэнні. Не трэба налажваць окольны серверы Node чыра Express, а таксама не трэба падтрымваць дзвюйны процес развяртвання. Логіка сервера знаходзіцца рэшта ўсіх компанентаў, якія яе выкарыстоўваюць, а фрэймворк координуе маршрутызацыю чыра атрыбутаванне межы ямі.

Публічныя чыра прыватныя рэгіоны выклікаюць разныя способы атрыбутавання

Большынства дапрацоўакіяў сама па сабе дзеліцца на два часткі: пераважна статычныя публічныя стораніцы, такія як галоўная стораніца, інфармацыя пра цены і дасяглібнія, а таксама дынамічныя роўні з доступам пасля абліковання, такія як панель керування або консоль адміністратара. Next.js добра справляецца з такымі сумешаннямі. Вы можете статычна генераваць контэнт, які рэдка змініцца, атрыбутаваць стораніцы для кожнага корыстніка на серверы, а высока інтэрактывныя віджэты заліцьваць толькі на кліянцы, таму што серверная атрыбутаванне тут малая паўтарэчнае значэнне. Асалоджаннем являецца можлівасць выбіраць стратэгію атрыбутавання для кожнага маршруту окрема, тады вы можете налаштаваць выконванне для кожнай часткі продукту без неабходнасці змены фрэймворкаў аб падтрымкі двух баз коду.

Праекты, дзе просты React зазвычай яе лепшы выбар

Такія случаі ўсё частыя, і самэ там команды часта, з прыzwычкі, выбіраюць Next.js.

Програмы на боку кліянта, якія ніхто не знаходзі за дапамогою пошуку

Сконцэнтруйцеся на внутршніх процэсах або панелях аналітыкі, панелях адміністрацыі, якія доступны пасля абмянкі, і інструментах, дзе кожны корыстнік прагяда прымусова да прыемплы, а не через пошуковыя сэрвісы. У такіх продуктах усі даны запрашваюцца пасля завантажэння прыемплы, таму порожній пачатковы HTML-дакумент не мае значэння, адколі краулеры не ўскладнююць аудытарыю, а проблемы з працэйнасцю, якія маюць значэння, ўсё ж такі знаходзяцца на стороне кліента: калектываванне стану, запрашэнне даных і эфективнасць адрасавання.

Next.js прыносіць можлівасці з сервера, якія вы не будете выкарыстоўваць, сэрверскі рантайм, які вам не патрэбен, а таксама дадатковыя концэпцыі, зв’язаныя з маршрутызацыяй і завантажэнням дадзеных. Аплікацыя на React, створаная з Vite, Parcel або нават проста на базе webpack, часта дазволяе шырэйшае адтулькаванне і легча ўсім разумеецца. Якщо вы хочаце падтвердзіць, што саме включае такая настройка, адзірніце нашу інструкцыю па стварэнні першай аплікацыі на React і Vite.

Корыстная практыка: калі кожны важны экран знаходзіцца за аутэнтыфікацыяй, а ўжо корыстувальнікі прабываюць да яго через вядомы URL або шэл аплікацыі, Next.js є неабяжным, а выборным.

Віджэты, бібліятэкі компонентаў і інструменты для вбудоввання

Інодзе рэзультатам не ёсць веб-сайт усага. Цэў можа быць віджэт, які можна адключыць, опублікованы ў npm, спяльная система дизайна або інструмент на адной адпраўцы, які будзе інтеграваны ў чужыя прыкладнікі. Тое, што вы выкладзаеце, — это перадаўальны UI, а не старонкі, таму маршрутызацыя, SSR, SSG і пэўныя структуры папак рашаюць проблемы, якіх у вас няма.

У гэтым случае кращы выбар — лёгкая версія React з трохоў прычын. Вы можете стварыць і опублікаваць без неабходнасці прыстасоўвання да стандартаў фрэймворку. Корыстувальнікі вашага пакета самі вяршаюць, як і дзе ён будзе адображацца. Кроме таго, вы ухіліваецеся ад включэння спецыфічных для Next.js прыпускаў у код, які павінен працаваць будзь-дзе. Якщо у вашам проекте няма справжніх старонак, фрэймворк, організаваны навакол старонак, ёсць неправым пачатковым пунктом.

Маршрутызацыя, якая не адпавядае папкам

Маршруты, базаваныя на файлах, ўдобныя для багато прыкладнікаў, але яны застаюцца абмежэннем. Структура URL прыкреплена да структуры каталогаў, дзеякія прыглыбленыя шаблоны вымагаюць альтернатыўных спосабаў, а маршрутызацыя, заснованая на великай колькасці дадзэнняў, можа здавацца прымусовай. Якщо ваш прыкладнік мае глыбокаяросткаваныя і высока дынамічныя маршруты, модель навігацыі, якая не падобаецца на дрэво файлаў, або нестандартныя схемы URL, заданыя бізнес-правіламі, тады React у поўнай саюзе з програмным маршрутаўнікам, такім как React Router, можа стаць кращым выборам. Адзначэнне маршрутаў у кодзе дае вам паўны контроль, замест таго каб прыстосаваць ваш дизайн да праглядзанай структуры фрэймворку.

Пытанне, якое трэба задаць, — гэта чы роўна маршруты, базаваныя на файлах, спростоўваюць вашу ментальную модель, чы продовжаюць ствараць труднасці. Якщо ствараюць труднасці, тады просты React, верагодна, будзе кращым выборам.

Галоўная частка — статычны контэнт з мінімальной інтерактыўнасцю

Next.js можа ствараць статычныя сайты, але выходны файл усё раве містіць рантайм React і витраты, зв’язаныя з процесам хайдратавання. Для простых маркетынгавых стораніц, дакументацыі з мерыя інтерактыўнасцю, портфоліяў і маленькіх сайтаў з контентам гэта можа значыць перадачу значна большай колькасці JavaScript, чым трэба для самых стораніц. Інструменты для статычных сайтаў, такія як Astro, Eleventy чы Hugo, або нават ручна напісаны HTML і CSS з незначным JavaScript, калі гэта неабходна, зазвычай даюць меншыя розмеры пакетаў і простыяшы способы развяртання.

Корача кажучы, якщо стораніца паводзіцца як дакумент, а не як прыкладнэц, то мета-фрэймворк React — цэлая машына, якой не трэба.

Хостынг, які не можа запускаць код сервера

Next.js работае наяўней калі можна выклікваць яго на платформе, яка падтрымляе Node або безсерверныя функцыі, і калі насправды викорыстоўваюцца SSR, функцыі на краю сеті або шляхі API. У вас можа быть іншая ситуацыя: хостынг толькі статычных файлоў, такі як GitHub Pages, Netlify у чыста статычным режыме або S3 за дапамою CloudFront; правіла, якія забараняюць дзейнароўку дугага часу процэсаў Node; або бюджет, калі оплата за кожны вызыв безсервернай функцыі є непрыемной.

У такім разе статычнае збіранне коду React за дапамою інструментаў уродзі Vite є простым: стварыце асеты, заванесіце іх — і готава. Next.js дзеясно праставляе режым статычнага экспорту для такіх сцэнарыяў, але ў такім разе він відмовляецца ад функцыяў, залежных ад сервера, такіх як ISR, мідлвэры і обробнікі шляхоў, якія патрабуюць сервера пад час запиту, таму пераканайцеся ў актуальных дакументах, што самэ працюе. Якщо вы викорыстоўваете Next.js, не чыпаючыся ні SSR, ні шляхоў API, ні мідлвэраў, то вы пераважна викорыстоўваете яго як розгледзены інструмент для збірання коду.

Адміністрацыя команды ўскладнюе аблікаванне рашэння

Тэхнічная адпрацоўкаванасць — толькі палова прычыны; таксама важліва ўпэўненасць вашай команды. Падазроўваючы, што команда добра ведае React з боку кліента і модэлі адностранічных сайтаў, але мае мало дазвілень у аблікаванні SSR, стрімінгу чы падчысленні дадзеных у Server Components, і яй трэба реалізаваць функцыяны продукту, а не інвеставацыі ў інжынерыю платформы, адмаціраванне Next.js значыць прыемку:

  • нэўжыткавых ментальных модэляў, укладаючы Server Components, падчысленні дадзеных з боку сервера і стандарты маршрутацыі
  • адміністрацыйскай складнасці, якая выступае ў зв’язку з цілямі развяртання, шарамі кэшавання і прыменшэнням навантажэння
  • большай колькасці элементаў, якія трэба пераглядаць, калі выкананне чы гідратацыя выконваецца некоректна

Такі інвестицыяя абсалютна можа быць цэнная, але гэта справжня выдатка. Для невялікага продукту чыста внутрэшньага інструмента частае рашэнне — застацца з тым фреймворкам, які команда добра знае, — ёсць кращым, чым адоптаваць ўсё тое, што здаецца болей савэцкім. Якщо вы разважваеце новыя функцыі фреймворка, наш карта савэцких функцый Next.js і таго, што кожная з іх заменяе ёсць хорашым спосабам ацэніць, сколькі новага трэба паведаміць.

Спіс пунктав для прыняцця рашэнняя для новых проектаў

Расгляньце гэтыя пытанні на пачатку кожнага проекта, дзе актуальны React:

  1. Чы трэба вам SSR чы SSG для SEO чы для шырокага завантажэнняя на пачатку? Якщо так, Next.js — супернагодны выбар; якщо ні, звычны React абсалютна падходзіць.
  2. Це сайт, складзены з рэальных старонак, чы ў большай частцы — толькі шэлл дапынкі? Багато старонак з контентам паказваюць на Next.js; інтерфейс з адным шэллам указвае на дапынку на базе React з адной старонкай.
  3. Чы хочаце вы маленькі бэкэнд, які будзе працаваць разам з фронтэндам? Якщо вам падабаюцься API-маршруты і мідлвэры ў аднам рэпазітарыі, то Next.js падходзіць. Якщо вже існуе спецыяльны бэкэнд, чы то NestJS, Spring Boot, Laravel чы інша тэхналогія, то Next.js дадае меньшых перадтаў.
  4. Дзе ён будзе размешчаны і за які бюджет? Магчымасць і готавасць платіць за процесы сервера чы вызовы функцый заставляе Next.js заставацца альтернатываю. Якщо є толькі статычная хостынгаванне, то зазвычай кращы выбор — лёгкая версія дапынкі на базе React.
  5. Што команда добра ведае сёння? Якшчо всі сильны ў React, але толькі калькі людзей разумеюць SSR і Server Components, запытайцеся, чы рэальна прычына для вивучэння такіх тэхналогій існуе.

Нічыя з гэтых праблем не вымагае прыемкі позыцыі „всё або нічога“. Вам не трэба стандартызаваць усё на Next.js чыста выключыць яго цэлком. Правільны падход — спрыяць да таго, каб яго вважалі адной з апцыяйнаў у вашым інструментарыі React, якая выбіраецца свядома, калі яе перавагі падходзяць да вашых патрэбаў.

Формуванне выбору для вашай команды

Якщо вы той, хто прыме чы выказвае вплыв на гэты рашэнне, ухіліцеся ад таго, каб представіць гэта як „Next.js — гэта занадта“, ўжо таму, што гэта звучыць як пытанне смаку. Замест таго апісуйце альтернатыўныя варыянты, якія команда можа оцаніць:

  • „Гэты внутршні панель керування мало корыстыцца ад SSR чы SEO, таму викорыстанне Next.js прынесла бы толькі дадатковы трыбут без явных пераваг.“
  • „Бібліятэка компонентаў не мае стораніц чы маршрутаў, таму для яе лепей падходзіць звычная настаўка React.“
  • „Наш хостынг падтрымлівае толькі статычныя файлы, таму большасць таго, што добра робіць Next.js, застанеся невыкарыстаным.“
  • «Мы будзем выбіраць Next.js для публічных продуктав, які маюць великі об’ёмы контэнту, дзе важлівыя ўрабочасць і возможнасць пошуку, а просты React — для внутрашніх інструментаў.»
  • Такія заявы прымушваюць спілкуванне сфокусавацца на трэбаваннях, а не на тэндэнтах, і дапамагаюць лёгкаа пераглянуць рашэнне, якщо гэтыя трэбаванні змянююцца.

    Нехай трэбаванні выбіраюць фрэймворк

    Выбір между Next.js і простым React не стосуецца таго, калі ён болей савэцкі; гэта стосуецца таго, якія проблемы насправды є у вашам проекте. Рэндарынг на серверы, SEO, стратэгіі рэндарынга па маршрутах і размешчанне бэкэнда ў тым жа месцы є рэальнымі прынтэламі, калі яны неабходны, а рэальнымі накладнымі витратамі, калі яны не патрэбны. Пачніце з трэбаванняў з вышэйшага чырткі, узяце пад увагу абмежэнні хостынгу і адпаведны дазнаўанні вашай каманды, і нехай фрэймворк выбіраецца на адной з гэтых адпаведзей, а не наадварот.

    Спадневана літэратура

  • Стан URL, стан сервера і BFF: стакан Vite для внутрашніх додатакаў на React: Чаму аутентыфікованая внутрашняя платформа на React можа краща функцыонаваць за дапамогою Vite, TanStack Router, TanStack Query і окремага BFF, чым за дапамогою Next.js, і калі гэта перестае быць правдай.