원래 단일 페이지 응용 프로그램이 아니었을 때 모든 페이지는 HTTP 호출에 대한 응답에서 반환된 다른 HTML이었습니다. 정적 콘텐츠 파일 또는 서버 측 언어(예: PHP, Python 또는 Java)를 통해 응답을 처리하고 보다 동적인 방식으로 응답합니다.
SPA를 통해 "요청 이동 시간"을 제거하여 표준 요청-응답 모델보다 훨씬 빠르게 작동하는 반응형 사이트를 제공할 수 있었습니다.
React 웹사이트에 액세스할 때 서버의 일반적인 응답은 다음과 같습니다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<link rel="shortcut icon" href="/favicon.ico">
<title>My React app</title>
</head>
<body>
<div id="root"></div>
<script src="/app.js"></script>
</body>
</html>
app.js좋은 사용자 경험을 제공하기에 충분히 빠르게 로드되지 않을 수 있습니다.당신은 사용자가 로그인 할 수있는 웹 사이트를 가지고 있고, 당신이 결정할 수있는 서명되지 않은 내용에 액세스 할 수없는 경우 공개 사이트 생성 ( "우리에 대해"인덱스 등을 "연락처"등) 정적 HTML로 페이지 , JS에서 렌더링하지 마십시오.
귀하의 콘텐츠는 로그인 요구 사항에 의해 제한되므로 검색 엔진에서 색인을 생성하거나 소셜 미디어에서 공유되지 않습니다.
react-snapshot 과 같은 라이브러리를 사용하여 애플리케이션 페이지의 HTML 사본을 생성하고 지정된 폴더에 저장할 수 있습니다. 그러면 폴더를 다른 자산과 함께 배포할 수 있습니다. 이러한 방식으로 HTML은 JavaScript가 비활성화된 사용자, 검색 엔진, 소셜 네트워크 등이 귀하의 사이트에 액세스할 수 있도록 하는 응답과 함께 제공됩니다.
대부분의 경우 react-snapshot 구성은 프로젝트에 종속성을 설치하고 새 스크립트를 만드는 것만큼 간단합니다.
"build": "webpack && react-snapshot --build-dir static"
새로운 세대의 자바스크립트 웹 애플리케이션의 매력적인 측면 중 하나는 클라이언트(브라우저)와 서버 모두에서 실행할 수 있다는 것입니다. 이를 통해 빌드 시에는 알려지지 않은 더 동적인 페이지용 HTML을 생성할 수 있습니다. 시각. 이것은 종종 "동형" 또는 "범용" 응용 프로그램이라고 합니다.
React에 SSR을 제공하는 가장 인기 있는 두 가지 솔루션은 다음과 같습니다.
당신은 할 필요 해요 서버에 대한 노드 백엔드를 실행할 수 있습니다 . github 페이지와 같은 정적 호스트에는 이 솔루션을 배포할 수 없습니다.
우리가 취할 첫 번째 단계는 다른 React 애플리케이션과 마찬가지로 애플리케이션을 만드는 것입니다.
먼저 세 개의 패키지를 추가해야 합니다.
yarn add express babel-node pug --save-dev
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<div id="root">!{app}</div>
<script src="bundle.js"></script>
</body>
</html>
우리 서버는 다음과 같이 보일 것입니다
import React from 'react';
import { renderToString } from 'react-dom/server';
import express from 'express';
import path from 'path';
import App from './src/App';
const app = express();
app.set('view engine', 'pug');
app.use('/', express.static(path.join(__dirname, 'dist')));
app.get('*', (req, res) => {
const html = renderToString(
<App />
);
res.render(path.join(__dirname, 'src/index.pug'), {
app: html
});
});
app.listen(3000, () => console.log('listening on port 3000'));
import { renderToString } from 'react-dom/server';
const app = express();
app.set('view engine', 'pug');
app.use('/', express.static(path.join(__dirname, 'dist')));
그런 다음 express에 dist폴더 에서 파일을 검색하도록 지시 하고 요청(예: /bundle.js)이 해당 폴더에 있는 파일과 일치하면 응답합니다.
app.get('*', (req, res) => {});
const html = renderToString(
<App />
);
res.render(path.join(__dirname, 'src/index.pug'), {
app: html
});
app.listen(3000, () => console.log('listening on port 3000'));
남은 일은 다음에 적절한 스크립트를 추가하는 것입니다 package.json.
"scripts": {
"server": "babel-node server.js"
}
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<div id="root">div data-reactroot="">
Contents of App.js
</div>
<script src="bundle.js"></script>
</body>
</html>
SSR은 주로 간단해 보이지만 처음에는 명확하지 않을 수 있는 몇 가지 주제에 주의해야 합니다.
componentDidMount)즉, 런타임에 렌더링하는 가져온 데이터가 SSR이 아님을 의미합니다. 필요한 경우 데이터를 소품으로 제공해야 하므로 일반적으로 좋은 일입니다. res.render데이터를 가져올 때까지 렌더링(호출 ) 을 지연해야 하므로 방문자에게 약간의 지연이 발생할 수 있습니다.this.state하는 경우 브라우저에서 볼 수 있는 위치에 배치되지 않습니다.
머리말 뇌졸중은 누구에게나 언제든지 닥칠 수 있는 의학적 응급 상황입니다. 뇌의 한 부분으로의 혈류가 중단되어 갑작스러운 뇌 기능 상실로 이어질 때 발생합니다.
이번 주에 저는 일일 이메일 목록의 회원으로부터 이메일을 받았습니다. 그들은 알고 싶어했습니다. 매일, 매주, 매월 어떤 리소스를 방문합니까? 좋은 질문입니다! 제 작업 흐름과 제가 사용하는 주요 리소스에 대한 통찰력을 공유하게 되어 기쁩니다.
오늘날 빠르게 진화하는 비즈니스 환경에서 하이브리드 및 원격 작업의 개념은 전례 없는 추진력을 얻었습니다. 기업이 변화하는 직원의 요구와 기대에 지속적으로 적응함에 따라 다양한 분야의 전문가들이 모여 이 혁신적인 작업 방식의 이점, 과제 및 미래에 대해 논의했습니다.
지난 주에 저는 PressGazette(영국 언론 뉴스 웹사이트)를 통해 발송된 보도 자료를 보았습니다. 이 기사는 Scandi 팟캐스트 호스팅 및 광고 회사인 Acast가 팟캐스팅에서 "아마도 가장 영향력 있는" 게시자 컨소시엄을 이끌 것이라고 발표했습니다.
새로운 직업으로 전환하는 것은 혼자서 하려고 한다면 매우 어려울 수 있습니다. 귀하와 동일한 학습 수준에 있고 유사한 목표, 끈기 및 추진력을 공유하는 책임 파트너를 찾는 것이 중요합니다.