读书笔记_构建高性能Web站点书评-查字典图书网
查字典图书网
当前位置: 查字典 > 图书网 > > 构建高性能Web站点 > 读书笔记
pioneer 构建高性能Web站点 的书评 发表时间:2013-12-10 01:12:07

读书笔记

       毕业入职后主要做的是web后台开发,才开始深入接触web,在学校时基本都和蛋疼的windows打交道,大四实习时参与过移动app后端的工作,其实也和web后端差不多主要是提供接口,而web的性能在前端和后端都挺重要。 此这本书对于像我这种新手有一个全景式的介绍,我发现有不少性能优化方案也在公司也有实践。
       首先大致地了解一下,一个web请求从浏览器发出直到呈现给用户的主要性能耗时在于一下几点:
          1.数据在网络上的传输(可能会经过DNS,CDN,反射代理等);
          2.web后端处理请求并返回结果(可能会和DB,cache,文件系统打交道);
          3.前端页面在浏览器的渲染(前端的原理我就不是太了解了);
      
       增加带宽,主要影响数据在网络上传输这一环节,解决下载速度变慢的问题。带宽的单位是bit/s,每秒传送的比特数,我笼统的理解为传送速度。在实际中,瓶颈容易出现在各个运营商之间的网络互联上,如果服务器和用户ip处于不同的运营商网络中,数据必须经过两个互联网运营商的节点,节点带宽变成令大家头疼的问题,这是web架构不可忽视的一点,主要通过分布式系统和负载均衡等方式来解决(我也没有详细了解这个问题)。
        减少网页中的http请求,主要是前端方面的工作:合并多个图片利用css背景图片偏移技术呈现在网页中,避免多个图片的下载。合并js和css。充分利用浏览器的cache
        加快服务器脚本的运算速度,在代码逻辑上,如果要了解代码的性能瓶颈,以php来举例,比较好的工具是xdebug,当然还有facebook的xhprof。脚本语言每次执行都要被解释器解析生成opcode才能执行,但是文件一般很少发生变化,因此可以将opcode进行缓存。
        使用动态内容缓存,这些内容的生成有可能会涉及cpu计算,I/O操作,数据库连接,网络I/O(web api或远程调用),而且这些操作通常都不是异步的,但是很多情况下也不是实时性很强的数据,可以将这些内容缓存起来。比较常见的做法是使用分布式的memcached,这样比较方便扩展(虽然相对于使用本机内存来说会慢一些)。书中还提到缓存一些静态话的内容,我觉得更好地实践方案是动静分离之后,把静态内容(或者加上实时性不强的动态内容)直接存在http缓存中,再对动态内容进行异步请求。
        web服务器缓存,利用建立的url映射,根据请求的url返回缓存好的响应内容。
        反向代理缓存,我觉得这个其实和web服务器缓存本质上差不多,因为通常在web服务器前面会加一些反射代理服务器作负载均衡、安全性等方面的考虑。比较常用的http缓存是varnish。在这里要小心穿过反向代理,代理服务器最好把用户端的信息如ip加到header中转发给后端服务器,否则有可能后端就看不到一些信息了。
        组件分离,其中一个比较有用的是为一些组件服务器使用独立的二级域名,如存放图片img.test.com,存放用户上传upload.test.com,存放静态文件 static.test.com。这样能把cookie的作用域分离。这里会有利于负载均衡,分布式文件系统(具体未深究)。
        数据库性能优化,对于写操作也许不需要实时更新,有时候可以异步更新、批量跟新、累积更新。查询方面的优化主要是正确使用索引,对于一些不大明朗的语句可以考虑使用explain进行分析。表结构不一定要严格遵照那几个范式,通常情况下通过数据冗余来增强新能是有必要的。读写分离,如写操作都在主库,读操作都在从库。必要时还要进行分库和分表,把压力分解,注意扩展性的考虑。有时候页不一定需要关系型数据库,key-value型数据库性能会比较强大。
        
        大致总结了这些。

展开全文
有用 0 无用 0

您对该书评有什么想说的?

发 表

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读