新规实施:申请手机号码将全面实行人脸比对
06-18
React 服务端渲染注重不迷失。建议收藏慢慢看……在开始之前,我们先要明确一个问题:什么是服务端渲染?在过去的概念中,渲染工作大多是在客户端完成的,那么为什么现在需要服务器端来做这个工作呢?服务器端渲染和客户端渲染有什么区别吗?事实上,服务端渲染的工具有很多。
通过阅读手册,您可以快速上手。这并不难。
关键在于什么场景我们需要使用服务端渲染,什么样的渲染方案更适合我们的项目;知道它。 ,要知其所以然,我们首先要了解服务端渲染的基本概念和原理,为什么服务端渲染会出现,我们解决什么问题,掌握整体的渲染逻辑和思路,这样我们才能学会如何使用工具。
轻松自在,即使以后工具发生变化、更新,我们依然能够游刃有余,不再说“学不会”;这个逻辑就是所谓的道、法、术、器的概念;不要仅仅停留在工具的使用上,一些工具的技巧和技巧中,更多的是需要向法道的层面发展;什么是SSR?现代前端项目大部分都是单页应用,也就是我们所说的SPA。整个应用只有一个页面,通过组件展示不同的页面内容。
通过请求服务器获得所有数据后,由客户端进行处理。客户端组装展示;这是当前前端框架默认的渲染逻辑,我们称之为:Client Side Render(缩写:CSR);加载渲染流程如下:HTML/CSS代码-->加载JavaScript代码-->执行JavaScript代码-->渲染页面数据。
SPA应用的客户端渲染方式最大的问题有两个方面: 1:白屏时间过长,用户体验不好; 2:HTML中没有内容,对SEO不友好;这个问题的原因是,第一次加载时,需要先下载整个SPA脚本。浏览器执行完代码逻辑后,就可以获取页面真正想要显示的数据。
SPA脚本的下载需要较长的等待和执行时间。同时,下载到浏览器的SPA脚本没有页面数据。
浏览器实际上并没有做太多的渲染工作,因此用户看到的页面没有任何内容。不仅如此,由于页面中没有内容,搜索引擎爬虫抓取到的也是空白内容,不利于获取SEO关键词;与传统网站相比,浏览器获取的页面是静态页面,内容经过服务器处理。
有后端编程经验的人可能不会更熟悉页面结构和内容,由服务器处理后返回给客户端;世界上第一部展示整个过程的动画。对比两者我们会发现,传统网站的页面数据是在后台服务器中合成的,而SPA应用的页面数据是在浏览器中合成的。
但不管是哪一种,最终的渲染显示还是留给浏览器。所以,不要误会,我们这里所说的服务端渲染和客户端渲染是指页面结构和数据合成的工作,而不是浏览器。
展示作品;那么我们能否用传统网站的思路来解决SPA的问题,同时保留SPA的优势呢?不管是长白屏还是不友好的SEO,问题其实都是先返回首屏的页面结构给浏览器,然后再获取数据并合成。那么首屏的页面结构和数据就只能像传统网站一样使用了。
,先在服务器端合成,然后返回。同时,SPA脚本的加载仍然放在首屏上。
此时,返回的页面内容已经完整,结构和数据都已齐全。这样,浏览器可以显示首页数据的同时,加载SPA脚本后,搜索引擎爬虫也可以获取相应的数据,解决SEO问题。
为了更好地理解这个逻辑,我画了一个流程图: 是的,这就是我们所说的服务端渲染。基本逻辑,服务端渲染就是SSR(Server Side Rendering);解决了白屏时间过长的问题,因为第一次加载时,服务器会先返回渲染好的静态页面,并在静态页面中再次加载请求SPA脚本;基本原理:首页内容和数据在用户请求之前生成为静态页面,同时引入SPA脚本代码。
浏览器渲染静态页面后,请求SPA脚本应用,后续页面交互仍然是客户端渲染;明白了道理之后,我们就达到了道法的境界。接下来,让我们脚踏实地,体验一下技术和工具的应用水平;其中,Vue框架和React框架都有对应比较成熟的SSR解决方案,React对应的是Next.js框架,Vue对应的是Nuxt.js。
当然,如果你对这些不感兴趣,你也可以自己实现一个SSR服务器应用程序。我自己以前写过一篇。
如果您有兴趣,我想看一下我实现的代码。大家可以给我留言,我会把它变成教程发出来。
我们以React对应的Next.js为例来详细体验一下服务端渲染。 Next.js框架的中文官网主页已经介绍的很清楚了。
已经: npx create-next-app 或 npm init next-app my-next-project 运行: npm run dev命令,在启动项目的同时,还可以在./package.json文件中查看脚本配置代码语言: javascript copy "scripts": { "dev": "next dev", "build": "next build" , "start ": "next start"} 这些脚本涉及开发应用程序的不同阶段: dev - 运行 next dev,以开发模式启动 Next.jsbuild - 运行 next build,构建用于生产的应用程序 start - 运行 next start ,我们将启动Next.js生产环境服务器并访问它来查看我们的应用程序。页面路由在Next.js中,页面是放置在pages文件夹中的Reac组件。
这是由框架定义的;默认情况下需要导出该组件。 ; React不需要在组件文件中引入;页面地址和文件地址是对应的;页面(page)根据其文件名与路由关联。
例如,pages/about.js 映射到 /about。在项目的pages目录中创建about.js。
在./pages/about.js文件中填写以下内容: 代码语言:javascript 复制 // 类组件需要引入react Inherit import React from 'react' class AboutPage extends React.Component { render(){ return
除 href 属性外,不应将其他属性添加到链接组件中。其余属性将添加到 a 标记中。
Link 组件通过预取(生产中)函数自动优化应用程序以获得最佳性能代码语言:javascript copy // 引入组件 import Link from 'next/link' // 函数组件不需要引入 React function AboutPage() { return (
这是 p 标签中的内容< /p> ?
CSS模块约定样式文件的名称必须为:组件文件名.module.css创建./pages/list.module.css文件并填写以下内容:代码语言:javascript copy.prag{ color:brown; font-size: 20px;} 代码语言:javascript copy import React from 'react' //引入样式文件 import ListStyle from './list.module.css'?class ListPage extends React.Component { render(){ return
这是p标签中的内容
/pages/_app.js 文件内容如下: 代码语言:javascript copy import '../styles/globals.css'?//固定代码 function MyApp( { Component, pageProps }) { return
{this.props.data[0]. name}
{data[1].name}
//静态站点生成方案更适合CDN、缓存、内容量。根据不变的页面,如:宣传页面、博客文章、帮助文档、新闻页面、电商产品列表等诸多应用场景; Next.js 中的 getStaticProps 和 getStaticPaths 是静态站点生成;是一种构建时生成HTML的方法,后续的每个请求都会共享构建时生成的HTML; Next.js建议大部分页面采用静态生成,因为页面是提前生成的,一次构建,重复使用,访问速度比服务器端渲染更快。
静态生成速度快,但由于每次请求都会重新渲染,所以适合数据频繁更新的页面或者内容随请求变化的页面; next.js中,静态生成分为无数据和有数据两种情况;如果组件不需要从其他地方获取数据,则默认直接静态生成。如果组件需要从其他地方获取数据,Next.js会在构建时预先获取组件所需的数据,然后静态生成组件。
我们对比一下,开发环境不会打包静态文件,生产环境默认会打包静态文件。那么,如果有数据该怎么办呢?带数据的静态生成 getStaticProps() 这个方法官方翻译为静态生成。
它将组件预先编译成html文件,然后将整个html文件响应给客户端,从而达到预渲染的目的。getStaticProps()方法是一个异步方法,在Node环境中执行(构建时执行),因此可以进行文件读写、数据库链接、网络通信等一系列操作。
对于该方法的使用,先看demo: 代码语言:javascript copy import React from 'react'import Axios from "axios"?// 类组件 class ListPage extends React.Component { render(){ return
{this.props.data[0].name}
{data[1].name}
//它的用法还是比较特别的。代码文件必须放在一个目录下,并且代码文件的文件名必须是可选文件名的形式,比如\pages\props\[id].js的形式,当项目是builded后,next会根据不同的ID值生成不同的对应的静态文件,如下代码语言: javascript copy import React from 'react' import Axios from "axios"?// 类组件 class ListPage extends React.Component { render() { return
{this.props.backData.name}
如果你有兴趣的话,你可以自己去看看。
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
标签:
相关文章
06-18
06-17
06-17
06-18
最新文章
【玩转GPU】ControlNet初学者生存指南
【实战】获取小程序中用户的城市信息(附源码)
包雪雪简单介绍Vue.js:开学
Go进阶:使用Gin框架简单实现服务端渲染
线程池介绍及实际案例分享
JMeter 注释 18 - JMeter 常用配置组件介绍
基于Sentry的大数据权限解决方案
【云+社区年度征文集】GPE监控介绍及使用