纸上谈兵之高性能Web开发

今天一连两次被问到简历中提到的高性能Web开发方面的事,看来这种大标题很有诱惑力。

据我所知,国内关于高性能网站的书籍就3本,两本动物园出品,主要针对前端优化,内容也是根据雅虎军规展开来讨论。另一本是国内一作者写的,前后兼顾。

这里特地从淘宝前端技术系列课程中的PPT中截取一张图片,用来大概划分一下前后端的概念。

前端后端其实都是相对应的,不过也可以大概把看得见的部分列入前端,看不见的部分列入后端。

为什么动物园对于前端优化的就有两本,而后端优化的只有国内一本呢?

这个主要是从优化的投入产出来考虑。

有统计表明,对现有网站进行优化,后端方面只能提高20%的性能,而前端方面能提高80%的性能。

其实我认为,更深层次的原因是后端开发相对于前端开发而言,难度更大。同时整个后端的体系已经相对完善,整个发展处于一个平缓期(这里我是以这些书出版的时候算,现在各种新技术应用在分布式集群上,大大拓展单机运算能力,后端性能有了一个新的提升)。而前端方面,由于历史原因,旧的那套开发方式几乎推倒重做,所有页面都需要重新设计制作,这为前端领域带来一个前所未有的发展机会,各种对应的优化手段不断推出,一浪接一浪。

高性能实践军规

要烹饪一份美食,选材很重要,Web开发同样如此。

后端方面,使用Apache/Nginx等轻量级引擎处理替换IIS,使用Memcached对热数据进行缓存,同时使用MongoDB等NoSQL技术对传统关系型数据库做辅助横向拓展。对Apache等引擎层集群、MySQL等数据库层集群、文件集群等进行请求均衡处理、或者按权重进行负载均衡。

当然,上面的这种多层横向多站的形式,仅适用于集群,单机这么做只会白白增加各层次通讯响应延迟以及单机公共件的负担。

单机优化,同样使用轻量级程序,但是要减少整个架构的复杂性,减少层次规模。

前端方面,优化手段就多了去了。

雅虎XXX条军规(为啥XXX,因为这玩意不断在增加)。

  • 减少、合并请求(典型应用:雪碧。使用雪碧需适量,过度容易消化不良)
  • 使用CDN,对请求进行就近响应(典型应用:有备案的直接上国内CDN或者用SAE等、没备案的对静态文件使用又拍云CDN,效果同样不错。面对国外用户的话,选择多了去了)
  • 进行浏览器缓存,对缓存文件添加Expires头部(比CDN更加强悍,直接把静态文件放到用户的浏览器上,直接加载。对于SNS等粘度较高网站效果显著,对于偶尔上上的网站,效果一般,毕竟第一次请求仍需全部文件加载,所以前端开发中,对文件体积的控制必须时刻保持)
  • 开启Gzip等压缩功能(在服务器开启后,会对请求文件进行压缩后再发送,是拿CPU时间换网络流量的做法,对于现阶段CPU,无论服务器还是客户端,处理Gzip问题都不大)
  • CSS放头部、JS放尾部(CSS小于JS,CSS放头部能快速加载、防止JS阻塞请求,同时先处理样式,再处理交互方面的动作)
  • 避免CSS表达式(逻辑上的事情,还是交给服务器来做吧,不过这事未来也难说,谁知道哪天改成富客户端、廋服务器呢)
  • 外部JS和CSS(额,这个不用说吧。请求数换页面提交)
  • 减少DNS查询(解析DNS是要费时间的)
  • 使用Ajax异步加载技术(图片延迟加载,把宝贵的带宽留给第一眼看到的东西)

上面我是参考书上写的,前端优化技巧繁多,但其要点有以下几个:

从制作上面控制文件体积:通过各种压缩手段,对图片和代码进行体积压缩。

多用缓存技术:CDN、浏览器缓存等。

再怎么压缩,再怎么缓存,需要请求的东西依旧这么多,总的流量依旧那么大,好吧,还有异步加载:把最最最重要的东西先进行响应,其他的慢慢来,好商量。

