谈*静态页*(或网页*静态化*)的时候,请区分一些概念(转)

 http://www.cnblogs.com/JeffreyZhao/archive/2009/07/05/talk-about-page-statilization.html

    “静态页”,在Web应用程序开发中是很常见的概念。只是我发现目前还是有相当部分的朋友,在这方面的存在一定的误区。因此现在独立写一篇文章,也想把一些问题讲讲清楚,以后在讨论的时候也好有个准。

  不久前有朋友写了一篇题为《提供生成静态页核心代码》的文章,介绍了一种“向硬盘写入页面文件”的方式。这篇文章的内容在此并不多作讨论,这里引用一下作者给出的摘要:

网页生成静态Html文件有许多好处,比如生成html网页有利于被搜索引擎收录,不仅被收录的快还收录的全。前台脱离了数据访问,减轻对数据库访问的压力,加快网页打开速度。

  这种说法存在一个严重的问题,因为它混淆了两个概念:“静态页”有利于网站性能,和“静态页”有利于SEO。有朋友可能会说:“这两点说的都没有错啊,不信你去搜索引擎上查一下,都有很多资料”。是的,这两种说法都能在搜索引擎上找出“依据”来,只可惜在这种两种情况下的“静态页”所指的内容,或者说是“做法”完全不同,可以说没有任何关系。换句话说,这里造成“混淆”的原因是“指代不明”。为了方便阐述,在本文接下来的部分中将尽可能避免“静态页”,“静态化”等词语,而是使用以下两种区分明显的说法进行阐述:

  • 规范页面URL
  • 缓存页面内容

规范页面URL

  如今在开发的Web应用程序时,往往需要从客户端获取一些信息,然后根据这些信息生成页面。例如,我们需要从客户端获取一个“页码”,然后在页面上呈现出这一页的内容。从客户端传递信息的方式有多种,其中最常见的便是通过Query String进行传递。例如,我们可以通过Article.aspx?id=3这样的方式来请求id为3的文章。不过如果纯粹使用Query String来传递信息的话,一个URL可能会带有许多项Query String。例如ArticleList.aspx?page=3&keywords=helloworld&category=6&....。

  有种说法是,这样的URL由于明显是动态的,因此搜索引擎对它的处理会有所负面倾斜,例如将其权值放低。因此,很多程序都会把为URL规范为特别的形式,例如Article/3,甚至是Article_3.html。使用htm或html作为URL的结尾,是为了“欺骗”搜索引擎,让搜索引擎以为这是一个直接从存储设备上直接读取的资源,它不会改变,因此“它的权值会相对提高”。实际上老赵并不同意这个说法,而且似乎也没有实际案例可以证明这一点——当然我也无法证否,因此无法判断这个说法的正确性。不过这篇文章并不是在追究这个问题,在这里我们暂且认为它有道理吧。

  要实现这点,我们所要实现的是进行URL重写。URL重写的目的,是在服务器端把客户端请求的URL(如Article_3.html)当作另一个请求进行处理(如Article.aspx?id=3)。请注意,这个工作是在服务器端完成的:

客户端服务器端
Article_3.htmlArticle_3.html => Article.aspx?id=3 => 处理 => 输出

  对于搜索引擎的爬虫来说,它根本意识不到这个URL是在直接读取资源,还是经过了动态的请求。我们是Web应用程序的编写者,对于一个请求我们可以使用我们任意的方式进行处理,想欺骗搜索引擎还不是易如反掌?不过这种做法对于网站性能来说是否有帮助?没有,肯定没有。

  这种改变URL,想要获取更好SEO效果的做法,有些人也会把它叫做“伪静态化”。老赵不知道这种说法合不合适,我是从来不会使用这样的说法的。

缓存页面内容

  动态生成一个页面的开销往往很大,例如需要多次查询数据库或者外部服务。为了减少服务器端的开销,为了加快网站的运行效率,有时候在服务器端会将一个页面的整体内容保存为一个文件,这样每次在服务器端获取客户端请求的时候,只要读取相应的文件即可,而不需要重新查询数据库或外部服务并重新生成页面内容:

客户端服务器端
Article.aspx?id=3Article.aspx?id=3 => 读取文件 => 输出

  同样的,这些事情完全是在服务器端进行的处理,搜索引擎的爬虫对此一无所知。即使搜索引擎认为Article.aspx?id=3这样的请求是由服务器端即时生成的(当然搜索引擎真不会考虑这些),我们编写的服务器端逻辑同样可以直接读取磁盘上的文件,并且直接输出。这种做法自然是为了效率,不过……

  这种做法和SEO有没有关系?没有任何关系,因为爬虫根本不知道我们做了这些。

  这种做法是否需要在硬盘上生成一个html文件?没有必要,我可以生成txt文件,可以生成jeffz文件,甚至我可以不生成文件,而是将页面内容直接存放在内存中,甚至是高性能的Key/Value Store里。

  这种做法是否需要把URL修改为html结尾?没有必要,URL改不改都无所谓,改成什么也都无所谓。

