2011-09-28 39 views
5

我很好奇为什么Facebook开发者选择不将他们的脚本和样式表合并到单个文件中。相反,它们通过CDN按需加载。为什么Facebook不结合其CSS/JS文件?

的Facebook显然是一个非常复杂的应用程序,我能理解模块化怎么这么可能让Facebook更容易维护,但不会在通常的优化建议仍然适用(尤其是考虑到其高层次的使用)?

或者,是否他们用的是CDN避免很多小脚本/风格的通常性能影响的事实?

+0

,我认识的大多数Facebook用户都是在所有的时间,这样就不会身在何处,脚本和样式是从,因为他们会在浏览器缓存下载。 – nnnnnn

回答

5

总之一句话BigPipe。他们将页面分成'pagelets',每个页面在服务器上分开处理并并行发送到浏览器。基本上几乎所有东西(CSS,JS,图像,内容)都是惰性加载的,因此它归结为一堆小文件。

+0

BigPipe链接是一个迷人的阅读,谢谢! –

+0

最新版本的Yahoo!邮件也[使用类似的技术](http://yuilibrary.com/theater/dan-hunt/yuiconf2010-hunt/)。 –

+1

Yahoo!将其[YUI剧场](https://www.youtube.com/user/yuilibrary?feature=watch)的内容移至YouTube。我在[在前面的评论中提到]的讲座(https://www.youtube.com/watch?v=i6S4hY4Oamk),整个事情很有趣,但如果你想要的话,你可以[跳到关于他们新的部分BigPipe-like系统](https://www.youtube.com/watch?v=i6S4hY4Oamk#t=917s)。 –

5

他们可能运行到哪里能的JS文件不同的组合有助于在不同时间的浏览器(不同的页面或不同用户的不同应用配置)储蓄代表比下降较大的储蓄的情况下HTTP请求将所有文件合并为一个的开销。

如果浏览器永远只能在任何给定的时间执行总JS代码库的小型%,那么这将是有意义的。因为它们有许多不同的用户和不同应用程序的不同部分,这些应用程序以不同的配置为这些用户运行,所以这是可以证明的。其次,这些文件只需要下载一次,然后浏览器将不会再次询问它们,直到它们发生更改或缓存过期,因此只有第一次访问才真正受益于一体化风格。而且,拥有和先进的CDN以及遍布世界各地的边缘地区绝对有帮助。

+0

感谢您的回应,接受答案中的BigPipe链接提供了来自Facebook本身的确切说明。你的回答也很有用,但不幸的是我只能接受一个。再次感谢 –

0

也许他们认为这更可能是你往往比你清除浏览器缓存访问Facebook的。

相关问题