首页 文章 精选 留言 我的

精选列表

搜索[基础软件],共10000篇文章
优秀的个人博客,低调大师

服务端渲染基础

什么是渲染 一般而言大家提到“渲染”,可能会说:“凡是从服务器返回的 HTML 页面,均算作是服务端渲染。”这可能让不少人还是觉得迷惑,简单说渲染就是“数据”和“模板”拼接到一起。举个例子:我们前端开发最常见的一个场景,请求后端接口数据,然后将数据通过模板绑定语法绑定到页面中,最终呈现给用户。这个过程就是我们这里所指的渲染。 总结来说,渲染本质其实是字符串的解析替换,实现方式有很多种。但是我们这里要关注的并不是如何渲染,而是在哪里渲染的问题。 传统的服务端渲染 最早期,Web 页面渲染都是在服务端完成的,即服务端运行过程中将所需的数据结合页面模板渲染为 HTML 响应给客户端浏览器。所以浏览器呈现出来的是直接包含内容的页面。 这种方式对于没有玩过后端开发的同学来说可能会比较陌生,所以下面通过我们前端同学比较熟悉的 Node.js 来了解一下这种方式。 安装依赖: // 创建 http 服务 npm i express // 服务端模板引擎 npm i art-template express-art-template 服务端代码部分,我们可以在基本的 Web 服务,使用模板引擎,然后渲染一个页面,具体如下:' const express = require('express') const fs = require('fs') const template = require('art-template') const app = express() app.get('/', (req, res) => { // 1. 得到模板内容 const templateStr = fs.readFileSync('./index.html', 'utf-8') // 2. 得到数据 const data = JSON.parse(fs.readFileSync('./data.json', 'utf-8')) // 3. 渲染:数据 + 模板 = 完整结果 const html = template.render(templateStr, data) console.log(html) // 4. 把渲染结果发送给客户端 res.send(html) )} app.listen(3000, () => console.log('running...')) 客户端代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>Document</title> </head> <body> <h1>{{ message }}</h1> <ul> {{ each todos }} <li>{{ $value.title }}</li> {{ /each }} </ul> </body> </html> 这是最早的网页渲染方式,也是动态网站的核心工作步骤。 缺点: 前后端代码完全耦合在一起,不利于开发和维护; 前端没有足够的发挥空间; 服务端的压力较大; 用户体验一般; 但是不得不说,在网页应用并不复杂的情况下,这种方式也是可取的。 客户端渲染 传统的服务端渲染的有很多问题,而这些问题客户端 Ajax 技术可以有效解决。Ajax 技术使得客户端动态获取数据变为可能,也就是说原本服务端渲染这件事也可以拿到客户端做了。 下图是基于客户端渲染的 SPA 应用的基本工作流程: 我们以一个 Vue.js 创建的单页面应用为例,简单了解一下这种方式的渲染过程。 通过这个示例了解到我们可以把【数据处理】和【页面渲染】这两件事分开了。由后端负责处理数据接口,而前端只负责将接口数据渲染到页面中,这让前端不再受限于后端,更为独立。 缺点: 首屏渲染慢 不利于 SEO 现代化服务端渲染 现代化服务器端一般会选择同构渲染,也就是一份代码,在服务器端执行一次,用于实现服务器端渲染(首屏直出),然后在在客户端再执行一次,用于接管页面交互。简单来说,同构渲染就是“后端渲染”和“前端渲染”的结合,同构渲染同时拥有传统服务端渲染和客户端渲染的优点,可以有效解决 SEO 和首屏渲染慢的核心问题。 客户端发起请求 服务端渲染首屏内容 + 生成客户端 SPA 相关资源 服务端将生成的首屏资源发送给客户端 客户端直接展示服务端渲染好的首屏内容 首屏中的 SPA 相关资源执行之后会激活客户端 Vue 之后客户端所有的交互都由客户端 SPA 处理 如何使用同构渲染 如何使用同构渲染有两种方式,一种是官方解决方案,一种是使用第三方的方案。 使用 Vue、React 等框架的官方解决方案: 优点:有利于理解原理 缺点:需要搭建环境比较麻烦 使用第三方解决方案: React 生态中的 Next.js Vue 生态中的 Nuxt.js Angular 生态中的 Angular Universal 同构渲染应用的问题 同构渲染在应用上也存在以下问题: 开发条件有限 涉及构建设置和部署的要求更高 更多的服务端负载 以上就是我对于服务端渲染的一些浅谈,希望能够对大家有所帮助。 推荐阅读 CSS 盒子的边距塌陷 热门剧本杀与 SaaS 的不解之缘

