什么是页面静态化

页面静态化是指将动态生成的网页内容转换为静态的 HTML 文件,以提高网站的性能和访问速度。在页面静态化过程中,动态生成的内容被预先生成并保存为静态文件,而不是每次请求时动态生成。

页面静态化的主要目的是减少服务器的负载和响应时间,提高网站的性能和用户体验。通过将动态内容转换为静态文件,可以避免每次请求时都执行数据库查询、模板渲染等耗时操作,从而减少服务器的压力和响应时间。

页面静态化的实现方式有多种,常见的包括:

  • 预先生成静态文件: 在网站上线之前,通过脚本或工具将动态生成的页面内容预先生成为静态 HTML 文件,并保存在服务器上。用户访问时直接返回静态文件,无需再执行动态生成的过程。
  • 缓存静态文件: 在用户首次访问动态页面时,将生成的内容缓存为静态文件,并在后续的请求中直接返回缓存的静态文件。可以使用缓存技术(如 Redis、Memcached)来管理和更新缓存的静态文件。
  • CDN 加速: 使用内容分发网络(CDN)来缓存和分发静态文件,将静态文件缓存在全球各地的 CDN 节点上,以提高访问速度和用户体验。

将动态页面转化成静态的html,降低与数据库的交互次数,提高页面的访问速度。就是服务器在请求来之前把已经固定好的东西先编译好了,等请求来了再动态的填数据,不要等请求来了什么都没做忙得半死。

页面静态化适用于那些内容不经常变化的页面,如首页、商品详情页等。对于频繁更新的页面,如用户个人中心、购物车等,可以采用动静结合的方式,将静态化和动态化相结合,以满足不同的需求。

为什么要使用网页静态化技术

网页静态化技术缓存技术的共同点都是为了减轻数据库的访问压力。而网页静态化比较适合大规模且相对变化不太频繁的数据。另外网页静态化还有利于SEO(搜索引擎优化)。将网页以纯静态化的形式展现,就可以使用Nginx这样的高性能的web服务器来部署。

Nginx可以承载5万的并发,而Tomcat只有几百。利用第三方提供的模板引擎,生成对应的html,常见的模板引擎有:thymeleaf、freemarker、velocity。

FTL 是什么?如何使用?

FTL(FreeMarker Template Language)是一种模板语言,用于生成动态内容。它是一个开源的模板引擎,提供了丰富的语法和功能,用于在 Web 开发中生成动态的文本、HTML、XML 等内容。

使用 FTL 可以将模板与数据进行绑定,根据数据的不同生成不同的输出。

  1. 引入 FTL 库: 首先,需要将 FTL 的库文件引入到项目中。可以通过 Maven 或手动下载并导入相关的 JAR 文件。
<dependency>
   <groupId>org.freemarker</groupId>
   <artifactId>freemarker</artifactId>
   <version>2.3.31</version>
</dependency>
  1. 创建模板文件: 创建一个 FTL 模板文件,通常以 .ftl 为后缀。模板文件中包含了要生成的动态内容的结构和标记。
<html>
<head>
    <title>Welcome</title>
</head>
<body>
    <h1>Welcome ${name}!</h1>
</body>
</html>
  1. 配置模板引擎: 在 Java 代码中,需要配置并初始化 FTL 模板引擎。可以使用 Configuration 类来设置模板引擎的属性,如模板文件的路径、编码方式等。
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.TemplateExceptionHandler;

import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        Configuration cfg = new Configuration(Configuration.VERSION_2_3_31);
        cfg.setClassForTemplateLoading(Main.class, "/");
        cfg.setDefaultEncoding("UTF-8");
        cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);

        try {
            Template template = cfg.getTemplate("template.ftl");

            Map<String, Object> dataModel = new HashMap<>();
            dataModel.put("name", "John Doe");

            Writer out = new OutputStreamWriter(System.out);
            template.process(dataModel, out);
            out.flush();
        } catch (IOException | TemplateException e) {
            e.printStackTrace();
        }
    }
}

我们创建了一个 Configuration 对象来配置 FTL 模板引擎。然后,使用 getTemplate() 方法加载模板文件。接下来,创建一个数据模型 dataModel,将要在模板中使用的数据放入其中。最后,使用 process() 方法将模板和数据模型合并,并将结果输出到控制台。

  1. 加载模板: 使用模板引擎的 getTemplate() 方法加载模板文件。可以通过模板文件的路径或名称来获取模板对象。
  2. 创建数据模型: 创建一个数据模型对象,用于存储要在模板中使用的数据。数据模型可以是一个 Java 对象,也可以是一个 Map。
  3. 合并模板和数据: 使用模板对象的 process() 方法将模板和数据进行合并。将数据模型传递给 process() 方法,模板引擎会根据模板文件的内容和数据模型生成最终的输出。
  4. 获取输出结果: 获取合并后的输出结果,可以是字符串、文件或输出流,根据需要进行处理和展示。
<html>
<head>
    <title>Welcome</title>
</head>
<body>
    <h1>Welcome John Doe!</h1>
</body>
</html>

那么ftl和html的区别是什么?

FTL(FreeMarker Template Language)和 HTML(Hypertext Markup Language)是两种不同的模板语言和标记语言,用于在 Web 开发中生成动态内容和构建网页。
这两者之间的区别:

  • 语法和用途: FTL 是一种模板语言,用于生成动态内容。它具有自己的语法和标记,用于控制模板的逻辑和数据展示。HTML 是一种标记语言,用于描述网页的结构和内容。
  • 动态性: FTL 具有更强的动态性,可以在模板中使用条件语句、循环语句、变量和表达式等,以根据不同的数据生成不同的输出。HTML 主要用于静态页面的展示,不具备动态生成内容的能力。
  • 数据绑定: FTL 可以通过模板引擎将数据与模板进行绑定,实现数据的动态展示。HTML 本身不具备数据绑定的能力,需要通过其他技术(如 JavaScript)来实现数据的动态更新。
  • 扩展性: FTL 具有更强的扩展性,可以通过自定义指令、宏、函数等来扩展模板语言的功能。HTML 的扩展性相对较弱,主要通过 CSS 和 JavaScript 来实现页面的样式和交互。
  • 输出结果: FTL 的输出结果通常是生成的动态内容,可以是文本、HTML 片段、XML 等。HTML 的输出结果是最终的网页内容,用于在浏览器中展示。

需要注意的是,FTL 和 HTML 并不是互斥的,它们可以结合使用。通常,FTL 用于生成动态内容,而 HTML 用于描述页面的结构和布局。在 Web 开发中,可以使用 FTL 作为模板引擎,将动态生成的内容嵌入到 HTML 页面中,以实现动态网页的生成和展示。

参考博客链接:https://www.zhihu.com/question/271772094/answer/1857828758