收藏夹

facebook奇特的页面加载技术

facebook使用chunk技术让页面分块输出成很多JS段,这样做的好处就是服务器和客户端可以并行进行处理,不用等服务器全部处理完毕,客户端才进行处理。

举个博客园首页的列子,博客园首页分为下面几块(“推荐博客排行”,”首页随笔列表”,”最新新闻”…)
我们一般对该http请求处理如下:

  1. 浏览器发送http请求;
  2. 服务器处理请求(从缓存读取前50个推荐博客,从数据库读取”首页随笔列表”,从数据库读取”最新新闻”),生成首页的html代码;
  3. 服务器发送html代码给客户端;
  4. 浏览器接收到响应,处理html。(下载css,js,image,执行js等等)

可以看出传统的http请求4个过程中,每个过程都必须等待前1个过程完成后才能执行,这样就存在很大的资源浪费。

facebook的对该http请求的处理如下:

  1. 浏览器发送http请求;
  2. 服务器处理请求;
    • 从缓存读取前50个推荐博客,生成”推荐博客”的js代码段,flush输出该代码段;
    • 服务器继续读取”首页随笔列表”,并生成输入js代码段;
    • 服务器继续读取”最新新闻”,并生成输入js代码段。
  3. 浏览器接收到js代码段,下载该代码段所需的js和css。插入html代码。

在这个处理流程中,最大的特点就是2,3是并行进行处理的,服务器处理完一部分数据就把已经处理好的数据交给浏览器进行呈现处理,自己再继续处理其他的数据。

原文链接:
《名站技术分析 — facebook奇特的页面加载技术》

————————————
相关博文:
《为什么Facebook比以前快2倍》


为什么Facebook比以前快2倍

随着用户的增多,几乎所有网站都会面临一个问题:网站速度变慢,用户体验变得不好。Facebook已经有超过5亿的用户,其用户增长速度令人震惊,但是人们从来没有发现Facebook变慢,相反,它正变得越来越快!Facebook 为什么能越来越快?

罗伯特 约翰逊(Robert Johnson)是Facebook的项目总监,他说:在工程师团队对Facebook代码进行了重写和深入优化之后,网站的速度以前快了2倍。

1.Facebook花了多久才让它变快2倍的呢?

罗伯特 约翰逊:我们对网站进行的大幅度的”改革”,这的确使网站速度得到很大的提升。工程师团队花了大概一个月来规划这个项目,具体的实施过程则花费了6个月。

2.在这次的重写行动中,你们在技术上做了什么大的改进?

罗伯特 约翰逊:我们队源代码做了比较多的优化和重写:

1、把用户请求之后的内容生成、网络传输和网页渲染的时间重叠起来;
2、把相应的功能代码放进一个在页面初始化时需要用到的Javascript核心功能文件中;

这个项目叫做”BigPipe“,只要当客户端的浏览器准备好了,我们的服务器就会以最快的速度以流的形式传送内容,当我们的服务器还在产生数据的时候,客户端的浏览器就已经开始下载静态内容和渲染页面最重要的部分了,我们把几部分的时间重叠了起来,使用户感觉更快。这个新的JavaScript库叫做”Primer“.

除了服务器端的大项目之外,我们还对所有的文件都进行了”瘦身”,让一切变得更小更轻,比如我们进行了CSS图片合并(CSS Sprites).

3.Facebook是否鼓励开发员大胆尝试和创新呢?

罗伯特 约翰逊:也许这是这个项目最棘手的部分之一。对于Facebook来说,开发速度是最重要的指标之一,我们不希望看到任何会使开发速度慢下来的事情。我们既要让开发人员尽可能容易的完成任务,又要使网站代码尽可能得到优化,所以我们制造了一些辅助开发工具,它们能使鱼和熊掌兼得。比如Primer,让它使Facebook运行得更快和让它易于集成和不容易被误用是同等重要的。

我们监测一切可能会影响程序性能的因素,并开发相应的工具,在程序正式放出之前检查代码。

这很重要,一旦代码出现问题,系统就会自动提醒开发人员,而不是靠开发人员自己去检查那些问题。这样开发人员就可以不断地创新,只要在出现一些比较特殊问题的时候,开发人口才需要停下来解决那些问题。

原文: oreilly 译文:http://cnnet.us/taobao/facebook-faster/ 转载请保留出处

1 Comment more...

常见HTTP状态码

200
请求已成功,请求所希望的响应头或数据体将随此响应返回。
一句话总结:服务器成功返回网页

301
被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个URI之一。如果可能,拥有连结编辑功能的客户端应当自动把请求的地址修改为从伺服器反馈回来的地址。除非额外指定,否则这个响应也是可缓存的。
新的永久性的URI应当在响应的Location域中返回。除非这是一个HEAD请求,否则响应的实体中应当包含指向新的URI的超连结及简短说明。
如果这不是一个GET或者HEAD请求,因此浏览器禁止自动进行重定向,除非得到用户的确认,因为请求的条件可能因此发生变化。注意:对于某些使用HTTP/1.0协议的浏览器,当它们发送的POST请求得到了一个301响应的话,接下来的重定向请求将会变成GET方式。
一句话总结:网址永久性重定向