优秀的个人博客,低调大师

网络编程基础知识

一、 cs架构和bs架构二、 互联网三、 osi七层 1.应用层 2.表示层 3.会话层 4.传输层 5.网络层 6.数据链路层 7.物理层 tcp/ip5层(5层名字记住:重点) -1.物理层 -网线,光纤 -2.数据链路层 -网卡 -3.网络层 -路由器 -4.传输层(运输层) -四层路由器 -5.应用层(会话层,表示层,应用层) -http协议,ftp协议,websocket协议... 3.1每一层的功能 1 物理层 -网线----》01010101电信号---》从网线中传输电信号 -8个比特位是一个字节 2 数据链路层 -数据帧:一组电信号是一个数据帧,有头和数据部分 -网卡---》mac地址---》全球唯一---》网卡出厂--》烧在了网卡上 -48位二进制---》看到的都是16进制表示 -广播: -局域网内通信,所有人都会接受到,通过mac地址确定给谁的数据报,如果不是自己的就不处理 -广播风暴 3 网络层 -跨局域网通信,需要经过网络层 -IP地址:0.0.0.0-255.255.255.255 -子网掩码: -192.168.1.1 255.255.255.0 -192.168.2.1 255.255.255.0 -ARP:ip和mac的对照表 4 传输层: -端口:0--65535,一个应用程序可以监听多个端口,但是一个端口只能属于一个应用程序 -TCP协议:可靠传输(可靠传输如何保证?三次握手,四次挥手) -UDP协议:不可靠传输 5 应用层 -htpp,ftp,websocket.... 3.2传输层常用接口 应用程序 FTP TFTP TELNET SMTP DNS HTTP SSH MYSQL 熟知端口 21,20 69 23 25 53 80 22 3306 传输层协议 TCP UDP TCP TCP UDP TCP TCP TCP DNS:把网址转换成ip地址 从浏览器发送出去的数据,都是http协议,默认是80端口 3.3传输层TCP的三次握手和四次挥手 1 tcp可靠传输:三次握手,四次挥手保证数据可靠 2 三次握手 -客户端向服务端发送链接请求 1 -服务端回复可以建立,并且带着跟客户端建立链接的数据报 2 -客户端收到后,链接建好了 3 3 这个过程后就可以可靠传输数据 4 断开链接(4四挥手) -客户端告诉服务端,要断开 1 -服务端收到,回复ok 2 -服务端可能还有数据在传递,暂时还没断开---等数据传完 -服务端告诉客户端,我要断了 3 -客户端收到,回复ok 4 四、Socket层 1 Socket抽象层,从osi七层抽象出来的,抽象了网络层和传输层,跟语言无关 2 专门给开发人员用的 五、基于Tcp的socket套接字(重点)服务端 #导入socket模块 import socket import time #第一个socket是模块名,第二个socket是类名 #类实例化得到对象,得到一个socket对象 #server=socket.socket(family=socket.AF_INET,type=socket.SOCK_STREAM) #不写默认就是他 server=socket.socket() #绑定地址跟端口 ,传一个元组,监听的地址,监听的端口 server.bind(('192.168.11.28',8008)) #监听 #半连接池是5,可以缓冲5个 server.listen(5) #等待用户连接(看源码,有两个返回结果) #sock是连接对象,以后这个服务端和客户端交互,使用这个对象交互 #addr是客户端地址(ip和端口) sock,addr=server.accept() #接收客户端发给我的消息 data=sock.recv(1024) #打印 print(data) #服务端给客户端发送消息(必须是byte格式) sock.send(b'helloworld') time.sleep(1) #关闭连接对象 sock.close() #关闭服务 server.close() 客户端 import socket #创建socket对象 client=socket.socket() #连接服务端 client.connect(('127.0.0.1',8008)) #给服务端发了一个sb client.send(b'sb') #收到了服务端给我的 data=client.recv(1024) print(data) #关闭 client.close()

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册