简单了解服务端渲染 与 模块化前世今生 |掘金日新计划

161 阅读5分钟

9450DE2F5A87CC54800BCC50C4D68B5D.jpg

服务器端渲染(Server-Side Rendering)是指由服务侧完成页面的 HTML 结构拼接的页面处理技术,发送到浏览器,然后为其绑定状态与事件,成为完全可交互页面的过程。 [2]

SSR简单理解就是html是由服务端写出,可以动态改变页面内容,即所谓的动态页面。早年的phpaspjsp这些Server page都是SSR的。但基于React技术栈,又有些许不同,server bundle构建的 时候,要吐多少模块,是server端决定的。client bundle和之前一样,差别在于这次是hydrate,而非render。 服务器端渲染(Server-Side Rendering,简称 SSR)是一种在服务器上将应用或页面转换为 HTML 字符串,然后发送到客户端的技术。客户端接收到这个 HTML 字符串后,将其解析并显示在浏览器上。

服务器端渲染的主要优点是:

更好的 SEO:由于服务器端渲染的页面在发送到客户端时已经是完整的 HTML,搜索引擎可以更容易地抓取和索引这些页面。这对于需要搜索引擎优化(SEO)的应用来说是非常重要的。

更快的首屏加载时间:服务器端渲染的页面在客户端无需等待 JavaScript 文件下载和执行就可以显示,这可以提供更快的首屏加载时间,提高用户体验。

然而,服务器端渲染也有一些缺点:

服务器压力大:服务器需要为每个请求生成一个完整的 HTML 页面,这会增加服务器的 CPU 和内存使用,可能会影响服务器的性能。

复杂性高:服务器端渲染通常需要额外的配置和工具,例如 Node.js 服务器和服务器端渲染框架。这会增加应用的复杂性。

在实际的应用中,你需要根据你的需求来选择是否使用服务器端渲染。例如,如果你的应用需要优化 SEO 或者提供更快的首屏加载时间,你可能需要使用服务器端渲染。如果你的应用主要是内部使用,或者你的服务器资源有限,你可能不需要使用服务器端渲染。 为什么要为每个请求生成一个完整的 HTML 页面,而不是统一生成一份?

在服务器端渲染(Server-Side Rendering,SSR)的模式下,服务器为每个请求生成一个完整的 HTML 页面的原因主要有两个:

动态内容:每个请求可能需要显示不同的内容。例如,不同的用户可能看到的页面内容是不同的,或者同一个用户在不同的时间看到的页面内容也可能是不同的。在这种情况下,服务器需要为每个请求动态生成 HTML 页面,以确保每个用户都能看到正确的内容。

个性化体验:为每个请求生成一个完整的 HTML 页面可以提供个性化的用户体验。例如,服务器可以根据用户的地理位置、语言设置、设备类型等因素来生成不同的 HTML 页面。

然而,为每个请求生成一个完整的 HTML 页面会增加服务器的负载,因此在某些情况下,你可能会选择使用其他的渲染模式,例如客户端渲染(Client-Side Rendering,CSR)或者静态网站生成(Static Site Generation,SSG)。

在客户端渲染的模式下,服务器只需要发送一个基本的 HTML 框架和 JavaScript 文件,然后由客户端(通常是浏览器)来生成和更新页面内容。这种模式可以减轻服务器的负载,但是可能会导致首屏加载时间较长,因为用户需要等待 JavaScript 文件下载和执行。

在静态网站生成的模式下,所有的页面在部署时就已经生成好了,服务器只需要将这些预生成的页面发送给用户。这种模式可以提供非常快的加载速度和良好的 SEO,但是不适合需要频繁更新或者有大量动态内容的应用。

———————————————— 版权声明:本文为CSDN博主「我想要身体健康」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:blog.csdn.net/m0_57236802…

一、模块化定义

模块,又称构件,是能够单独命名并独立地完成一定功能的程序语句的集合(即程序代码和数据结构的集合体)
模块化的关键字为:单独命名、 特定功能、程序集合 模块引入规则: commonJS

需要依据该引入路径特征判断: 当前页面为:src/app/index.js中调用require方法 1、相对路径与绝对路径:相对路径转化为绝对路径,然后查找对应文件,找不到报错 2、是否有后缀名称:没有后缀名称按一下规则处理 如./moduleA/index 首先视index为文件,在同级目录下(src/app/moduleA)依次查找以下后缀的文件

1.index 无后缀文件,按照js解析
2.index.js
3.index.json
4.index.node 
找不到继续进行

index为目录(src/app/modeleA/index),在改目录下依次查找一下文件

1

1. package.json 若找到则查看该文件是否具有main字段,有则加载该字段对应文件,没有则继续
2. index.js
3. index.json
4. index.node
找不到报错 

3、无后缀名称、无路径:视为包

1.是否是核心模块,如http,fs等 2.在当前文件夹的node_modules文件夹中查询,查询规则与2中步骤一致,即文件=>目录 3.回退当前目录的父级目录node_modules中查询 4.直到找到该包,否则报错

其他参考:

深入ES6 module与commonjs: https://segmentfault.com/a/1190000017878394
阮一峰JS模块化编程:
(1) http://www.ruanyifeng.com/blog/2012/10/javascript_module.html
(2)http://www.ruanyifeng.com/blog/2012/10/asynchronous_module_definition.html
JS模块化加载之CommonJS、AMDCMDES6
https://zhuanlan.zhihu.com/p/41231046
JS模块规范:AMD、UMD、CMD、commonJS、ES6 module:
https://segmentfault.com/a/1190000012419990?utm_medium=referral&utm_source=tuicool
JavaScript模块的前世今生:
https://yanhaijing.com/javascript/2015/03/28/js-module

原文链接:blog.csdn.net/lh408684474…