构建高性能web站点-读书笔记一

构建高性能web站点-读书笔记一

请求的过程中划分的几部分时间

  • 数据在网络上传输的时间

  • 站点服务器处理请求并生成响应数据的时间

  • 浏览器本地计算和渲染的时间

数据在网络上传输的时间

一般分为两部分,客户端发送请求经过网络到达服务端及服务端回应数据经过网络到达客户端,统称为响应时间,其决定因素为发送的数据量网络带宽

站点服务器处理请求并生成响应数据

每秒处理请求数(吞吐率)一般作为衡量服务器的性能标准。

浏览器本地计算和渲染时间

会影响的因素并发策略、样式渲染方式、脚本解释器的性能、页面大小、页面组件数量、页面组件缓存状态、页面组件域名分布和域名DNS解析等。

常见的优化性能方式

增加带宽

简单、直接。延伸出来的概念却是,当前的站点使用了多少带宽?带宽用到哪里去了?如何计算站点当前和未来可预见的带宽?带宽增加下载速度会增加吗?使用独享和共享带宽的本质是神马?如何节省带宽?

减少网页中的http请求数

一个网页包含了多个组件,每个组件都需要下载、计算、渲染,所以常见的使用下面场景切入

  • 数据简介的页面,使用较少的图片和脚本

  • 多个图片合并为一个文件,使用CSS背景偏移技术

  • 合并js和css

  • 使用浏览器的cache策略,减少重复下载

加快服务器脚本的计算速度

例如PHP,使用代码缓存机制,APC等,需注意的是,代码缓存机制适合不同场景的应用吗?

使用动态内容缓存

将动态结果和html输出结果缓存起来,在一段时间内,直接输出缓存内容,不在进行动态内容的计算。那么使用了缓存,将会带来的问题是成千上万的缓存文件如何保持、缓存命中率如何实现?缓存过期策略如何设计?在分布式的站点上如何缓存动态内容?

数据缓存

在一些特殊的字段上时,使用数据缓存,提高灵活性和命中率及性能要求

动态内容静态化

将生成的html输出直接保存为静态文档文件在服务器的硬盘上

选择适合的web服务器软件

根据应用的场景选择适合的web服务器软件,常见的apache、nginx等

页面组件分离

根据应用的类型、大小、下载量、服务器资源等,合理的分配组件的存放位置,势必提高应用的响应。比较常见的就会图片、文件单独存放在静态资源服务器上。

合理部署服务器

根据应用的场景部署合理的服务器,例如地区性、运营商的选择等

使用负载均衡

即将流量合理的分配到更多的服务器上。常见的手法有http重定向,dns轮训解析、反向代理服务器调度、lvs组件集群等。疑问是它们之间的区别?及是否实现高可用、是否实现规模扩展等。

优化数据库

优化数据库表结构的设计,设计良好的表结构可以降低后期进行横向扩展及负载均衡的难度。降低数据库创建和销毁的次数,减少频繁连接和释放导致的数据访问等待时间加长,合理的使用索引、数据库引擎。

考虑可扩展性

以上的所有点,都可以进行可扩展的考虑,保证应用具有高扩展性,在增加主机节点的时候,实现平滑的升级

减少视觉等待

该部分主要是从人类心理角度考虑、涉及人机交互的相关知识。比如youtube的,在打开一个新页面的时候,页面顶部会有一个加载的进度条,提醒用户,这就是一个很好的例子

以上内容摘自:《构建高性能web站点》 郭欣 著

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109045.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • velocity 语法 null[通俗易懂]

    velocity 语法 null[通俗易懂]相信这个问题是很多使用Velocity的朋友所经常碰到的,大家可能非常期望下面这样的代码能够运行:  #if($foo==null)  …  #end  实际上这段代码会报错。这是因为Velocity中对null的支持比较特别。总统上说,判断是否为null有下面几种方法:  1.#if(!$foo)判断$foo为空,判断非空为#if($foo)  2.使用#ifnull()…

    2022年7月14日
    19
  • Python:利用python代码编程实现将视频的avi格式转换为MP4格式

    Python:利用python代码编程实现将视频的avi格式转换为MP4格式​Python:利用python代码编程实现将视频的avi格式转换为MP4格式目录利用python代码编程实现将视频的avi格式转换为MP4格式T1、ffmpeg命令在dos内实现T2、python代码编程实现利用python代码编程实现将视频的avi格式转换为MP4格式T1、ffmpeg命令在dos内实现ffmpeg-y-iF:\File_Anaconda\project_py37\RealTimeImageAnimation\output\FamilyBa_HuGe.a

    2022年10月17日
    0
  • mybatis-log-plus 激活码【2022最新】2022.03.03

    (mybatis-log-plus 激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年4月2日
    459
  • 运维标准化工作流程

    运维标准化工作流程运维标准化工作流程:http://wenku.baidu.com/link?url=bt1ZVijjS35mSSMoDbs4rgWtrG0zBY8a-zuIKPfi5TGehD6XHD8RzscniHsOtODaKkqCG7ba5DeUHLS6sqes03JdEdOYEK1OPviwsl9wv0_ 转载于:https://blog.51cto.com/jackysz…

    2022年5月26日
    37
  • python的sorted函数「建议收藏」

    python的sorted函数「建议收藏」sorted很简单,没太多好写的,只是给自己做个笔记。sorted接受三个参数,返回一个排序之后的list。第一个接受一个可迭代的对象(因为sorted实现了迭代协议,所以接受的参数不一定需要l

    2022年7月5日
    21
  • 引入js和css文件的总结

    1.用script标签引入javascript时,浏览器对于javascript的加载某些是并行的,某些是串行的,如IE8,Chorme2和firefox3都是串行加载的。2.charset编码也就是

    2021年12月20日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号