海外VPS如何进行性能优化

http://10gt.com/info/73

 

比较标题党,本文主要想说一下在开发10GT过程中的一些性能优化,跟大家分享。

可能你要笑了,这点小数据量,有什么好优化的,那可能你只想到了后端存储层的优化。

对于一个海外VPS(比如在日本linode的10GT),由于网路会比较长,用户感受到的页面打开时间里,通常round-trip占比是最大的。所以如何优化round-trip就是一个重点。

基本上有下面几个方面,主要是根据http协议的一些内容进行优化:

1.keep alive

目前主流和浏览器和服务器都支持keep alive功能。简单来说keep alive就是浏览器与服务器的保持连接,多次请求不需要重新建立连接三次握手。在网络延迟占大头的情况下,这是绝对必要的。

2.gzip

这不用多说了,gzip对请求返回进行压缩,以前两个包的变成一个包,这就减少了一次round-trip。由于服务器是根据浏览器发送的http头来判断是否启用gzip的,所以gzip是否有用还得看浏览器支持。但是目前也有一些浏览器,支持gzip但不发这个头。这时候你可以参考一下下面PPT的“强制gzip压缩”一节

http://velocity.oreilly.com.cn/2011/ppts/nginx_at_taobao.pdf

3.减少串行请求

10GT最初为了并行请求,将页面所有动态模块都并行的异步加载。但是这样出现一个问题,由于所有并行任务是在主页面框架加载后才能开始,所以对于首页的话题列表,他需要串行的两个请求才能获取到。网络延迟高的时候,会明显的感觉到列表加载有延迟。所以现在你可以看到列表和主框架是一起加载的。只需要一个请求。

另外如果你并发的请求本身就比较大,比如页面多张不同url的图片,那么你可能还需要为图片设置多个域名,以免达到浏览器对同一域名访问的最大并发值。从而导致请求需要排队串行化。

4.浏览器缓存

10GT右侧的热标签和新鲜事也是异步加载的,不过你可能发现很少会感觉到这两个模块加载的延迟。原因就是这两块的请求返回了缓存一定时间的http头部,他们几乎都是从浏览器缓存中取的。

另外还有评论列表也用到了浏览器缓存,在请求评论时,GET请求会带着最后回复的时间戳,返回的http头里会带有缓存头部。这样只要没有新的回复,回复部分也是直接从浏览器缓存中取得的。有新的回复后,GET请求中的时间戳会改变,从而获取到最新的列表进行缓存。

5.使用etag

etag是http协议中的一个头部,它用于标识一个请求返回的资源。在获取资源时,可以返回etag用于标识当前请求的数据,再次请求同一个url时,服务器通过浏览器发送的etag来判断此资源是否有修改,如果没有,就直接返回304,浏览器会使用本地缓存,这样只需要一个包就能搞定。所以在10GT的所有GET请求里,除了直接指定缓存时间外的,都包含并识别了etag,通过这种方式来直接返回304,从而减少数据包大小和网络开销。当然,使用Last-Modified也可以。

6.使用cookie free的域名来加载静态资源

http请求都会带着cookie,如果cookie过多,可能会导致一个请求需要多个包来发送。所以如果不需要cookie的东西,比如css,js和图片等,可以考虑放到另一个域名下,这样请求包会比较小,同理,速度也就会快一些了。这一点10GT还没有做,主要是因为目前页面资源需求不多(css需要的资源只有一个背景图),且都做了前端缓存。

大概就是这些,欢迎讨论指教~

评论

lonevan3年前  

哟 我也用linode在东京的节点~
这篇讲的主要是前端优化方面
2. gzip
gzip压缩大概在60-70%左右,可配置 > 1K的文件进行压缩,太小节省的流量还不如耗费的cpu
至于不支持gzip的浏览器,或者没有Accept-Encoding头的,特别做压缩是很蛋疼的事
3. 并行
steve souders给的建议是2个域名并行加载最优
不过太多的异步请求不利于seo,而且造成大量的服务器请求
这个要看场景,10gt无此顾虑
4. 浏览器缓存 & 5. Etag
说的一码事,10gt的etag配置过,去掉了机器码,如不去 使用etag在集群中很可能失效
优化的话需要注意对ajax请求的缓存
6. cookie free
这个真需要前期就规划好,以前在公司想换个域名太难了,很多代码写死
前端优化总结下来基本有几方面考虑:
1) 减少连接时间;(keep-alive)
2) 减少页面资源;(css-spirite, style-merge)
3) 增加并发请求;(multi-domain)
4) 压缩内容;(gzip, compress)
5) 减小请求头;(cookie free)
6) 减少请求数;(browser cache,etag,expires头等)
7) 加快页面呈现速度;(css top, js bottom, encoding: chunked)
参见steve souders的两本前端优化书,讲的很透彻了..

iammutex3年前  

@lonevan 不错,回头翻翻你说的两本书

lonevan3年前  

@iammutex
<High Performance Web Sites> 高性能网站建设指南
<Performance Best Practices for Web Developers> 高性能网站建设进阶指南
读起来很快,都是作者经验之谈,第一本基本看YSlow的优化建议一样,貌似网上有的下