动态网页静态化
为什么要让网页静态化,生成静态的程序来做网站的好处?
在三年前,有百分之八十的网站要求做成动态的。也就是从那个时候也就是ASP的发展高峰期。一些静态网页也要求做成动态网站。但是这二年来,网站要求做成静态的。也就是网页要求静态化。
为什么会有这样的变化?到底意味着什么?
目前网页HTML静态化是利用其它的动态技术生成HTML静态页面,还不是静态网站。因为的确是这样的,生成HTML静态网页有一定的好处。
一、加快页面打开浏览速度,静态页面无需连接数据库打开速度较动态页面有明显提高;
二、有利于搜索引擎优化SEO,Baidu、Google都会优先收录静态页面,不仅被收录的快还收录的全;
三、减轻服务器负担,浏览网页无需调用系统数据库;
四、网站更安全,HTML页面不会受Asp相关漏洞的影响;
观看一下大一点的网站基本全是静态页面,而且可以减少攻击,防sql注入。数据库出错时,不影响网站正常访问。
生成html文章虽操作上麻烦些,程序上繁杂些,但为了更利于搜索,为了速度更快些,更安全,这些牺牲还是值得的。
说法一:
1、省掉了服务器处理时间和调用数据库的时间访问速度比一般动态网站快10-20倍;
2、不用调用数据库服务器端的CPU调用大大减少增加服务器的性能;
3、生成静态路径利用搜索引擎的抓取和收录;
4、在排名中静态页面的排名权重要高于动态路径的页面。
说法二:
1、安全,静态页面从理论上讲是没有攻击漏洞的;
2、没有数据库访问或减少服务器对数据响应的负荷,速度快;
3、化化引擎,易于搜索引擎收录,搜索引擎比较喜欢收录静态页面;
4、降低服务器的承受能力,因为其不需要解析就可以返回客户端,因此减少了服务器的工作量,同时也减少了数据库的成本;
5、有意义的文件名,提高了可用性(对中文似乎就没这个优势了吧) 。
说法三:
提问:ASP生成静态HTML后更有利于搜索引擎收录吗?为什么?
答:是的,静态HTML更有利于搜索引擎收录。
因为静态网页和动态网页的区别在于动态网页可以给于浏览者权限,而搜索引擎抓取的时候是以游客身份进入的,所以不容易被抓取和收录,而静态网页由于不存在页面权限问题,所以更容易被收录,相对来说如果你的动态页面没有加任何权限的话也同样容易备收录!例如不生成静态页面的博客ASP PHP .net CGI的论坛只要没有访问权限限制都会被收录!
从以上的观点可以看出生成静态页面的好处。现在知名、主流的大站基本上都静下来了
下面使用using System.IO流生成静态页
//生成静态页
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
string n_id = this.GridView1.DataKeys[e.RowIndex]["nid"].ToString();
SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=;database=dress");
SqlCommand cmd = new SqlCommand("select nid,n_title,n_content,n_pic,n_date from P_news where nid="+n_id,conn);
conn.Open();
SqlDataReader dr = cmd.ExecuteReader();
//获取新闻发布的时间
string date = "";
if(dr.Read())
{
date = Convert.ToDateTime(dr["n_date"]).ToString("yyyyMMddHHmmss_");
//调用静态生成的方法
TransferStatic(dr["n_title"].ToString(), dr["n_content"].ToString(), dr["n_pic"].ToString(), date, n_id);
Response.Write("<script>alert('静态页面生成成功!');location='BulidStaticPage.aspx'</script>");
}
}
//转换静态方法
public bool TransferStatic(string title,string content,string pic,string date,string nid)
{
//输出路径
string outPath = Server.MapPath("~/NewDetails\\");
//简体中文
Encoding encoding = Encoding.GetEncoding("gb2312");
//读取模版文件
string htmlModel = Server.MapPath("~/HtmlModel/NewDetail.html");
StreamReader sr = null;
StreamWriter sw = null;
string str = "";//保存内容的字符串
try
{
sr=new StreamReader(htmlModel,encoding);
str=sr.ReadToEnd();//从头读到尾
}
catch(Exception e)
{
Response.Write(e.Message);
Response.End();
sr.Close();
}
//删除指定的页面
protected void Button2_Click(object sender, EventArgs e)
{
string path = Server.MapPath("~/NewDetails\\");
File.Delete(path + "//" + this.ListBox1.SelectedValue);
//Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "信息处理", "<script>alert('删除成功!');location='BulidStaticPage.aspx'</script>");
Page.ClientScript.RegisterStartupScript(this.GetType(), "信息处理", "<script>alert('删除成功!');location='BulidStaticPage.aspx'</script>");
}
生成静态页列表
//得到静态页面的路径
public string HtmlPath(DateTime date,string nid)
{
string path = "NewDetails/" + date.ToString("yyyyMMddHHmmss_") + nid + ".html";
return path;
}
//生成静态列表
protected void Button1_Click(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=;database=dress");
SqlDataAdapter da = new SqlDataAdapter("select nid,n_title,n_content,n_pic,n_date from P_news",conn);
DataSet ds = new DataSet();
da.Fill(ds);
string str = "";
for (int i = 0; i < ds.Tables[0].Rows.Count;i++)
{
//取时间
string date = Convert.ToDateTime(ds.Tables[0].Rows[i]["n_date"]).ToString("yyyyMMddHHmmss_");
//取编号
string nid = ds.Tables[0].Rows[i]["nid"].ToString();
//构造文件名
string pageName = date + nid + ".html";
//构造字符串
str += "<tr><td width=360px>"+"<a href='NewDetails/"+pageName+"'>"+ds.Tables[0].Rows[i]["n_title"].ToString()+"</a>"+"</td><td width=200px>"+ds.Tables[0].Rows[i]["n_date"].ToString()+"</td></tr>";
}
//调用转换方法生成静态页
TransferStatic(str);
}
//生成静态页
public bool TransferStatic(string strAll)
{
//输出路径
string outPath = Server.MapPath("~/");
Encoding encoding = Encoding.GetEncoding("gb2312");
//读取模版文件
string htmlMode = Server.MapPath("~/HtmlModel/NewsList.html");
StreamReader sr = null;
StreamWriter sw = null;
string str = "";
try
{
sr = new StreamReader(htmlMode, encoding);
str = sr.ReadToEnd();
}
catch (Exception e)
{
Response.Write(e.Message);
Response.End();
sr.Close();
}
//构造要生成的静态页面的名字
string pageName = "NewsList.html";
//开始替换内容
str = str.Replace("NewsList", strAll);
//写文件
try
{
sw = new StreamWriter(outPath + pageName, false, encoding);
sw.Write(str);//将字符串str写到文件
sw.Flush();
}
catch (Exception e)
{
Response.Write(e.Message);
Response.End();
}
finally
{
sw.Close();
}
return true;
}
在前台绑定新闻标题和时间:
<table>
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<tr>
<td width="360px"><a href='<%# HtmlPath(Convert.ToDateTime(Eval("n_date")),Eval("nid").ToString())%>'><%# Eval("n_title") %></a></td>
<td width="200px"><%# Eval("n_date") %></td>
</tr>
</ItemTemplate>
</asp:Repeater>
希望对大家有所帮助!