400-077-787913998539835
当前位置:首页 > 新闻资讯 > 建站经验

建站干货:动静分离,让网页访问速度提升几个level

发表日期:2019-12-23文章编辑:大连网建科技浏览次数: 标签:

建站后,随着内容的不断丰富,各种文字、图片、脚本的增加,如果没有妥当的处理方式,网页访问速度会逐渐降低。在这个追求时效的信息快时代,网页访问者的耐心正在降低。

据研究表明,用户对打开速度2秒以下的网页表示满意,而其能够忍受的最长等待时间是6~8秒。而8秒作为一个临界值,如果你的网站打开速度超过8秒,那么很可能,大部分访问者会因此离你而去。相关数据显示,如果网页加载时间超过12秒,99%以上的访问者会关闭页面,不再等待。

那么今天美橙将给大家带来网页提速的新招,即动静分离。

动静分离,那么什么动态的,什么是静态的呢?

访问网页的时候,我们总会发现浏览器会加载各种各样的文件,有html文件,有css样式表,有js脚本,还有图片,还有流媒体等各种文件,这些其实就是静态的文件,放在服务器上,无须动态生成的文件那么就是静态文件。那么什么是动态文件呢?例如java写的jsp文件,需要通过编译器进行编译成字节码文件,然后在java虚拟机上运行,运行之后,返回给客户端一个响应,有的时候,还需要到数据库中取出数据,那么这种需要经过编译的文件就称之为动态文件。

动态文件的处理比静态文件的处理速度要慢N倍,慢在啥地方呢?首先,动态文件需要编译,耗费时间,动态文件要去连接数据库,耗费时间,动态文件需要组织成http响应,耗费时间,根据java的流程,那么就是根据url,找到jsp文件,将jsp文件转换成servlet文件,然后形成类文件,然后在jvm上运行,jvm可能还要加载额外的类文件,然后组成成响应返回给servlet,然后再返回给客户端。

在使用动静分离的时候,一般使用的模型如下所示:

<iframe id="video" id="iframe_0.7752190983764249" src="data:text/html;charset=utf8,%3Cstyle%3Ebody%7Bmargin:0;padding:0%7D%3C/style%3E%3Cimg%20id=%22img%22%20src=%22https://mmbiz.qlogo.cn/mmbiz_png/7QpC8diafAtWIotaWQfdlxS6B4OTl2iaM3ia0OuFsDviaQ8oYpwibbzwibWznHibOVZOB3X1pRYtpYLMYCeuibCpUUIzWQ/0?wx_fmt=png&_=7565697%22%20style=%22border:none;max-width:701px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.7752190983764249',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0"></iframe>

在使用动静分离的时候,需要将一些静态的文件和动态的文件分离开来,从而使用nginx来处理静态请求,而使用tomcat来处理动态的请求,从而会大大的提高处理速度,为啥?

nginx和httpd是专门用来处理静态文件的,效率极高,并且由nginx直接响应,减少了向后端转发的过程;将动态内容和静态内容进行分离,可以提高资源利用率,nginx的性能得到发挥,也让tomcat不会那么繁忙,动态服务器机器耗费性能,例如在java中的各种方法区对象的回收,堆内存的回收等。

构建动静分离的环境

要想构建动静分离的环境,那么就需要安装nginx,安装jdk,然后安装tomcat,具体的步骤如下:

编译安装nginx:

[[email protected] nginx-1.10.1]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-pcre

[[email protected] nginx-1.10.1]# make && make install

[[email protected] ~]# /usr/local/nginx/sbin/nginx (启动nginx)

[[email protected] ~]# netstat -tnlp|grep nginx(查看监听端口,并且使用浏览器访问测试)

tcp0 0 0.0.0.0:80 0.0.0.0:*LISTEN 13933/nginx

<iframe id="video" id="iframe_0.11612649917182427" src="data:text/html;charset=utf8,%3Cstyle%3Ebody%7Bmargin:0;padding:0%7D%3C/style%3E%3Cimg%20id=%22img%22%20src=%22https://mmbiz.qlogo.cn/mmbiz_png/7QpC8diafAtWIotaWQfdlxS6B4OTl2iaM31uh6gibIib0c08bsibbaZyVG5uEpsE2zWt6xpicWBkMQ2mhC0fL7VzSThg/0?wx_fmt=png&_=7565697%22%20style=%22border:none;max-width:701px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.11612649917182427',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0"></iframe>

安装jdk:

[[email protected] server]# rpm -ivh jdk-8u144-linux-x64.rpm

preparing...########################################### [100%]

1:jdk1.8.0_144########################################### [100%]

Unpacking JAR files...

tools.jar...