总结

  有时候事情其实就是那么简单,但是还是会让人混淆。一句话听上去很正确,但是一旦“指代不明”,正确的话也变成错误的了。例如本文一开始引用的文章,它是为了“缓存页面内容”而使用的做法,这个做法和SEO没有任何关系,因此说“生成html网页有利于被搜索引擎收录,不仅被收录的快还收录的全”是将其目的与“规范页面URL”混淆了起来。错误产生在这里。在那片文章后面的评论中,有朋友回复说目前的搜索引擎已经不关心URL是否是html还是别的什么形式了。这种说法可能也是正确的,不过并没有谈在点子上。因为无论搜索引擎如何处理HTML,文章的内容都和搜索引擎没有一丝一缕关系。

  因此,如果您以后要谈“静态页”或网页“静态化”的时候,请区分您究竟是在谈“规范页面URL”还是“缓存页面内容”。

  如果您说“静态页有助于SEO”,明白人知道您是再指“规范页面URL”,而某些朋友可能就会认为您是指在服务器端缓存页面内容。

  如果您说“静态页有助于提高网站性能”,明白人知道您是指“缓存页面内容”,而某些朋友可能就会认为您是指使用“URL重写”来规范URL样式。

  如果您说“静态页,既有助于SEO,又有助于提高网站性能”,那么(我希望)明白人就会带您来看现在这篇文章,而某些朋友可能就会……哎哎。

补充说明

  有朋友提到静态资源适合被CDN分发,其实不然。CDN难道不能分发动态请求生成的内容了吗?对于CDN来说,动态和静态是没有区别的。不说CDN,就说Squid吧,Squid知道后面连接的请求是静态还是动态的吗?是Windows系统还是Linux吗?其实这就是“分层”,抽象出来以后完全不知道后端的递交方式。而且换个角度想,世界上有“静态请求”这个东西吗?不都是需要经过Web服务器处理的吗?只不过,一个是复杂运算,一个是直接读取硬盘文件。对访问者来说,是看不出任何区别的。CDN分发的也只是“请求内容”而不会关心“内容的生成方式”。

  此外,有朋友给出了一份应该说“比较权威”的说明,各位不妨参考一下:动态网址与静态网址

转载于:https://www.cnblogs.com/aaa6818162/archive/2009/07/08/1518906.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/264278.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html form src,form.html

Amaze UI Admin index Examples欢迎你, Amaze UI 43小时前夕风色Amaze UI 的诞生,依托于 GitHub 及其他技术社区上一些优秀的资源;Amaze UI 的成长,则离不开用户的支持。 2016-09-21 下午 16:405天前禁言小张为了能最准确的传达所描述的问题&…

tiny4412--linux驱动学习(2)

在ubuntu下编写验证字符设备驱动 并移植到arm开发板上 1&#xff0c;准备工作 uname -r 查看电脑版本信息 apt-get install linux-source 安装相应版本的linux内核2&#xff0c;编写驱动程序 Global CharDev.c /* GlobalCharDev.c */ #include <linux/module.h>…

学计算机需要多少内存,电脑内存多大才够用

现在内存的价钱越来越便宜&#xff0c;很多新装机的朋友都已经在使用1GB的内存&#xff0c;而还有很多人也在给老电脑的内存升级。在升级了物理内存之后&#xff0c;如何有效设置虚拟内存才能获得最大限度的性能提升?网上流传的一些优化虚拟内存的方法真的有效吗?下面学习啦小…

TreeView控件二(递归算法)

扩展了一下。每个控件都有其独特的写法和用法&#xff0c;treeview就是这样的一个控件。做个类似资源管理器的页面。如果逐层遍历&#xff0c;代码会不断重复&#xff0c;所以这时需要用递归算法 Codepublic static void TreeBindMethod(TreeView tvFile,string target) …

计算机中桌面中不显示U盘图标,电脑不显示u盘怎么回事 电脑不显示u盘的解决办法...

在平时的工作中&#xff0c;我们会经常使用到U盘来拷贝资料&#xff0c;U盘便于携带并且储存量大&#xff0c;所以很受大家的欢迎。但是平时我们在拷贝资料将U盘插入电脑中&#xff0c;会发现U盘在电脑中不显示&#xff0c;即使在桌面上仔细寻找也无济于事。这种情况小编也有遇…

spring-在配置文件中配置DAO时直接引用DataSource

一、创建spring项目 项目名称&#xff1a;spring101306二、在项目上添加jar包 1.在项目中创建lib目录 /lib 2.在lib目录下添加spring支持 commons-logging.jar junit-4.10.jar log4j.jar mysql-connector-java-5.1.18-bin.jar …

计算机基础知识总结及自学,计算机基础知识的简单总结

我说明一下&#xff0c;本文只是基于作者的个人理解所作出的总结&#xff0c;如果有什么不对的地方&#xff0c;希望大家给我指正&#xff0c;我会尽快更正的。我也想通过51cto这个大平台&#xff0c;能够与大家一同学习&#xff0c;一同交流&#xff0c;一同进步。1.计算机的组…

