HTTP 状态码

如果某项请求发送到您的服务器要求显示您网站上的某个网页(例如,用户通过浏览器访问您的网页或 Googlebot 抓取网页时),服务器将会返回 HTTP 状态码响应请求。
此状态码提供关于请求状态的信息,告诉 Googlebot 关于您的网站和请求的网页的信息。
一些常见的状态码为:
  • 200 - 服务器成功返回网页
  • 404 - 请求的网页不存在
  • 503 - 服务器超时
下面提供 HTTP 状态码的完整列表。点击链接可了解详情。您也可以访问 HTTP 状态码上的 W3C 页获取更多信息
 
1xx(临时响应)
表示临时响应并需要请求者继续执行操作的状态码。
100(继续) 请求者应当继续提出请求。服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。
101(切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。

2xx (成功)

表示成功处理了请求的状态码。
200(成功) 服务器已成功处理了请求。通常,这表示服务器提供了请求的网页。如果是对您的 robots.txt 文件显示此状态码,则表示 Googlebot 已成功检索到该文件。
201(已创建) 请求成功并且服务器创建了新的资源。
202(已接受) 服务器已接受请求,但尚未处理。
203(非授权信息) 服务器已成功处理了请求,但返回的信息可能来自另一来源。
204(无内容) 服务器成功处理了请求,但没有返回任何内容。
205(重置内容) 服务器成功处理了请求,但没有返回任何内容。与 204 响应不同,此响应要求请求者重置文档视图(例如,清除表单内容以输入新内容)。
206(部分内容) 服务器成功处理了部分 GET 请求。

3xx (重定向)
要完成请求,需要进一步操作。通常,这些状态码用来重定向。Google 建议您在每次请求中使用重定向不要超过 5 次。您可以使用网站管理员工具查看一下 Googlebot 在抓取重定向网页时是否遇到问题。诊断下的网络抓取页列出了由于重定向错误导致 Googlebot 无法抓取的网址。

300(多种选择) 针对请求,服务器可执行多种操作。服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。
301(永久移动) 请求的网页已永久移动到新位置。服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。您应使用此代码告诉 Googlebot 某个网页或网站已永久移动到新位置。
302(临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来响应以后的请求。此代码与响应 GET 和 HEAD 请求的 301 代码类似,会自动将请求者转到不同的位置,但您不应使用此代码来告诉 Googlebot 某个网页或网站已经移动,因为 Googlebot 会继续抓取原有位置并编制索引。
303(查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。对于除 HEAD 之外的所有请求,服务器会自动转到其他位置。
304(未修改)
自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。
如果网页自请求者上次请求后再也没有更改过,您应将服务器配置为返回此响应(称为 If-Modified-Since HTTP 标头)。服务器可以告诉 Googlebot 自从上次抓取后网页没有变更,进而节省带宽和开销。

.

305(使用代理) 请求者只能使用代理访问请求的网页。如果服务器返回此响应,还表示请求者应使用代理。
307(临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来响应以后的请求。此代码与响应 GET 和 HEAD 请求的 <a href=answer.py?answer=>301</a> 代码类似,会自动将请求者转到不同的位置,但您不应使用此代码来告诉 Googlebot 某个页面或网站已经移动,因为 Googlebot 会继续抓取原有位置并编制索引。

4xx(请求错误)
这些状态码表示请求可能出错,妨碍了服务器的处理。

400(错误请求) 服务器不理解请求的语法。
401(未授权) 请求要求身份验证。对于登录后请求的网页,服务器可能返回此响应。
403(禁止) 服务器拒绝请求。如果您在 Googlebot 尝试抓取您网站上的有效网页时看到此状态码(您可以在 Google 网站管理员工具诊断下的网络抓取页面上看到此信息),可能是您的服务器或主机拒绝了 Googlebot 访问。
404(未找到)
服务器找不到请求的网页。例如,对于服务器上不存在的网页经常会返回此代码。
如果您的网站上没有 robots.txt 文件,而您在 Google 网站管理员工具"诊断"标签的 robots.txt 页上看到此状态码,则这是正确的状态码。但是,如果您有 robots.txt 文件而又看到此状态码,则说明您的 robots.txt 文件可能命名错误或位于错误的位置(该文件应当位于顶级域,名为 robots.txt)。
如果对于 Googlebot 抓取的网址看到此状态码(在"诊断"标签的 HTTP 错误页面上),则表示 Googlebot 跟随的可能是另一个页面的无效链接(是旧链接或输入有误的链接)。
405(方法禁用) 禁用请求中指定的方法。
406(不接受) 无法使用请求的内容特性响应请求的网页。
407(需要代理授权) 此状态码与 <a href=answer.py?answer=35128>401(未授权)</a>类似,但指定请求者应当授权使用代理。如果服务器返回此响应,还表示请求者应当使用代理。
408(请求超时) 服务器等候请求时发生超时。
409(冲突) 服务器在完成请求时发生冲突。服务器必须在响应中包含有关冲突的信息。服务器在响应与前一个请求相冲突的 PUT 请求时可能会返回此代码,以及两个请求的差异列表。
410(已删除) 如果请求的资源已永久删除,服务器就会返回此响应。该代码与 404(未找到)代码类似,但在资源以前存在而现在不存在的情况下,有时会用来替代 404 代码。如果资源已永久移动,您应使用 301 指定资源的新位置。
411(需要有效长度) 服务器不接受不含有效内容长度标头字段的请求。
412(未满足前提条件) 服务器未满足请求者在请求中设置的其中一个前提条件。
413(请求实体过大) 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。
414(请求的 URI 过长) 请求的 URI(通常为网址)过长,服务器无法处理。
415(不支持的媒体类型) 请求的格式不受请求页面的支持。
416(请求范围不符合要求) 如果页面无法提供请求的范围,则服务器会返回此状态码。
417(未满足期望值) 服务器未满足"期望"请求标头字段的要求。

5xx(服务器错误)
这些状态码表示服务器在处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求出错。

500(服务器内部错误) 服务器遇到错误,无法完成请求。
501(尚未实施) 服务器不具备完成请求的功能。例如,服务器无法识别请求方法时可能会返回此代码。
502(错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。
503(服务不可用) 服务器目前无法使用(由于超载或停机维护)。通常,这只是暂时状态。
504(网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。
505(HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。

12种Javascript方法解决常见浏览器兼容问题

我们提倡尽可能使用CSS,而且我们常常能做到这一点。现代浏览器有很好的CSS支持-这无疑足够好让你使用CSS来控制布局和版面设计。但是有时候,某些网页元素在不同的浏览器会出现不同。在本文中,我们会揭开你在开发web应用是可能会遇到的12个最常见的CSS问题的javascript解决方案。

 
1. 自动匹配高度
javascipt-自动匹配高度
  自从我们抛弃了基于Table的页面布局后,创建同等高度栏目或内容盒子的视觉效果已然是一个挑战。
 
  这个jQuery插件在同一个容器里“平衡”盒子的高度并创造一个简介的网格——几乎从可用性和性能的角度使用简单的JavaScript替代: equalHeights()函数测定一个容器里的所有同级元素同容器的高度,然后设置每个元素的最低高度为最高的元素的高度。
如何工作
  equalHeights()通过循环测定指定元素的最高级别的子节点,然后设置他们的最小高度值为最高的元素的高度。
 
jQuery的另一个可以使盒子的高度相等的插件
$(“#col1, #col2″).equalizeCols();
将如你所想的那样匹配高度
$(“#col1, #col2″).equalizeCols(“p,p”);
 
匹配这两卷,并在#col1或#col2(短的那个)里的P标签后面添加空白.

2. IE6 PNG透明支持

  IE6以下的版本不支持png透明。使用hack,IE 5.5和6也已经可以支持,但hack并不理想的且难以使用。让我们来看看我们能做些什么来支持IE6用户 ,同时为网站的大多数访客带来最佳的透明效果。
 
  IE7的是一个Dean Edwards建立的JavaScript库,以强迫MSIE(IE6,IE5)表现的像一个兼容标准的浏览器。它修复许多CSS问题并使透明PNG在IE6和IE5下正常工作,它还允许高级的CSS选择器。
javascript-IE6-透明图片
  修正IE6及以下的PNG图片的问题,IMG标签和CSS背景图片都可以。这个插件是对原始iFixPng插件的一种改进。特点包括:图像或有背景图片的标签,现在支持background-position,其中包括IE浏览器的绝对定位的修正。(bottom: -1px || bottom: 0px)
  这是一个方便的JavaScript函数,可以在当前的文件的任何元素的class由oldClass改为newClass。这是特别有用的快速的利用CSS而不是用编码改变风格。
 
function changeClass(oldClass, newClass) {
      var elements = document.getElementsByTagName(“*”);
      for( i = 0; i < elements.length; i++ ) {
            if( elements[i].className == oldClass ) elements[i].className = newClass;
      }
}
 
4. CSS浏览器选择器
  如果您可以只需键入一个特殊选择器,在这里您可以写一些JavaScript ,设置一个Class在基于当前的浏览器的名字的标签会怎么样?
javascript-css-选择器
  这是一个非常小的javascript只有一行,而且不到1kb,它允许CSS选择器。它让您可以为每个操作系统和每个浏览器写具体的CSS代码。你可以写一些JavaScript ,设置Class的名字,也就是说,内容根据当前的浏览器。
  这里有另外一个基于jQuery的非常简单的处理浏览器选择器的方法,你需要做的只是加载jQuery库文件,并添加下面的一块儿代码。
$(document).ready(function(){
$(‘html’).addClass($.browser);
});
  现在你可以准备你的样式,如.msie,.mozilla, .opera, .safari 或其它目标浏览器。
 
5. 最小/最大 高度/宽度支持
  针对CSS min-width, min-height, max-width, max-height, border-*-width, margin, 和padding 属性,这里有一些很好的jQuery修正。
  这是一个为没有原声的支持min-width, max-width,min-height和max-height的地方添加支持的jQuery插件。
5.2 JSizes
  这个小jQuery插件为CSS min-width, min-height, max-width, max-height, border-*-width, margin, 和padding 属性添加支持。特别是他提供一种方法来确定一个元素在那里可见。由于所有的型号的方法返回数值,所以这些也可以安全的使用在严格的DOM元素方面。
jQuery(function($) {
     var myDiv = $(‘#myDiv’);
     // set margin-top to 100px and margin-bottom to 10em
     myDiv.margin({top: 100, bottom: ‘10em’});
     // displays the size of the top border in pixels
     alert(myDiv.border().top);
     // displays true if the element is visible, false otherwise
     alert(myDiv.isVisible());
     // set padding-right to 10px and margin-left to 15px using chaining
     myDiv.padding({right: 10}).margin({left: 15});
});
 
6. 元素垂直/水平居中
  你可能之前遇到过这个问题:水平或垂直居中某个元素。垂直居中在CSS里面相当麻烦,特别是你想支持所有主流浏览器。
javascrpt-垂直居中
  这个插件可以使页面中的所有元素居中,垂直和水平居中采用css负margin的方法。
$(“element”).center(); //vertical and horizontal
$(“element”).center({
horizontal: false // only vertical
});
  在这个视频教程里, Jeffrey Jordan Way将为你展示如何使用jQuery的力量结合CSS在你的浏览器里面使一个图片垂直居中.
 
7. 在IE里使用Q标签
  人们期望使用的Q标签而不是blockquote标签来显示引号。然而IE/Win不支持Q标签,因为这一点,大部分网站的作者选择不使用Q标签。
7.1 QinIE
  当你在你的文件的头部添加这个脚本在IE浏览器里自动扫描的网页Q的标记,并正确的显示它们(包括嵌套引用) 。当(如果)IE浏览器将来支持Q标签,这个插件将会添加浏览器版本检查。
 
javascript-js
  通过把你的所有内容放到一个可点击的标签来和单调的“read more…”链接说拜拜吧。
 
  Lazy loader 是一个jQuery。它可以延迟加载页面里面的图片. 在用户浏览视界(页面中可见部分)以外的图片之前,它将不会被加载。这和image preloading的作用正好相反.
 
10. bgiframe
轻松的解决IE下的z-index的问题。
javascript-bgiframe
 
  ieFixButtons 是一个修正IE6和7的<button>标签的bug的jquery插件。
 
  修正ie下的水平溢出。IE在溢出的元素里面显示一个滚动条,特别是如果元素里面只有一行,滚动条就会遮住这行内容。这个插件通过修改padding来修正这个问题。
javascript-overflow-解决

使用基于CSS导航菜单的4个理由

  导航结构在网站设计中是起到决定性作用的,导航菜单/栏常常通过颜色、排版、形状和一些图片来帮助网站创造更好的视觉和感受,它是网页设计的关键元素。
  虽然网站导航菜单的外观是网页设计中关系到整个设计成败与否的关键,但视觉效果也不能影响到网站可用性。最理想的设计是网站的导航既能比其他网站的导航外观更吸引人,又不会夺走网站内容的焦点。
 
  不幸的是,目前还有很多网站在使用过时的导航菜单方式,这样使网站可用性大打折扣。如果导航菜单过分的依赖图片那会失去一定的用户,比如那些网速慢或浏览器设置关闭读取网页图片功能。但是,并不意味着导航一定要朴素简单才能提高访问性及网站可用性。
现在暴风彬彬归纳一下CSS导航菜单的4点好处:
 
1.减少代码量
  结合CSS和XHTML来制作导航菜单会比使用Javascript或图片来实现同样效果更加节省代码(CSS可以结合一些图片来制作导航而且代码量很小,而完全使用图片的导航代码量也要多很多)。代码量晓得网站会更有益于搜索引擎的索引排名,而且读取速度会快很多。
 
2.亲和力
  基于CSS的导航菜单对用户来说不但更有可用性,而且更有亲和力。如果用户关闭读取图片和(或)CSS的功能,网站仍然可以以简洁的方式浏览,内容结构及网站可用性不会受到影响。有极少数用户使用的旧浏览器虽然不支持CSS,但网站导航菜单却仍然能够访问。
 
3.无限的设计方案
  使用CSS来设计导航菜单并不会限制你的设计。事实上,CSS会提供更加灵活的导航设计方案,当用CSS来设置背景图时也能实现各种视觉效果。
 
4.大量的脚本资源
  如果你不想自己从头开始设计基于CSS的导航菜单,那么有大量的免费脚本资源可以拿来使用。但暴风彬彬并不提倡使用这些脚本资源,因为这样的话你会和其它成百上千的网站使用同样的导航菜单。不过有一些菜单可以自定义样式(颜色、字体、尺寸及背景图)来符合你自己的网站风格。下面暴风彬彬推荐几个国外的资源,它们的导航菜单脚本可以算是最棒的:
 

Google评价blog的指标

读了一下 Google 关于 Blog Ranking 的 Patent,总结如下。
 
正面的指标:
  1. [0038] 订阅数

    统计 blog 在各种 reader 中被订阅的数量。被订阅的越多,ranking 越高。但同时会使用一些方法处理“subscriptions spam”,诸如验证订制人和 IP 的唯一性。
  2. [0039] 搜索点击数

    统计 blog 作为搜索结果时被点击的次数。点击次数越多,ranking 越高。

     
  3. [0040] 在其他 blogger 的 blogroll 里的出现次数

    blogger 通常会使用 blogroll 来整理指到其他 blogger 的链接集合。统计所有 blogroll 中,指向某个 blog 的链接越多,ranking 越高。

     
  4. [0041] 来自高质量的 blogroll 的链接数

    高质量的 blogroll 的链接大多都指向著名的或值得信任的 blog。
  5. [0042] 来自高质量的 blog 的 blogroll 的链接数

    这里的假定是著名的或值得信任的 blogger 不会放指向 spam blog 的链接。
  6. [0043] 有Tag

    blog 作者如果分析了 blog 内容,归类并打上了 tag,起码可以说明作者的态度比较认真。

     
  7. [0044] 来自邮件和聊天记录的链接数

    如果在 Email 正文里或者聊天记录里出现了指向 blog 的链接,会加分。GEmail 和 Gtalk 被用在了这里。

     
  8. [0045] PageRank

    PageRank 越高对应的 blog 也就越重要。考虑到blog的更新比较频繁,最新的 blog post 可能还没有PR。这时可以用对应的 blog 的 PR 来代替。
其中 [0040-0042],其实是类似于传统网页间 PageRank 计算的一套模式,只不过这里把它限制在了 blog 之间。
负面的指标:
  1. [0047] 更新频率异常

    更新过于频繁或者非常有规律,会被认为是在 spam,ranking 会降低。这里提醒喜欢在每天的固定时间更新 blog 的朋友注意一下了。

  2. [0048] feed 内容和 blog 内容的不一致

    spammer 有可能会为了提升自己的 ranking 而把有价值的内容放到 feed 里面,同时在 blog 内容里面放一些指向不相关内容的广告链接。为了惩罚这种情况,对于 feed 内容和 blog 内容不一致的情况,要降低 ranking。
  3. [0049] 出现重复内容

    有些 spammer 为了让某些内容能够多次长时间的出现在 feed 里面,会重复发布同样的内容。这样的情况会被惩罚。
  4. [0050] 垃圾词过多

    通过词频统计(bi-gram 或者 tri-gram 等),如果 blog 内容里垃圾词的比较过高,会降低 ranking。
  5. [0051] 多数 blog 长度相近

    这个主要是针对使用机器自动生成 blog 的情况。
  6. [0052] 链接异常

    当 blog 里的链接多为指向单一网页,或者单一的外站,会被认为是在 spam,ranking 会降低。
  7. [0053] 广告太多

    如果一个 blog 页面内含有过多的广告,会降低 ranking。
  8. [0054] 广告出现在正文里

    一般 blog 页面会包括三方面的内容:最近发表的 blog,blogroll 和 metadata。如果广告出现在正文里,会降低 ranking。不知道 adsense 的广告有没有特殊待遇?

10个不为人知的Google失败作品

  毫无疑问,Google是当今世界上最成功的互联网公司之一,但是Google也曾推出过一些失败的实验品。还记得Google Accelerator,那个号称能够加速网页浏览的免费工具吗?,Google Answer也因为它的付费模式而不得不退出了产品线。其实Google Video本可能成为这个清单中的一员,不过财大气粗的Google对Youtube的成功收购应证了这样一句话:“如果你竞争不过一个公司,那就买下它”。以下的10个Google失败作品中,有些仅仅出现了一天就消失在公众的视线之中了,幸运的是,某些有心人把他们存在的记录保留了下来。
 
  也许在Google Labs里面,还存在着更多的昙花一现的的实验品。废话不多说,一起来看看吧。
 
  1、Google X
  估计Google的程序员之中也有不少Apple的fans,Google X 就是一个模仿Mac OS X的Dock界面而推出的版本。此站点在2005年仅仅出现了一天就消失了,虽然没有对外公布理由,但不难猜测是的是Google不想因为这个模仿而招来Apple的侵权诉讼。不过,现在网络上还存在着不少模仿Google X的站点,也算是一种怀念吧。

 

  2、Google Catalog(即将撤下产品线)
  想知道最新的USB闪存盘的报价吗?如果你使用Google Catalog  来搜索的话,很抱歉,你得到的结果很可能是MicroWarehouse公司在2001年的产品目录,在那个年代,一个256MB的闪存盘售价高达595 美元。用“laptop”作为关键词搜索得到的最近的一个结果是2006年Cyberguys的春季报价。应该说,这个产品的初衷是挺好,只可惜没有在技术上得到实现,不过,把Google Catalog当作一个互联网资料存档的地方还是不错的。

 

 
3、Google Video Player
  Google Video Player的一个最主要优点应该是它的视频列表功能,它随机显示一些与正在播放的内容相关的其他视频,同时还允许用户观看视频的任意一个部分,即便该部分的内容还没有被缓冲到(事实上现在很多视频网站都提供这个功能了)。它的缺点在于它经常在播放列表中提供一些需要付费才能观看的内容,而且它不支持将视频转移到移动设备中去。Google Video Player已经于2007年8月撤下产品线。

 

  4、Google Web Accelerator
  Google Web Accelerator号称可以提升百分之二十的网页载入速度。不过遗憾的是,Google Web Accelerator将宽带用户作为目标用户群显然是错误的,因为他们打开网页的速度已经足够快了,而且这个东西还可能侵犯到你的隐私。当初有人批评 Google是用这个软件来为市场调查搜集数据,因为它可能在你上网的同时监视你访问了哪些网站,购买了哪些商品。现在Google依然在提供这个软件的下载。
 
 
 
5、Google Answer
  在Google Answer存在的5年时间里,它一直为用户提供了这样一种模式:提出问题-设定报酬-获取答案,这相当于是一种有偿咨询的平台,并且也曾风靡过一段时间,要知道,这里的报酬可不是像“百度知道”那样的虚拟积分,而是实打实的美金。不过,由于回答者常常难以将报酬兑现,加上Yahoo Answers那种类似的论坛式免费平台的存在,Google Answers最终还是落了个关闭的下场。不过,你依然可以访问Google Answers的数据库 (试试输入“ “What has happened to Answers”,看看你所得到的结果)。

 

  6、Google Coupons
  也许把Google Coupons比作白犀牛毫不为过——它确实存在过,不过见过的人少之又少。Google Coupons基本上可以算是Google本地商户中心服务(它可以让商家在Google Maps上创建自己的公司位置)的一个附属品,如果有人使用Google Maps搜索到某一个商家,同时该商家又使用了Google Coupons功能时,访问者就可以看到一张类似优惠券的图片,他可以把这张图片打印出来并在现实中使用。不过,从Google Maps建立到Google Coupons停止服务的2006年,真的有人看到过这张优惠券吗?
 

 

7、Google Voice Search
  其实早在2003年,Google Voice Search(语音搜索)就连同Google Labs一起诞生了,它最初的界面如上图所示。使用语音搜索的方法是:拨打专用的搜索热线,说出你要搜索的东西,挂掉电话,点击相应链接,得到搜索结果。毫无疑问,用这种方式来搜索互联网就好比你晚上睡觉前打电话给你的朋友让他开车过来给你刷牙。不过,这个创意已经被不少网站发扬光大了(例如百度的语音搜索),Google自己也推出了移动版的语音搜索 (此页面中有相关的演示视频)。

 

  8、Google Viewer
  作为一个单独发行的软件,Google Vewer允许你输入一串关键字,然后将搜索结果以实际网页的形式返回给用户,显示结果的过程则是以幻灯片的形式呈现给用户的。实际上,随着技术的进步,这样的想法已经没有必要用软件的形式来实现了。Ask.com、Powerset、Yahoo就是最好的例子。Google Viewer也就这样渐渐退出了历史的舞台。

 

 
9、Google Checkout
  2007 年6月,数以千计的eBay卖家来到波士顿参加一年一度的eBay商户大会,为了和eBay的PayPal在线支付系统竞争,Google计划在这次大会的eBay Show上向卖家们展示Google Checkout服务,并劝说他们不要使用eBay的支付系统。最终eBay没有让Google得逞,不过eBay也付出了相应的代价,Google在长达一个星期的时间里去掉了搜索结果页面中的eBay广告。最终,还是Google自己终止了这场互联网版的波士顿倾茶事件。

 

  10、Orkut
  相信有很多人不会对Orkut这个名字感到陌生吧,当年随便进一个稍微大点的论坛,迎面而来的就是“跪求Orkut邀请”的帖子。其实,Orkut本可以成为现在的Facebook或者MySpace的,只可惜它的邀请制度确实引来了不少人的不满,同时由于缺少对博客工具的支持以及不能上传视频着两大缺点, Orkut最终被它的竞争对手们甩在了身后。

Google网页排名背后的技术

搜索排名的核心技术源自已有50年历史的学术课题 Information Retrieval (IR),IR 技术使用统计学原理对文字的使用频率等属性进行研究并对结果进行排名。建立在 IR 理论上的 Google 搜索同时借助链接,网页结构等等技术形成独特的搜索技术。

理解网页多年来在网络爬虫与索引系统上投入巨资,因此,Google 拥有非常庞大并且是最新的网页索引,除此之外,Google 还使用一些最新技术提高索引质量,比如,他们开发了一种技术,可以在字面意思之外理解一个网页所表达的重要概念,人们使用意大利语言搜索 “galleria sprovieri londra”,会找到伦敦的 Sprovieri Gallery,尽管 Sprovieri Gallery 主页上既没有 London,也没有 Londra 字样。其它技术包括,区分一个网页中的重要或非重要文字,以及网页内容的新鲜度。

理解语义可以通过用户提供的几个搜索关键词,理解用户的真实意图。他们在拼写纠正,词义,以及概念分析方面处于非常领先的位置。很多人都或多或少体验过 Google 的拼写纠正功能,比如搜索 “kofee annan”,Google 会问你搜索的是否 “kofi annan”,然而,当有人搜索 “kofee beans”,Google 会纠正成 “coffee beans”。(Google 事实上已经在尝试语义技术 - 译者)词义是 Google 尝试理解查询语义的基础,也是 Google 遇到的最大难题。一些在人看来显而易见的东西,机器却很难自动处理。用户并不想对使用什么词汇进行查询而费神,人们甚至压根不知道该使用什么进行查询。在这种时候,Google 的词义系统便可以发挥作用,词义系统可以对查询语句进行非常复杂的修正,比如,查询 “Dr Zhivago” 的时候,Google 知道 Dr 代表 Doctor ,而查询 “Rodeo Dr” 的时候,Dr 代表 Drive。用户搜索 “back bumper repair” 的时候,结果是 rear bumper repair,而搜索 “Ramstein ab”,Google 能够将 ab 理解成 Air Base,”b&b ab” 会理解为 Alberta 的 Bed and Breakfasts 。Google 将这种词义理解系统发展到上百种不同语言。

在搜索排名中使用的另一项技术是概念识别,该技术可以对查询的内容进行概念识别,比如,我们查询 “new york times square church”,Google 知道我们实际上查询的是纽约时代广场上的那座著名教堂,而不是纽约时报中的某篇文章。概念识别技术并不止这些,Google 还对其进行加强以正确地识别语义,比如,搜索 “PC and its impact on people”,事实上是搜索计算机对社会的影响。Google 的搜索分析算法中这类技术比比皆是,而且面向几乎所有语言。

理解用户尝试理解用户的目的是为用户返回他们真正需要的结果,而不是他们在搜索语句中所说的东西。该技术基于一个世界级的本地化系统,外加先进的个性化技术,以及各种用户意图识别技术。

对本地结果的重视体现在他们的本地化工作中。同样一个查询语句在不同国家会返回不同结果,比如,查询 “bank”,在美国返回的是银行,而英国则可能是 Bank Fashion 的服装连锁店,或者英国的银行,而在其它英语国家,如澳大利亚,加拿大,新西兰,南非,返回的则应仍旧是当地的银行。如果你在一些非英语国家查询这个词,象埃及,以色列,日本,俄罗斯,沙特,瑞士,返回的结果将更有趣。就象 Football 在美国和英国表示不同的运动项目一样,同一个词在不同国家查询的结果可能截然不同。

个性化查询是 Google 另一项先进搜索技术,一个已经登录的用户,如果开通了 Web History 服务,随着他查询时间的增长,Google 会根据他的查询历史,自动调整返回的结果,比如,一个经常查询 Football 相关话题的人,会逐渐从 Google 得到更多足球相关的结果。如果你青睐某个购物站返回的结果,在以后的查询中,会从那个购物站得到更多结果。

在返回用户真正想要的结果方面的另一个例子是,假如你搜索 “chevrolet magnum”,我们知道 Magnum 不是 Chevrolet 产的,是 Dodge 产的,Google 会自动返回 dodge magnum 的结果。还有一个例子,有人搜索 “bangalore”,不仅返回 Bangalore 这个城市的主页,而且返回 Bangalore 的地图,以及一些与 Bangalore 市景,交通相关的视频,这些视频会让你有身临其境的感觉。

PHP5的异常处理机制 -- Try-catch 语句

为了进一步处理异常,我们需要使用try-catch语句—包括Try语句和至少一个的catch语句。任何调用 可能抛出异常的方法的代码都应该使用try语句。Catch语句用来处理可能抛出的异常。以下显示了我们处理getCommandObject()抛出的异常的方法:

可以看到,通过结合使用throw关键字和try-catch语句,我们可以避免错误标记“污染”类方法返回的值。因为“异常”本身就是一种与其它任何对象不同的PHP内建的类型,不会产生混淆。

如果抛出了一个异常,try语句中的脚本将会停止执行,然后马上转向执行catch语句中的脚本。

如果异常抛出了却没有被捕捉到,就会产生一个fatal error。

你应当了解的5个CSS3新技术

 
CSS是众所周知且应用广泛的网站样式语言,在它的版本三(CSS3)计划中,新增了一些能够节省时间的特性。尽管只有当前最新了浏览器版本才能支持这些效果,但了解它们还是必须且很有趣味性的。暴风彬彬将在这篇文章向大家展示CSS中的5个有趣的新技术:圆角、个别圆角、不透明度、阴影和调整元素大小。
 
1:基本标记
css3-教程
 
在我们开始这个教程之前,先来创建整个教程都要使用的基本标记。
我们的xHTML需要一下div元素:
  • #round, 使用CSS3代码实现圆角.
  • #indie, 应用个别的几个圆角.
  • #opacity, 展示新的CSS3实现不透明度的方式.
  • #shadow,展示不使用Photoshop的情况下,使用CSS3来实现阴影效果.
  • #resize, 展示如何使用某种CSS来实现重设大小的效果.
综上所述,我们的xHTML应该是这样的:
 
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<title>An Introduction to CSS3; A Nettuts Tutorial</title>
<link href=”style.css” rel=”stylesheet” type=”text/css” />
</head>
<body>
<div id=”wrapper”>
<div id=”round”> </div>
<div id=”indie”> </div>
<div id=”opacity”> </div>
<div id=”shadow”> </div>
<div id=”resize”>
<img src=”image.jpg” alt=”resizable image” width=”200″ height=”200″>
</div>
</div>
</body>
</html>
下面来创建基本CSS文件:
 
body    {
background-color: #fff;
}
#wrapper {
width: 100%;
height: 100%;
}
div {
width: 300px;
height: 300px;
margin: 10px;
float: left;
}
正如你上面看到的,我们给每个div元素300px的宽和高,并让它们向左浮动,整个页面的div都留给我们在后面的工作中添加样式。

 

2:圆角
css3-特性
 
目前而言,创建圆角的方法有很多,但都很麻烦。最常用的方法:首先,你要创建圆角的图片;然后,你要创建很多html元素并使用背景图像的方式显示圆角。具体流程你我都很清楚。
这个问题将在CSS3中很简单的解决掉,那就是叫做“border-radius”的属性。我们先创建一个黑色的div元素并给他设置黑色的边框。边框就是要实现“border-radius”属性效果的前提。
像这样:
 
#round {
background-color: #000;
border: 1px solid #000;
}
现在你已经创建了div元素,它看起来和你预期的样子一样,300px款和高有楞有角且是黑色的。下面我们来添加实现圆角的代码,它是如此的简洁,仅仅需要两行代码。
 
#round {
background-color: #000;
border: 1px solid #000;
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
}
在这里,我们添加了两行类似的代码,-moz-适用于Firefox浏览器,而-webkit-则是用于Safari/Chrome浏览器。
注:目前为止IE浏览器不支持border-radius属性,所以如果想让IE也有圆角效果,那么就要单独添加圆角了。
border-radius这个属性直译过来是边框半径的意思,就如同Photoshop一样,它的值越大,圆角也就越大。

 

3:个别的圆角
css3-技巧
 
如果按照过去的习惯做法,会浪费你很多时间,现在CSS3能快速解决!
我们现在只想让div的右上和右下是圆角,那么仅需稍作修改:
 
#indie {
background-color: #000;
border: 1px solid #000;
-moz-border-radius-topright: 10px;
-moz-border-radius-bottomright: 10px;
-webkit-border-top-left-radius: 10px;
-webkit-border-bottom-left-radius: 10px;
}
试想一下这种做法会用在网页中的什么元素呢?对!就是标签式的导航按钮!

 

4:以CSS3的方式修改不透明度
css3-教程
 
现在你可以按惯例编写几行代码来实现不透明度的效果(hack)。不过CSS3简化了这个流程。
这行代码很好记,仅仅是 “opacity: value;”:
 
#opacity {
background-color: #000;
opacity: 0.3;
}

5:阴影效果

css3-教程
 
实现阴影也有很多方法,最常用的就是使用Photoshop制作成阴影图片,然后应用到背景属性中。但CSS3让你的工作更有效率,不幸的是,目前只有Safari和Chrome支持这个新特性。
仅仅需要一行代码,不过它有4个不同的值:
 
-webkit-box-shadow: 3px 5px 10px #ccc;
下面我来解释一下这四个值都代表什么,第一个3px是指定阴影与div元素之间的水平(横向)距离,第二个5px指的是阴影与div之间的垂直(纵向)距离,第三个10px指的是阴影的模糊度(类似于photoshop中的羽化),值越大越细腻。最后的值不说大家也知道,就是阴影的颜色。
我们最终阴影效果代码;
 
#shadow {
background-color: #fff;
border: 1px solid #000;
-webkit-box-shadow: 3px 5px 10px #ccc;
}
正如你看到的,我们个这个div设置了白色的背景,黑色的边框和亮灰色的阴影。

 

6:调整大小
css3-教程
 
在最新版本的CSS中,调整元素的尺寸已经成为可能(不过目前仅Safari支持)
使用这个代码以后,我们的元素的右下角会出现一个小三角以提示用户这个元素是可以调整尺寸的。代码依然很简单,可以说仅需要一行代码,当然你还可以配合使用一些曾经使用过的属性,比如”max-width”, “max-height”, “min-width”和 “min-height”.
 
#resize {
background-color: #fff;
border: 1px solid #000;
resize: both;
overflow: auto;
}
在这里主要说一下resize和overflow属性,resize:both;的意思就是所有边都可以调整尺寸,它的值还有horizontalvertical,顾名思义,就是横向和纵向。而overflow是为了配合resize工作的,在这里使用auto.

 

总结
css3-教程
 
怎么样,你在这篇文章中有没有什么收获呢?虽然现在仅有很少数的浏览器支持CSS3,但不可否认的是CSS3的确会为我们的工作节省更多的时间。如果你对渐进增强有所了解和认识的话,我想你会欣然接受CSS3这个强大的新版本的。不要再把你的时间都花在IE6上了,那样你只能会是过时的前端开发工程师。

960 Grid System 基本原理及使用方法

960-网格系统
 
由于一些读者对于960 Grid System CSS Framework的原理和使用方法比较感兴趣,暴风彬彬今天将和大家一同分享这篇关于960 grid CSS Framework的基本原理和简单的使用方法。
关于CSS框架其实一直是一个比较热门且很有争议的话题,的确,国内的一些前端er们越来越关注CSS框架,并都开始尝试使用,觉得CSS框架能够节省更多的开发时间,显著提高工作效率。当然,还有很多人持相反意见,认为CSS并没有这么高级以至于要涉及到框架!我记得在cnBeta上曾经有位程序员讽刺道:”这年头,连CSS都有框架了?!”。今天暴风彬彬并不是要向大家介绍什么是CSS框架,也不会介绍各种CSS框架的优缺点。只是要讲解一下目前在国外很热门的一个框架,严格讲是网格系统,那就是960 Grid System。通过这篇教程你会知道使用960框架之后,你的开发工作会更快的开展。

 

960 Grid System 基本原理
首先,你需要学习关于”如何让框架工作”。你可以通过自己的尝试来学习,不过我仍然会在这里为大家进行讲解,那就开始吧。
 
不要编辑960.css
先说一点需要注意的:不要编辑960.css文件,如果你修改了它,那么你今后将无法更新这个框架。
 
读取网格
在我们使用外部文件中的CSS代码之前,首先要在我们的HTML文件中调用它们。像这样调用:
<link rel=”stylesheet” type=”text/css” media=”all” href=”path/to/960/reset.css” />
<link rel=”stylesheet” type=”text/css” media=”all” href=”path/to/960/960.css” />
<link rel=”stylesheet” type=”text/css” media=”all” href=”path/to/960/text.css” />
当我们调用好它们以后,我们要调用自己的CSS文件了。例如,你也许会将你的CSS文件命名为style.css或site.css或者其它什么的。这样调用它:
<link rel=”stylesheet” type=”text/css” media=”all” href=”path/to/style.css” />

 

Containers(容器)
在960框架中,你可以选择两种类名为.container_12 和 .container_16的容器。这两种容器都是960px的宽度(这就是为什么叫做960 grid),但他们的不同之处是它们包含不同数量的列。顾名思义,.container_12的容器被分为12列,而 .container_16被分为16列。这两种960px宽的容器都是水平居中的。

 

Grids (网格)/ Columns(列)
你可以选择很多种不同的列宽组合,不过在这两种容器中是有所不同的。你可以通过打开960.css来了解这些宽度,但这对于设计一个网站并没有什么必要。在这里暴风彬彬将一个很有用的技巧让你使用框架更加容易。
例如:如果你想在你的容器中仅使用两列(分别是主内容区/侧边栏),你可以这样做:
<div class=”container_12″>
<div class=”grid_4″>sidebar</div>
<div class=”grid_8″>main content</div>
</div>
看到上面的代码你也许已经明白,不过我还是要讲一下。也就是说你在container_12这个容器中使用了grid_4和grid_8两列,4+8恰好等于12!明白了吗?使用网格系统的好处之一就是你不用去计算没列的宽度到底是多少,省去了很多运算。
下面让我们看看如何编写四列布局:
<div class=”container_12″>
<div class=”grid_2″>sidebar</div>
<div class=”grid_6″>main content</div>
<div class=”grid_2″>photo’s</div>
<div class=”grid_2″>advertisement</div>
</div>
正如你看到的,这个系统工作得很好。如果你尝试使用你的浏览器读取他的话,你会发现有一些不对劲的地方。不过不要紧,那正是我们下一个话题要讨论的。

 

Margins
默认情况下,每列之间都会存在一些margin。每个grid_(这里插入数值)类都有10px的左margin和右margin。也就是说两列之间的margin值是20px。
20px的margin能让布局保持应有的留白并看上去更平滑,这也是我喜欢960 grid System的原因之一。
在上面的例子中,我们将它使用浏览器读取时出现了一些问题,现在我们来修复它。
问题在于每个列都包含左margin和右margin,但是最左面的列不应该有左margin,最右面的列不应该有右margin。(够罗嗦!)下面是解决方法:
<div class=”container_12″>
<div class=”grid_2 alpha”>sidebar</div>
<div class=”grid_6″>main content</div>
<div class=”grid_2″>photo’s</div>
<div class=”grid_2 omega”>advertisement</div>
</div>
你仅需添加alpha类来去除左margin,添加omega类去除右margin。好了,现在我们的布局已经可以完美在浏览器中对齐了。(是的,包括IE6)

 

Styling(添加样式)
事实上,你已经掌握了如何使用960框架创建基本的网格布局了。不过你也许还想为自己的布局添加一些样式。
<div class=”container_12″>
<div id=”sidebar” class=”grid_2 alpha”>sidebar</div>
<div id=”content” class=”grid_6″>main content</div>
<div id=”photos” class=”grid_2″>photo’s</div>
<div id=”advertisements” class=”grid_2 omega”>advertisement</div>
</div>
由于CSS使用优先级的形式来觉得如何解释样式,而id要比class的优先级高。这样我们就可以在我们的独立CSS文件中以id选择符创建个性化的样式了。如果凑巧有的样式属性与960相同但值又不同,浏览器会优先选择你的CSS文件中的样式。当然,如果您感兴趣,也可以看看上面的实例添加样式后的实际效果

 

我们做到了
这是这样!你已经掌握的如何使用960网格系统来创建兼容所有浏览器的布局。当你完全掌握熟练960系统之后,你会发现它为你节省了很多很多编写CSS的时间。

 

我想请问你
你在之前是否使用过960网格系统?或其它CSS框架?你是否认为CSS框架能够改善你的代码?欢迎留下你的观点