整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

页面静态化技术演进

页面静态化技术演进

SpringBoot Thymeleaf模板

原理:服务端渲染、模板变量替换。与 Spring Boot,MVC方言完美结合。


优势

  • 传统J2E使用JSP方式开发,但 Spring Boot对JSP支持不好。JSP规范与Servlet规范紧密耦合,使用JSP需要唤起servlet进程。
  • Thymeleaf支持HTML原型,可静态使用。

劣势

  • 传统模板页面基于服务端,需要唤起servlet容器,走springmvc全套流程。
  • 模板渲染IO操作
  • 较难缓存。用户请求在访问到springboot server时,还会经过nginx,如果使用模板渲染,很难在nignx上做缓存。

2 动静请求分离

动静分离的设计原理:区分动静态请求。

  • 动态请求:每次都从服务端获取数据请求。
  • 静态请求:不必每次从服务端获取的页面展示请求。

优势

  • 架构分离:分层优化
  • 缓存策略分离:例如前端做nginx、浏览器、cdn等缓存。
  • 研发框架分离:提高研发效率。

静态资源服务器,例如nignx;动态请求服务器,例如Tomcat;前后端采用Ajax等前端异步化交互技术发起请求,获取数据,填充静态页面。

实现技术

Ajax是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。

Nginx可以用作动态请求反向代理,也可以用作静态请求使用html resources。

3 静态请求缓存效率化

主要是CDN分发技术和Nginx proxy cache文件缓存。

CDN是内容分发网络,具有高性能、高可用、高扩展性的优点。

  • CDN是带有缓存性质的网络节点。即CDN是web服务器,提供了静态资源缓存机制。
  • 分发能力,请求分发到最近的节点。
  • 具有负载均衡能力,没有单点问题。
  • 需要专门运营维护CDN网络。

未使用CDN技术

使用CDN技术缓存静态资源。

客户端发起请求到DNS,查询ip地址,根据CNAME返回CDN管控节点域名,实现DNS解析权移交。管控节点根据请求ip地址分发到最近的CDN节点(负载均衡与分发)。如果在CDN节点命中缓存,直接返回,否则请求静态资源并备份。

运营厂商CDN实现原理中,HTTP 缓存头起到了重要作用。

Http缓存头 cache-ctrol

private:客户端可以缓存.

public:客户端和代理服务器都可以缓存。

max-age=xxx:缓存的内容将在XXX秒后失效。

no- cache:强制向服务端再验证一次,判断是否生效。

no-store:不缓存请求的任何返回内容。

有效性判断(验证时带上如下参数)

ETag:资源唯一标识

If-None-Match:客户端发送的匹配Etag标识符

Last- modified:资源最后被修改的时间

If- Modified- Since:客户端发送的匹配资源最后修改时间的标识符

4 动态请求缓存

4.1 动态请求前置缓存

前置缓存的使用,提高查询速度,减少数据库访问量。

  • Redis集中式缓存
  • 本地缓存:Tomcat缓存

包括主动失效、被动失效,需要解决缓存击穿、降级等问题。

4.2 使用Nginx proxy cache


Nginx Lua脚本编程定制化:

在nginx生命周期中,Lua通过协程机制在某些环节实现钩子机制。例如master进程创建worker进程时,运行初始化脚本;检测到某个url请求时,直接调用Redis返回response,从而省掉springboot webmvc流程。

Nginx proxy cache使用较少,因为再快的文件读写速度也比不上内存的读写速度。

4.3 Nginx shared dic 本地缓存

原理:nginx服务器的内存缓存,所有worker进程共享,通过lua操作。



lua脚本

获取缓存空间,从中获取list缓存。如果为空则转发请求,获取响应数据并缓存。

5 全页面静态化技术

原理:服务端通过类似爬虫的技术直接完成动态请求加载完成后的静态页面,将HTML、CSS、JS资源全部加载完后的页面生成后部署到CDN上。

我们访问页面,发起静态请求从CDN中获取html资源文件,发起动态请求访问nginx、tomcat获取响应数据,然后在客户端渲染页面。需要三步操作。

如果将渲染好的页面直接放到CDN上,则客户端可以直接获取。

优势:无需加载、无需动态请求、可全部CDN化

实现:

  • 类似爬虫的技术
  • 无头浏览器:类似浏览器,加载HTML文件,运行JavaScript,执行Ajax请求,获取数据,填充到DOM,输出静态资源文件。

HtmlUnit

Httpclient无法搞定动态请求,HtmlUnit可用于爬虫,测试自动化工具等

HtmlUnit是一个无界面浏览器Java程序。为HTML文档建模,提供了调用页面、填写表单、单击链接等操作的APl。提供了对 Javascript的支持,甚至可以使用相当复杂的Ajax库,根据配置的不同模拟 Chrome、 Firefox等浏览器。

上图.test.html书写错误

来源:https://www.cnblogs.com/dtyy/p/15531799.html

天我亲手创建了一个网页。首先,打开一个文本文档并将其重命名为“myweb”。然后,在文件中添加以下内容:<html> <head> <title>My First Webpage</title> </head> <body> <h1>My First Webpage</h1> </body> </html>

这样,你就成功地创建了一个静态网页,地址为本地。右键点击文件,选择“打开方式”,选择“记事本”,然后在文件中添加以下代码:<h1>Dog typehtml</h1>

这是一个HTML5的标签,它包含了HTML声明和标签的功能。网页的主体部分只有一个标签,即HTML标签,它是一个双标签,包含一个开始标签和一个结束标签,内部包含一个标题和网页内容。在网页的主体部分中,可以设置样式、参数、标题等。

