Static Site Generation (SSG)
SSG is the abbreviation of Static Site Generation, which is a technology that generates static HTML pages at build time. In this mode, developers will write some template files and data files, and then use the build tool to convert these files into static HTML pages. These pages can be deployed directly to the server without the need for real-time rendering by the server.
Advantages of SSG:
-
Loads very fast: Since the page is static, it does not need to be rendered from the server, and is directly loaded and displayed by the browser, with excellent performance, and the loading speed is at least 2-10 times faster than SSR
-
More SEO-friendly: Similar to server-side rendering, search engine crawlers can directly crawl the final page content, which is conducive to indexing and ranking
-
Easy to deploy: The generated static pages can be directly deployed to any web server that supports static files, without relying on the Node environment, etc.
Disadvantages of SSG:
-
Poor support for dynamic content: Since the page is generated at build time and will not be dynamically updated according to user requests, it has poor support for some dynamic content (such as user-generated content)
-
Updated content needs to be rebuilt: When the page content needs to be updated, the entire application needs to be rebuilt and redeployed
How to configure (SSG) in the framework
my-nodestack-app
├── src
│ ├── pages
│ │ │── ssg
│ │ │ │── index.js
│ ├── routes
│ │ │── ssg
│ │ │ │── index.js
├── ndsk.config.js
└── package.json
export default (props)=>{
return (
<html lang="en">
<head>
<title>SSG</title>
</head>
<body>
{props.title}
</body>
</html>
);
}
export const SSG = { id:'title'}
export default (request)=>{
const title = request.query.title || 'SSG'
return {title}
}
- Visit http://localhost:3000/ssg?title=test
- Press
F2
to check and you will find that no static HTML is generated. This is because theSSG
mode will only take effect in the production environment. Execute the following command in the terminal to compile and start the project
- 在终端执行
$ npm run build
$ npm run start
- Visit http://localhost:3000/ssg?title=test again and refresh the page, then press
F2
to view - Visit the above link, you will find that static page loading has been implemented, but no
script
script files have been loaded. This is because there is no setting to allow the loading ofscript
scripts. If you need to configure the loading script, you can configure the above SSG as follows:
export const SSG = {
id:'title', //Dynamically generate HTML page based on title parameter
script:true
}
-
As for why
script
is configured separately, it is mainly for some websites that do not require interaction, to reduce unnecessary static resource requests, because deleting script files has no effect, such as some document websites, or blog sites, etc. -
SSG
can be a string, Boolean value, array or object. When it is an object, it is configured as follows:id
Generate static page parameters based onurl
script
Whether to load the script file
-
If
SSG
is equal totrue
, it means that only HTML is generated according to the current URL, and HTML will not be dynamically generated according to the URL parameters. No matter how the URL parameters are modified, the page will never change, and the script file will not be loaded. Generally, this is rarely needed because thehtml
file can be directly rendered. -
If
SSG
is equal to a string, the same as above, but the script file will be loaded
export const SSG = true //The script file will not be loaded
//export const SSG = 1 //The script file will be loaded
How to update the generated html
static file
- Modify the
src/routes/ssg/index.js
file content as follows:
export const method = ['get','post']
export const SSG = {
id:'title',
script:false
}
export default (request)=>{
const title = request.query.title || 'SSG'
if(request.method === 'post' && request.query.shell === 'update'){
request.updateSSG('test'); // Update title to be equal to the HTML file generated by test
return {title}
}else{
return {title}
}
}
- Use
request.updateSSG()
to update. As shown above, if the request type is equal topost
, and theshell
parameter inurl
is equal toupdate
, then thetitle
parameter needs to be updated to be equal to the html file generated bytest
. This makes it easier for users to update a singlehtml
file generated in the background instead of updating all of them each time. - Use
post
to request http://localhost:3000/ssg?shell=update. The next visit will update the static page. - Note: You must use the
post
request to update, because theget
request directly returns static html and does not perform any routing operations.