今天一连两次被问到简历中提到的高性能Web开发方面的事,看来这种大标题很有诱惑力。
据我所知,国内关于高性能网站的书籍就3本,两本动物园出品,主要针对前端优化,内容也是根据雅虎军规展开来讨论。另一本是国内一作者写的,前后兼顾。
这里特地从淘宝前端技术系列课程中的PPT中截取一张图片,用来大概划分一下前后端的概念。
前端后端其实都是相对应的,不过也可以大概把看得见的部分列入前端,看不见的部分列入后端。
这个主要是从优化的投入产出来考虑。
有统计表明,对现有网站进行优化,后端方面只能提高20%的性能,而前端方面能提高80%的性能。
其实我认为,更深层次的原因是后端开发相对于前端开发而言,难度更大。同时整个后端的体系已经相对完善,整个发展处于一个平缓期(这里我是以这些书出版的时候算,现在各种新技术应用在分布式集群上,大大拓展单机运算能力,后端性能有了一个新的提升)。而前端方面,由于历史原因,旧的那套开发方式几乎推倒重做,所有页面都需要重新设计制作,这为前端领域带来一个前所未有的发展机会,各种对应的优化手段不断推出,一浪接一浪。
要烹饪一份美食,选材很重要,Web开发同样如此。
后端方面,使用Apache/Nginx等轻量级引擎处理替换IIS,使用Memcached对热数据进行缓存,同时使用MongoDB等NoSQL技术对传统关系型数据库做辅助横向拓展。对Apache等引擎层集群、MySQL等数据库层集群、文件集群等进行请求均衡处理、或者按权重进行负载均衡。
当然,上面的这种多层横向多站的形式,仅适用于集群,单机这么做只会白白增加各层次通讯响应延迟以及单机公共件的负担。
单机优化,同样使用轻量级程序,但是要减少整个架构的复杂性,减少层次规模。
前端方面,优化手段就多了去了。
雅虎XXX条军规(为啥XXX,因为这玩意不断在增加)。
上面我是参考书上写的,前端优化技巧繁多,但其要点有以下几个:
从制作上面控制文件体积:通过各种压缩手段,对图片和代码进行体积压缩。
多用缓存技术:CDN、浏览器缓存等。
再怎么压缩,再怎么缓存,需要请求的东西依旧这么多,总的流量依旧那么大,好吧,还有异步加载:把最最最重要的东西先进行响应,其他的慢慢来,好商量。
手机上网增加,相对服务器而言,手机还是相对很瘦的,所以别让手机处理那么多逻辑上的事。复杂的JS/CSS3等特效,在手机上能省则省吧。
文中多次提到“相对”一次,要知道,优化是有前提的,没有那服药能治百病,乱开处方更会病入膏肓。
这里我还想啰嗦一下,为什么前端优化比后端优化要热闹呢?因为前端优化容易实践,实践出真理。一个WordPress,有优化和没优化立竿见影。而后端呢?谁有这样的财力物力组建自己的集群?
我经常在纠结,我的VPS是月付5刀左右,那如果我改成买5台月付1刀的组集群,把服务都分开,会怎样??o(∩_∩)o 哈哈
再送一句话“过早优化是万恶之源”。
有时候也别想那么多,东西能做出来就是好事,有很多人用更是好事,至于多到跑不动了,到时自然有解决的方法,是不过会很痛苦。辩证的思考问题就是这么麻烦~~