plugin.jar...

javaws.jar...

deploy.jar...

rt.jar...

jsse.jar...

charsets.jar...

localedata.jar...

配置java环境变量:

[[email protected] server]# echo "export JAVA_HOME=/usr/java/latest">/etc/profile.d/java.sh

[[email protected] server]# echo "export pATH=$JAVA_HOME/bin:$pATH">>/etc/profile.d/java.sh

[[email protected] server]# cat /etc/profile.d/java.sh

export JAVA_HOME=/usr/java/latest

export pATH=/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

测试jdk及环境变量是否成功:

<iframe id="video" id="iframe_0.09957966243735061" src="data:text/html;charset=utf8,%3Cstyle%3Ebody%7Bmargin:0;padding:0%7D%3C/style%3E%3Cimg%20id=%22img%22%20src=%22https://mmbiz.qlogo.cn/mmbiz_png/7QpC8diafAtWIotaWQfdlxS6B4OTl2iaM3k3kRmughY6ueB50LRwa68OE5arH3Cal8FRY7rD604lzrteJTw3ZicHw/0?wx_fmt=png&_=7565697%22%20style=%22border:none;max-width:701px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.09957966243735061',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0"></iframe>

安装tomcat:

[[email protected] server]# tar -xf apache-tomcat-8.5.20.tar.gz -C /usr/local/

l[[email protected] server]# ln -sv /usr/local/apache-tomcat-8.5.20/ /usr/local/tomcat

`/usr/local/tomcat' -> `/usr/local/apache-tomcat-8.5.20/'

配置tomcat环境变量:

[[email protected]]# vim /etc/profile.d/tomcat.sh

[[email protected]]# cat !$

cat/etc/profile.d/tomcat.sh

exportCATALINA_HOME=/usr/local/tomcat

exportpATH=$CATALINA_HOME/bin:$pATH

测试tomcat是否安装成功:

[[email protected] ~]# netstat -tnlp|grep java(注意浏览器访问的时候,添加端口号来进行访问)

tcp 0 0 :::8080 :::* LISTEN 1125/java

tcp 0 0 ::ffff:127.0.0.1:8005 :::* LISTEN 1125/java

tcp 0 0 :::8009 :::* LISTEN 1125/java

<iframe id="video" id="iframe_0.5096301174071962" src="data:text/html;charset=utf8,%3Cstyle%3Ebody%7Bmargin:0;padding:0%7D%3C/style%3E%3Cimg%20id=%22img%22%20src=%22https://mmbiz.qlogo.cn/mmbiz_png/7QpC8diafAtWIotaWQfdlxS6B4OTl2iaM3HSibib7G7mJXzEg4xO93n5Oqhog7YRsGMNmdojHWxDWeKyfuibDnAv9Jg/0?wx_fmt=png&_=7565697%22%20style=%22border:none;max-width:701px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.5096301174071962',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0"></iframe>

创建动态文件

根据java的目录层次结构,写一个基本的页面,如下:

[[email protected]]# mkdir kel

[[email protected]]# cd kel

[[email protected]]# ls -l

total 0

[[email protected]]# mkdir {META-INF,WEB-INF,classes,lib}

[[email protected]]# vim index.jsp

[[email protected]]# cat index.jsp

<%@ page language="java" %>

<%@ page import="java.util.*" %>

<html>

<head>

<title>JAVA pAGE</title>

</head>

<body>

<% out.println("Hello,World"); %>

</body>

</html>

[[email protected]]# ls -l

total 20

drwxr-xr-x 2 root root 4096 Sep 20 14:46 classes

-rw-r--r-- 1 root root 201 Sep 20 14:46 index.jsp

drwxr-xr-x 2 root root 4096 Sep 20 14:46 lib

drwxr-xr-x 2 root root 4096 Sep 20 14:46 META-INF

drwxr-xr-x 2 root root 4096 Sep 20 14:46 WEB-INF

修改tomcat的配置文件server.xml(添加一个虚拟主机,主机名为www.kel.com,,默认路径为webapps下面的kel目录):

<Host name="www.kel.com" appBase="webapps" unpackWARS="true" autoDeploy="true">

<Context path="" docBase="kel" reloadable="true" />

</Host>

测试访问:

[[email protected]]# grep "www.kel.com" /etc/hosts (设置主机名解析)

192.168.1.238 www.kel.com

[[email protected]]# curl http://www.kel.com:8080 (使用curl进行访问)

<html>

<head>

<title>JAVA pAGE</title>

</head>

<body>

Hello,World

</body>

</html>

配置nginx

配置主机名解析:

[[email protected]]# grep "www.kel.com" /etc/hosts