实验1.1

转载于:https://www.cnblogs.com/P201821430028/p/10689308.html

札记__ADT:URL,Lua:strlen方法

2019独角兽企业重金招聘Python工程师标准>>> 01&#xff0c;Android ADT 在线更新的URL&#xff1a; https://dl-ssl.google.com/android/eclipse/ 02&#xff0c;Lua中字符串长度的判断可以使用 # local str "abcabc" print(#str) --6 print(#"a…

vue中的适配:px2rem

这应该是vue项目在适配移动端时候&#xff0c;最简单的方法之一下面是基本步骤&#xff08;使用cnpm&#xff09;1.下载并引入lib-flexible cnpm install --save lib-flexible 在main.js中 &#xff1a;import ‘lib-flexible/flexible’2.引入px2rem-loader cnpm install --sa…

Java高级篇 -- List选择及优化

为什么80%的码农都做不了架构师&#xff1f;>>> 在java编程中&#xff0c;我们常常使用到java自带的集合类List 以下为几点简单的优化建议&#xff1a; 1.Vector还是ArrayList Vector有其特有有点&#xff0c;其每个方法都为同步方法【synchronized】&#xff0c…

每一件事情的开始总是很困难的!

每一件事情的开始总是很困难的&#xff01;我今天花了一下午的时间终于把开头做完了&#xff0c;希望底下的事情&#xff0c;顺顺当当的&#xff01;转载于:https://blog.51cto.com/7305256/1564904

html双翼布局,第19题 CSS如何实现双飞翼布局?

双飞翼布局如下图所示&#xff1a;有了圣杯布局的铺垫&#xff0c;双飞翼布局也就问题不大啦。这里采用经典的float布局来完成。HTML代码&#xff1a;双飞翼布局码云笔记mybj123.comCSS代码&#xff1a;*{margin: 0;padding: 0;}.container {min-width: 600px;}.left {float: l…

【原】关于AdaBoost的一些再思考

一、Decision Stumps&#xff1a; Decision Stumps称为单层分类器&#xff0c;主要用作Ensemble Method的组件&#xff08;弱分类器&#xff09;。一般只进行一次判定&#xff0c;可以包含两个或者多个叶结点。对于离散数据&#xff0c;可以选取该属性的任意一个数据作为判定的…

计算机系统时间无法更改,电脑时间不能修改|系统时间改不了 四个处理办法

电脑时间不能修改|系统时间改不了 四个处理办法&#xff1f;电脑时间不但可以让网友准确的查看时间&#xff0c;还对软件的运行、工作等方面至关重要&#xff0c;有时大家看电脑时间不准确想要修改&#xff0c;确发现改不了系统时间。碰到该故障的朋友不要惊慌&#xff0c;下面…

斐波那契数列(fabnacci)java实现

斐波那契数列定义&#xff1a;From Wikipedia, the free encyclopedia http://en.wikipedia.org/wiki/Fibonacci_number In mathematics, the Fibonacci numbers or Fibonacci sequence are the numbers in the following integer sequence:[2][3] or (often, in modern usage)…

计算机二级offic考试题库2017,2017年9月计算机二级MSOffice考试题「带答案」

2017年9月计算机二级MSOffice考试题「带答案」一、单选题1). 存储一个3232点的汉字字形码需用的字节数是( )。A.256B.128C.72D.16正确答案&#xff1a;B2). 无符号二进制整数101001转换成十进制整数等于( )。A.41B.43C.45D.39正确答案&#xff1a;A3). 一个教师讲授多门课程&am…

LiveQing直播点播存储流媒体服务-服务器并发性能及消耗带宽计算参考

LiveQing云端直播点播流媒体软件&#xff1a; 提供设备接入&#xff1b; RTMP推流服务、RTMP分发、HLS分发、HTTP-FLV分发&#xff1b; 云端录像、云端录像检索、云端录像点播、云端录像下载&#xff1b; RTMP转推、推流鉴权验证、推流信息统计、播放信息统计&#xff1b; 直播…

思考设计模式在自助终端软件上的应用 ——Observer(观察着)模式

主要思想&#xff1a;将各硬件模块作为观察者加入观察者队列&#xff0c;当机器状态改变时Notify所有观察者&#xff0c;各观察者根据消息类型做不同反应或不作反应。 下面贴出代码简单实现&#xff0c;希望引起圈内朋友的关注,起到抛砖引玉的效果。 下面两个类是两个基类.…

Visual studio 打包

Visual studio 打包2009-08-07 11:171.打开要打包的“.lsn”文件&#xff0c;在“解决方案资源管理器”中随便打开一个窗口 2.菜单栏“文件”--->“添加”--->“新建项目” 3. 点击“项目类型”--->“其他项目类型”--->“安装和部署”&#xff0c;再在“模板”点击…