302
请求的资源现在临时从不同的URI响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。只有在Cache-Control或Expires中进行了指定的情况下,这个响应才是可缓存的。新的临时性的URI应当在响应的Location域中返回。除非这是一个HEAD请求,否则响应的实体中应当包含指向新的URI的超连结及简短说明。
一句话总结:网址临时性重定向

401
当前请求需要用户验证。该响应必须包含一个适用于被请求资源的WWW-Authenticate信息头用以询问用户信息。客户端可以重复提交一个包含恰当的Authorization头信息的请求。如果当前请求已经包含了Authorization证书,那么401响应代表着伺服器验证已经拒绝了那些证书。如果401响应包含了与前一个响应相同的身份验证询问,且浏览器已经至少尝试了一次验证,那么浏览器应当向用户展示响应中包含的实体信息,因为这个实体信息中可能包含了相关诊断信息。
一句话总结:未授权—未授权客户机访问数据

403
伺服器已经理解请求,但是拒绝执行它。与401响应不同的是,身份验证并不能提供任何帮助,而且这个请求也不应该被重复提交。如果这不是一个HEAD请求,而且伺服器希望能够讲清楚为何请求不能被执行,那么就应该在实体内描述拒绝的原因。当然伺服器也可以返回一个404响应,假如它不希望让客户端获得任何信息。
一句话总结:服务器拒绝请求

404
请求失败,请求所希望得到的资源未被在伺服器上发现。没有信息能够告诉用户这个状况到底是暂时的还是永久的。假如伺服器知道情况的话,应当使用410状态码来告知旧资源因为某些内部的配置机制问题,已经永久的不可用,而且没有任何可以跳转的地址。 404这个状态码被广泛应用于当伺服器不想揭示到底为何请求被拒绝或者没有其他适合的响应可用的情况下。
一句话总结:404表示临时性,410表示永久性

413
伺服器拒绝处理当前请求,因为该请求提交的实体数据大小超过了伺服器愿意或者能够处理的范围。此种情况下,伺服器可以关闭连接以免客户端继续发送此请求。
一句话总结:数据量过大,服务器拒绝

500
伺服器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器的程序码出错时出现。
一句话总结:服务器遇到错误,无法完成请求

转自:http://binbin8497.javaeye.com/blog/494089


前端博客搜索

丸子同学整理出了一个前端博客搜索,整合了国内外知名的125个(陆续增加ing)前端博客。

优点:
· 搜索引擎使用的是Google的数据
· 搜索范围只针对前端开发相关内容
· 所收录站点为全手工的审核

自他介绍:
这是一个搜索前端博客的插件,目前全手工收录了146个国内外的前端开发者博客及相关站点!是方便查找前端资料的好帮手!你可以看到:当你访问这个页面时,你的IE7+或者Firefox2+右上角的搜索工具栏中多了个前端博客搜索,而在Google chrome4.0+你可以以chrome自己的方式方便的使用它.是的,通过它你可以直接在浏览器的搜索栏里搜索我已收录的前端博客的文章资料,一切就是这么简单!

试用:


语出乔治·卡林

     我们的时代自相矛盾
     我们有了更高的建筑,脾性却变得暴躁
     更宽的高速公路,视野却变得狭窄
     我们消费更多,拥有的却更少
     我们购买更多,享受的却更少
     我们有更大的房子,家庭却变得更小
     我们有更多的便利,时间却变得更少
     我们有更多的学位,理性却变得更少
     更多的知识,判断却更少
     更多的专家,问题却更多
     更多的医药,健康却每况愈下
     我们喝酒太多,抽烟太多,花钱太无所谓
     笑得太少,开车开太快,太愤怒,太晚睡觉,太累了
     读书太少,看电视太多,祈祷太少
     我们的财产加倍,但价值却减少
     我们话太多,恨太多,爱太少,
     我们学会了生存,却没有了生活
     我们生命延长了,日子却没有了活力
     我们实现了登月,却不愿去认识我们的邻居
     我们征服了外部空间,将内部空间置之不理
     我们做得更大,却不是更好。
     我们洁净空气,灵魂却被污染
     我们征服了原子,却征服不了我们的偏见
     我们写得更多,学得却更少
     我们计划得更多,实现得更少
     我们学会了匆忙,却没有学会等待
     我们造了更多计算机,拥有了更多信息,制造出更多的副本,互相的交流却更少
     这是快餐和慢咽的时代
     这是大人物心胸狭窄的时代
     这是高利润和浅人际关系的时代
     家庭更富裕,离婚却更多
     房子更豪华,家庭却更破碎
     这是短途旅行、一次性尿布、道德丧失、一夜情、超重、药物泛滥的时代
     展示得更多,收藏得更少


Copyright © 1996-2010 Chesanqi's Web World. All rights reserved.
Jarrah theme by Templates Next | Powered by WordPress