facebook本次的几个分享都相当给力,绝对让听的人不虚此行,想必对fb的bigpipe技术早有耳闻,这次算是大揭秘了,把技术细节和思路都详细介绍并用实例进行了说明

发布时间:2026/7/5 3:23:17

facebook本次的几个分享都相当给力,绝对让听的人不虚此行,想必对fb的bigpipe技术早有耳闻,这次算是大揭秘了,把技术细节和思路都详细介绍并用实例进行了说明 上图就是fb的前端优化使用到的三个主要技术Quickling是他们的异步ajax框架用于整个fb网站的ajax化使用过fb的话可以发现网站在页面切换过程中并不像传统页面加载一样进入一个新页面浏览器就整个页面重新渲染特别是当你点击后退的时候上一个页面几乎是立刻出现的这里便是quicklingpagecache的优化quickling负责在切换页面的时候清空主体内容区域发送ajax加载新的内容下载需要的JavaScript、CSS等资源然后呈现新的页面被清空的页面被保存在pagecache中当用户点击后退的时候立刻从中恢复上一个页面他们在这个过程中还模拟了浏览器加载效果地址变换等。上面描述了要实现这样一个页面前端处理模型所使用到的具体技术细节要模拟游览器前进后退行为因而需要记录用户的操作历史在同一个窗口频繁加载卸载页面页面中积累了大量的css资源也需要能够在不需要的时候被卸载掉一些settimeout定时器也需要被管理在切换页面的时候被重置或移除。在使用quicklingpagecache提升性能的同时也存在一些挑战被缓存的页面和用户当前操作的页面存在数据关联时如何同步pagecahce缓存一致性如何保障fb的用户主页home有用户的动态新鲜事会随着用户在其他页面的操作而产生更新当home被从缓存中重建后如何知晓这个变化并作出更新的呢这里使用到了一个“replayable”记录重播技术来解决这个问题所有的ajax post调用均会被记录在缓存页面被重新呈现的时候进行“重播”来达到更新的效果pagecache本身也提供了callback机制在重建页面的时候允许指定执行一些额外的动作最后一个bigpipe前面2个技术加上这个算是把web前端性能做到极致了bigpipe更带来了工程上的意义在达到优化页面并行加载的同时模块化的开发也让fb的优雅降级分工超短周期迭代成为可能。讲bigpipe之前先需要介绍pageletpagelet就是作为模块的单位定义了一个模块需要的js,css,html等信息bigpipe.js便作为一个客户端按照pagelet的信息来解释并呈现一个个模块值得一提的是pagelet在模块化的同时还提供了高级特性比如嵌套优先级关联性等来满足应用层面的需求使用上对php而言只是继承一个pagelet基类提供该有信息然后再在bigpipe客户端注册这个pagelet。这次大会的几个主题还有一个共同点就是都在努力设计和实现一个适合于自己业务的框架或平台使得这种性能优化等最佳实践可以被传播应用在任何一个具体业务应用中而无须让产品开发者过多关注可以简易的被使用而达到好的效果并通过架构约束来实现大型团队的开发模式管理fb的另外一个静态资源优化方面的主题就是一个很好例子静态资源管理看似简单而fb算是做到极致了之前也曾思考并尝试一些方式来做自动化的资源管理但离fb的深入度还是差一个量级~自动化的伸缩性自适应性用节点模型来描述资源通过绘制节点关系图和引用计数等方式生成一张成本/收益图来自动进行决策从而自动的进行打包并输出给客户端同时还会根据用户的区域语言等信息选取合适的资源进行打包在开发使用上通过开发人员的注释约定识别这种引用关系监控各种资源文件的使用情况《腾讯相册存储系统》 谢明 (腾讯)低调的tx的分享全场爆满听后不得不说是一个让人敬畏的对手tx的TFS分为LogFileSystem和ImageFileSystem相册会生成多种规格的图片他们也有自己的KV叫TDB值得一提的是TFS是直接读写裸设备他们也同样大量定制自己规格的server存储等《构建高性能的MySQL系统》 杨海朝(新浪)海量数据已经是近年来很火的话题了使得存储数据库的话题备受关注特别是云存储概念出来后各种热议国内的各大互联网公司也都开始有大规模的实践案例不过这位sina的首席DBA没有往大的讲而是选择讲了一些MySql优化原则方面的东西介绍了MYSQL的两个表存储引擎MyISAM和InnoDB的差异和使用场景前者关系型不适合做HA因为一旦down了之后repaire时间太长锁级别是tablelock后者适合大字段R/W高的具有高可用性高并发锁级别是rowlock索引个数在3-5个以内合适在需要的时候覆盖索引可以获得很好的性能如sort,count组合索引要注意索引和列的次序MySql特别适合分布式场景读写分离架构下甚至可以让M、S使用不同的存储引起来根据场景优化对于应用有一个重要观点就是对于应用层面应该弱化DB只需要认为DB是一个存储即可这样的设计才能做到scacle-out,说到这点再加上盛大创新院许式伟的《分布式存储与Web服务伸缩性》基本上可以说存储还是让有资源的巨头去捣腾吧关注应用才是更能快速获取价值的《构建Yahoo下一代Mail》 Daniel Hunt(Yahoo!)从几场老外的主题里基本得出一个结论他们对性能和体验的重视程度远高于国内企业《卷土重来服务器端JavaScript》 Douglas Crockford(Yahoo!)老道的主题自然吸引无数人服务器端js也是近期火起来的话题了只是实在不懂为什么是在chrome的v8引擎起来了才火了相信js的语言魅力已经让大多数web开发者爱上它了而今让它不仅跑在浏览器里还能run在server上让server编程也获得事件模型的好处是不是很让人兴奋node.js是一个尝试之后准备关注一下其实乍一看这个标题你可能或想到另外一种解释浏览器不支持js的时候让它跑在服务器端这样是不是更有吸引力恰巧这个想法在yahoo的《构建Yahoo下一代Mail》中有提高用户多样性使得他们必须满足这种情况他们因此提供了这样一种模型来支撑这种编程模型让你只需要知晓一个中间语言从而能编写出client or server script很诱人吧所以这个也准备去关注了。《Facebook: 一个可持续发展的高性能网站》 David Wei(Facebook)这个主题就是上文提到的一个观点的完整版用架构去支撑你的网站持续的发展保持简单而又能获得性能的收益。Fase By Default与生俱来的快我归纳的几点数据驱动获取足够的数据来支撑你的优化决策要让性能工作可以被测量让开发人员遵循简单的约定就可以编写出高性能的应用不符合约定的代码应越早被发现开发过程中就要暴露出来这要求你的框架有这样严谨的支持减少人工的临时的优化工作通过建立各种模型来提供支持组件化模块化丰富的开发参考文档便于使用和理解的代码片段参考隐藏细节让性能小组、架构者获得主动权还有几个技巧点把脚本作为文本加载避免阻塞利用iframe的沙箱环境来实现一些缓存预加载之类的效果用new Image()来预加载js《分布式存储与Web服务伸缩性》 许式伟(盛大创新院)最深的印象是存储不是谁都需要去做的太消耗脑细胞对创业者的规劝《移动互联网内容平台的架构与性能优化》 孙立(凤凰网)很务实的一位speaker把ifeng的IMCP平台架构描述的清清楚楚他们的场景使得CodeOnline尤为合适人员成本开发管理等思想也是我比较倾向的。

相关新闻