192.168.1.237 www.kel.com

[[email protected]]# ls -l nginx.conf(修改nginx配置文件,将动态请求也就是文件后缀为jsp或者do的请求转发到tomcat上,由于是虚拟主机,所以url中必须写上主机名,静态页面在nginx上处理,静态页面在html路经下)

-rw-r--r-- 1 root root 2727 Sep 20 15:09 nginx.conf

server_name www.kel.com;

#charset koi8-r;

#access_log logs/host.access.log main;

location / {

roothtml;

index index.html index.htm;

}

location ~* \.(jsp|do)$ {

proxy_passhttp://www.kel.com:8080;

}

上传静态文件到nginx的html目录中,用来测试静态文件的访问:

[[email protected] nginx]# ls -l html/1.jpg

-rw-r--r-- 1 root root 25854 Sep 20 15:13 html/1.jpg

访问nginx服务器测试静态文件访问:

<iframe id="video" id="iframe_0.9560413911496475" src="data:text/html;charset=utf8,%3Cstyle%3Ebody%7Bmargin:0;padding:0%7D%3C/style%3E%3Cimg%20id=%22img%22%20src=%22https://mmbiz.qlogo.cn/mmbiz_png/7QpC8diafAtWIotaWQfdlxS6B4OTl2iaM3nJ2Zz2J77fVczm9ykrZXR85uLyAfBtoAptqYupyDRQvILwKkkbVr4A/0?wx_fmt=png&_=7565697%22%20style=%22border:none;max-width:701px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.9560413911496475',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0"></iframe>

访问nginx服务器,测试动态页面访问:

<iframe id="video" id="iframe_0.9675013371761754" src="data:text/html;charset=utf8,%3Cstyle%3Ebody%7Bmargin:0;padding:0%7D%3C/style%3E%3Cimg%20id=%22img%22%20src=%22https://mmbiz.qlogo.cn/mmbiz_png/7QpC8diafAtWIotaWQfdlxS6B4OTl2iaM3FsWwmibicCp2Uvb9hGnrkHicrZplxpoiac9NVABWOMgSeia00n6sic8eLn0A/0?wx_fmt=png&_=7565697%22%20style=%22border:none;max-width:701px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.9675013371761754',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0"></iframe>

总结

总体上来说,动静分离还是比较简单的,主要让前端的代理服务器直接响应静态请求,让前端的代理服务器转发动态请求到后端的tomcat服务器即可。

注意上面的是实验环境,对于tomcat的运行的用户是直接的root用户,在生产中,必须修改为其他不能登录的用户,例如tomcat用户。

如没特殊注明,文章均为网建科技原创,转载请注明来自http://www.dlwjkj.com
相关新闻

为什么你不适合做产品经理?

日期:2020-07-09

网站要升级改版 才发现一个让人揪心的问题

喜欢玩网游的朋友在周二都很纠结,因为经常在这个时间段,游戏公司要对游戏重启更新,或者维护2个小时,...

日期:2020-07-09

四大简单指标:证明社交媒体营销推广策略的价值

我认识的大多数社会营销人员都在努力试图在各大社交渠道如Facebook, Twitter, LinkedIn或者Insta...

日期:2020-07-09

网站被黑形势日趋严峻 360搜索发布悟空算法2.0

近日,大量网站页面被黑事端充斥各大站点,一些黑客通过代码劫持等方式,将正常网页跳转至含有色情、博...

日期:2020-07-09

运营实战指南:深入浅出内容运营

A5创业项目春季招商 好项目招代理无忧我在《运营实战指南》一书中总结的运营知识体系有一条暗线:*...

日期:2020-07-09

公司网站需紧跟时代步伐设计制作切莫一成不变

A5创业项目春季招商 好项目招代理无忧网站不是什么新鲜名词,对于很多公司来说已经实实在在的运用...

日期:2020-07-09

从传播到营销,你只差一个好故事!

大多数人做品牌会怎样做?最通常的做法是提炼自己产品的优点,然后启用大量的媒体,做最大范围的传播。...

日期:2020-07-09

建站之星优化一键生成手机版操作

上周,建站之星再度更新优化新功能,全面完善一键生成手机版的操作体验,将原有操作改为“单击按钮直接...

日期:2020-07-09

A5交易2017年简报,2018我们从“心”出发

A5创业项目春季招商 好项目招代理无忧过去的2017年我们感慨光阴荏苒也感恩这充实的一年岁月不居,...

日期:2020-07-09

自助建站新用户操作禁忌 美橙互联专业盘点

互联网+时代,官方网站是企业在互联网上的一张名片,和10年前不同,它可能已无法对企业经营起到决定性...

日期:2020-07-09