外观
4.静态网页和动态网页
约 1892 字大约 6 分钟
2025-04-01
形式
静态网页、动态网页看着都是网页,都是在浏览器上用HTML展示出来的页面。 举一个简单的例子,例如:
动态网页的形式是请求 例如https://127.0.0.1/?c=home
意思是向服务器请求一个参数c,值是home的请求,请求之后,服务器返回一个页面,浏览器进行展示。
静态网页的形式是文件请求 例如https://127.0.0.1/hello.htm
意思是向服务器请求一个叫hello.htm的文件,请求之后,服务器返回一个页面,浏览器进行展示。
说明
很多系统的页面,大部分都是动态页面,互联网上的新闻网站、资讯、下载网站等,大部分都是动态网页或者伪静态网页(后面会写为什么需要那么,也可能会处理成静态网页,少数网站是纯静态网页。
静态网页和动态网页的区别,有人说是静态网页是不动的,动态网页是可以动的。也有人说是后台是否有数据库的支持,也可以简单的描述为网页上的展示的内容是否需要变换,是因人而异显示还是一直保持不变。
其实这些说法都没有说到根本, 因为静态网页也可以做到因人而异,例如一个使用js写的网页计时器,就一个html,也不需要服务器可以直接打开,什么时候打开,就显示什么时候的时间。动态网页也可以一直保持不变,例如用php写一个hello world的欢迎页面,什么时候访问都只会显示hello wolrd。
动态网页和静态网页的最主要的区别是,静态网页本来就是标准的html文件(可以包含js、css文件)。而动态网页原来并不是html文件,只有在用户请求的时候,才生成相关html数据,然后返回给浏览器相应格式的html文件,供浏览器访问。
不同的语言转换html的方式类似,但需要程序是不一样的,这时候需要的大家常说的容器(或者解析器),例如将java或者jsp转为html则需要tomcat、jboss等java容器,php则需要php引擎,python需要python引擎,这就是为什么服务器通常需要部署不同程序环境的原因。 静态网页无须经过容器引擎的处理。例如,我们将一个.txt文件的扩展名改为.html,放到服务器中,如果有请求来到服务器,服务器会直接将此文件吐回浏览器来显示。
当然这里的服务器是指的处理html的服务引擎,例如nginx 或者apache sever(apache httpd,不是apache tomcat)等,并不是说装个服务器就可以直接可以用了。
动态网页要经过容器引擎的处理,我们常见的ASP、JSP、PHP等是不同语言实现的动态网页, 以PHP为例,当访问被请求时,动态网页要到PHP容器中进行解析,由解析器对里面的代码进行处理,如果涉及到数据库访问,则需要到数据中进行数据查询,然后将数据插入到对应的位置,最后生成html格式的html文件,交给html服务引擎(例如nginx),由nginx,返回给访问者(浏览器),浏览器收到html后进行显示。
动态网页里,一般都是混合代码,固定的html格式代码,例如样式、排版等,和处理动态信息的程序代码。后来演变的是模板架构,先按照页面需要显示的效果设计出来模板,然后再填写对应的动态变量。而动态变量的计算和生成则在其他代码里,这样比较方便维护和调试。再后来演进的是前后端分析架构,后端只负责提供数据,而前端则负责将数据进行显示。
差异
所以我们很容易就等的出来,静态网页的访问速度是固定的,受限于文件的大小,大的需要多传输一会,小的少传输一会,在当今的网络条件小,只要不是几十M的文件,基本上很难有差异。
而动态网页除了多了一步解析之外,还取决了里面代码的所处理的事项,如果需要查询数据库,则需要等待数据库返回结果,如果需要进行计算,就需要等待计算的结果,等代码都处理完毕后,在进行返回。
所以静态网页的访问速度要远远超过动态网页。
有人可能会问了,如果一个动态网页里,只有html代码,没有程序代码,那么算是动态网页还是静态网页,这个问题就跟前端的html页面全是js代码(html里的脚本代码)是动态网页还是静态网页的问题是类似的。
这两个问题留给大家讨论。
静态化
通过上面的介绍,大家可能发现,静态网页和动态网页最大的区别就是要不要过解析器,有些业务访问量很大,但是变化不是很大,那么访问速度、减少系统开销(每次有人进行访问,都进行一次业务处理,有的还涉及到查数据库)。
可能会进行静态化处理,就是将该动态网页先生成对应的html页面,等用户访问的时候,直接返回给早就生成好的html文件,不但减少了服务器开销,还提高了访问速度,减少了访问时间。
现在主流的cms系统都带有静态化技术。
伪静态
大家也可能会发现, 有些页面的链接是固定的,也是以.thml,但是这个.html是动态页面,这是怎么回答。
由于搜索引擎收录网站内容的时候,只收集html、htm 等静态网页的后缀的链接,所有一些系统提供了将url请求模拟成html的功能。
例如我们上面说到的 https://127.0.0.1/?c=home, 这样链接,搜索引擎就不收录,如果这是我们网站的主页,那么搜索引擎不收录主页,就会减少搜索到网站的几率和排名。
所以有一种技术,将https://127.0.0.1/?c=home 模拟成 https://127.0.0.1/home.html .这样搜索引擎一看,你是静态网页,那需要收录一下。
而实际上当请求是,服务器实际上是将一个动态生成的页面给伪装成了home.html,而是内部依旧走原来解析、处理、返回的方式。
现代前端技术
现在流行前后端分离的技术架构,前端负责静态页面的展示,后端负责数据的处理,前端通过ajax请求后端的数据,后端返回数据,前端再进行展示。
这样的技术架构下,前端是一些布局和样式的定义,数据内容需要从后台获取后才可以进行完整的展示,所以很难归到静态页面中,详细的技术实现我们下节再谈。