手机上网增加,相对服务器而言,手机还是相对很瘦的,所以别让手机处理那么多逻辑上的事。复杂的JS/CSS3等特效,在手机上能省则省吧。

结语:优化不是银弹,不可滥用。但明显不适合的处理手段,则必须要改

文中多次提到“相对”一次,要知道,优化是有前提的,没有那服药能治百病,乱开处方更会病入膏肓。

这里我还想啰嗦一下,为什么前端优化比后端优化要热闹呢?因为前端优化容易实践,实践出真理。一个WordPress,有优化和没优化立竿见影。而后端呢?谁有这样的财力物力组建自己的集群?

我经常在纠结,我的VPS是月付5刀左右,那如果我改成买5台月付1刀的组集群,把服务都分开,会怎样??o(∩_∩)o 哈哈

再送一句话“过早优化是万恶之源”。

有时候也别想那么多,东西能做出来就是好事,有很多人用更是好事,至于多到跑不动了,到时自然有解决的方法,是不过会很痛苦。辩证的思考问题就是这么麻烦~~

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏原创

Android服务开发经验——优雅地活着 by个推推送

具体来说,就是要做到两点: 1. 尽可能运行 2. 尽可能省电 看似寻常的道理,实现起来还真不容易,下面一个个来看: 尽可能运行 Android系统会根据当前资...

3897
来自专栏程序人生

手把手教你做个生成静态网页的小工具:podgen

程序人生之图穷匕见的podcast发了四期(三期正式的)后,有几个读者说在微信上听效果不好,又没法暂停(停下后再听又从头开始了),能不能在iTunes 播客里面...

3939
来自专栏云瓣

使用React全家桶搭建一个后台管理系统

引子 学生时代为了掌握某个知识点会不断地做习题,做总结,步入岗位之后何尝不是一样呢?做业务就如同做习题,如果‘课后’适当地进行总结,必然更快地提升自己的水平。 ...

5349
来自专栏西枫里博客

如何让网站打开变快?暨网站速度优化指南。

网站打开速度一向是网站运营者和SEO工作者关注的重要指标。百度在网站优化白皮书中也提到需要注重网站访问速度。2017年更是退出了针对移动端访问推出闪电算法(博文...

1462
来自专栏玉树芝兰

安装 Python 软件包遇错误,怎么办?

本文通过一个命令行转换 pdf 为词云的例子,给你讲讲 Python 软件包安装遇挫折时,怎么处理才更高效?

1472
来自专栏java一日一条

电商网站秒杀与抢购的系统架构

在过去的工作中,我曾经面对过5w每秒的高并发秒杀功能,在这个过程中,整个Web系统遇到了很多的问题和挑战。如果Web系统不做针对性的优化,会轻而易举地陷入到异常...

1882
来自专栏花叔的专栏

解读小程序互跳功能,首对互相跳转的小程序发布!

花叔漏夜把新功能更新到接口人和Nodes小程序里了。现已发布,说不定这是最早上线的小程序互跳功能案例,请叫我快男花。 先说说昨晚发生了什么: 话说,昨晚11点做...

41712
来自专栏镁客网

果粉们有福啦,iphone也能接高速优盘了呢

1563
来自专栏腾讯技术工程官方号的专栏

微信朋友圈:应对春节千亿访问量背后的故事

微信朋友圈包括图片和视频两套业务架构组成,朋友圈图片的特点是请求量大、消耗计算资源较多,视频则主要消耗带宽。朋友圈的数据是永远存储的,而且随着业务的快速发展,存...

8873
来自专栏云计算与大数据

Envoy——Service Mesh体系中的私人订制,把你安排得明明白白!

最近因工作原因开始了解Service Mesh与Envoy,为系统性梳理所学内容,因此沉淀了此文档,但由于所知有限,如文档中有描述不当之处,希望不吝赐教。

2452

扫码关注云+社区

领取腾讯云代金券