网页的主体部分是由HTML标签包裹的,这是一个双标签,包括开始标签和结束标签。大美丽的网页,保存并刷新。大美丽网页的开头部分已经添加完成,网页的主体部分位于标题下方,即文章下方的部分,都是网页的主体部分。我的第一个网页就这样完成了,非常有趣。保存并刷新网页。我的第一个网页只是一个简单的静态网页,如果需要添加更多功能,可以使用网页开发工具进行操作。

在网页中添加一个生日祝福的内容。在王翰的文章中添加一个标题,标题为“生日祝福”。这也是一个双标签,包括开始标签和结束标签。保存并刷新网页。

在大美丽网页中添加一个图片。这是一个单标签,只有一个标签,没有结束标签。在百度中搜索一张图片,并将其地址复制下来。使用快捷键Ctrl + C,然后使用快捷键Ctrl + V将图片添加到网页中。保存并刷新网页,你会看到图片已经显示在网页中。

在网页中添加一段文字和图片,使它们位于同一行。使用行内标签“span”,使文字不会换行。保存并刷新网页。

这就是我今天做的第一个网页,非常简单。通过创建一个文本文档并添加一些简单的内容,就可以创建一个简单的静态网页。使用记事本打开文件会自动显示代码提示,按一个Tap缩进一行,就可以添加更多的标签和内容。行内标签可以嵌套在块标签中,但块标签不能嵌套在行内标签中。

使用color属性将其设置为蓝色,保存并刷新页面,即可获得相应的代码提示。只需输入color,即可获得相应的提示,而无需输入c。这样的代码更加易读。今天的任务已经完成,可以回顾一下今天的重点。了解了h天猫无网页的特性,只能包含一个h天命标签,且只能包含一个焊的body。

还学习了双标签和单标签的概念。双标签是指有头有尾的标签,如html hand。单标签则只有一个标签,例如一妹子。此外,还了解了行内标签和块标签的区别。请自行查看相关内容。为标签定义样式时,可以使用style属性。然后在其中添加颜色、字体等样式信息即可。对于图片标签,请注意使用其 src 属性来指定图片路径。今天的学习就到这里了,再见。

为HTML页面只能是静态的......再想一想!查看使用HTML页面进行简单动态操作的示例。

根据静态页面的定义- “它显示的信息与存储的完全一致”。因此,如果要构建一个显示数据库信息的页面(动态),那么您将使用服务器端页面,如.php / .aspx / .cshtml

作为一名网络开发人员,我经常听到 HTML页面是一个静态页面,所以它不能用于显示动态内容。” 这听起来很公平,但并不完全正确。让我们讨论为什么HTML页面不是真正的静态页面。

使用HTML页面进行简单动态操作

让我们使用HTML页面进行简单而强大的操作。在这里,我将创建一个用户可以订阅博客的功能。这个功能在互联网上很常见!

您将拥有“输入”和“按钮”控件。用户将输入他/她的电子邮件并单击按钮。单击该按钮,他/她的电子邮件应存储在数据库表中,他/她应该收到一条感谢信息。

HTML页面代码:

<input id="email" placeholder="Email Address" />

<button id="submit">Submit</button>

<div id="message"></div>

注意:最后的消息(谢谢)将显示在“message”div中。

使HTML页面动态化

现在的问题是,“如何在数据库中插入电子邮件并显示感谢信息?” 答案是通过 jQuery AJAX 方法。

这是主要的捕获!使用jQuery AJAX,我可以将电子邮件值发送到PHP页面,然后这个PHP页面将它插入到数据库中,然后返回感谢信息。

我将在按钮单击 事件上调用jQuery AJAX方法,并将电子邮件值发布到PHP 页面。

下面是我们的jQuery AJAX代码

$("#submit").click(function (e) {

$.ajax({

type: "POST",

url: "result.php",

contentType: "application/json; charset=utf-8",

data: '{"email":"' + $("#email").val() + '"}',

success: function (msg) {

$("#message").html(msg);

},

error: function (req, status, error) {

alert(req + " " + status + " " + error);

}

});

return false;

});

说明:在上面的jQuery AJAX方法代码中,我将 url 键传递给 result.php 页面。此PHP页面将接收电子邮件值。

“数据”值(见jQuery的AJAX代码),将通过电子邮件的用户填写输入控制值。

AJAX请求成功完成时将调用的“ success ”回调函数。我在此回调函数中从PHP页面接收返回的值,然后将其放在“ message ”div中。

如果在AJAX调用期间出现一些错误,则调用“ 错误 ”回调函数。

最后PHP页面......

<?PHP

$ email=$ _REQUEST ['email'];

//进行数据库操作并在电子邮件中插入电子邮件值。

//如果插入操作成功,则回显“您已订阅”。

//别的“出了点问题。再试一次。”

//我假设操作成功,所以返回

//“你订阅了。” 回到jQuery AJAX方法的消息。回声“谢谢!”;

?>

PHP页面接收电子邮件值,将其插入数据库,然后发回谢谢消息。

代码部分到此结束。现在,如果任何Web开发人员告诉您HTML页面不能用于显示动态内容,请礼貌地告诉那个人,“你错了,还有另一种方式!”

使用jQuery AJAX, HTML页面可以像服务器页面一样工作。您可以使用它,从HTML页面直接创建任何类型的数据库应用程序。

快乐的编码,不要忘记喜欢这个教程!