`
sinykk
  • 浏览: 357086 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Web应用的性能优化思路——找到瓶颈

    博客分类:
  • java
阅读更多

原文 http://www.oschina.net/bbs/thread/8639

 

 

瓶颈是什么?

一条4车道的公路,运行非常顺畅,突然出了点事故,事故车导致某个地方只剩下1车道,然后就开始堵车,因为四辆车同时塞向一个车道里。把这个事故清除了,故障车拖走了,道路会开始恢复了通畅。

这个道理谁都懂,但偏偏有些傻瓜交警去把4车道变成8车道,但却不清理事故路段。

一个Web应用,不管是何种语言开发,粗略的结构无非是三层:

1. 页面模板

可以是JSP、ASP、PHP等页面技术,根据数据生成最终的HTML页面,性能关键指标只有一个,页面的渲染速度。综合各种页面技术而言,渲染速度相差不会太大,10倍以内。

2. 业务逻辑

用于根据业务需要将数据库中的数据读取到内存中,以便通过页面模板渲染成HTML页面。这里面可能还包括缓存、连接池等技术。

3. 数据库

就是数据库,负责执行SQL查询并返回查询结果。

我们假设用户访问一个页面,也就是请求一个URL地址,然后得到内容,所需要的时间是3秒钟。其中大部分时间可能用在网络传输上,而真正页面执行并生成HTML内容所需的时间是很小的,这里假设需要100毫秒。

相当于用户花了两秒多钟在传输数据上,这部分时间如果能缩减,可以大大提升访问的速度,但是这部分一般也难以提升了,因为取决于用户本身的网络情况,服务器的网络情况以及中间整个路由的情况。对于一个网站来说,能做的就是尽可能的提升服务器的带宽,或者使用CDN来减少中间路由环节,很不幸的是,这个成本很高。

好吧,前面提到的更多是非技术因素,假设你已经耗费巨资解决了这个问题,然后突然发现网络太快了,可是服务器顶不住了,生成一个页面居然要100毫秒,才几十个并发用户就差点要把服务器搞崩溃了。

于是来到了本文的重点部分——找出应用的性能瓶颈。

前面我们提到的结构中的三层:页面模板,业务逻辑和数据库,根据经验值,在这100毫秒中,三个部分占用的时间差不多为:页面模板(5%)、业务逻辑+数据库(95%)。

几个准则:

1. 没必要去优化页面模板,这都是一些很成熟的技术,就算你好不容易提升了10%的性能,这10%在整个页面的执行过程中只占了0.5%的比例,微乎其微,等于是前面例子中的4车道变8车道的傻瓜,我们不要去充当傻瓜。

2. 一般瓶颈所在以及相应处理办法

  • 数据库连接:使用连接池来减少连接次数
  • 重复的数据库查询:使用缓存来避免重复的数据库查询
  • 慢查询:使用索引来提升查询速度,使用连接查询替换子查询等

简简单单的三条,里面却包含了很深的功夫,特别是在数据库查询优化上。

你必须在充分解决了这些应用程序所属的性能瓶颈之后,再去考虑系统级别的优化。

一些常用系统级别优化包括:

1. 静态文件和动态页面分开处理
2. 应用服务器的集群
3. 数据库的集群

不要本末倒置,一个性能很差的应用程序,你就算集群了100个节点,也不会有什么效果。

所以Web网站优化三部曲:应用程序优化、系统结构优化、网络优化。

本文适合菜鸟阅读,因为我也是菜鸟。

不说了,等待拍砖。

分享到:
评论

相关推荐

    基础-Web应用的性能优化思路——找到瓶颈【转】.pdf

    Web应用性能优化是一个复杂而重要的任务,旨在提升用户体验和服务器效率。本文主要关注找到性能瓶颈并提出相应的优化策略。性能瓶颈通常是指应用中限制整体性能的关键环节,优化这些环节能够显著提升系统的整体效能...

    解决海量数据的新思路——分布式数据库收集.pdf

    分布式数据库是一种应对海量数据处理的有效解决方案,它将...然而,设计这样的系统需要考虑诸多因素,包括SQL语句的解析、数据分布策略、并发控制以及性能优化等,这些都是实现高效分布式数据库必须面对的技术难题。

    渲染篇 3:对症下药——DOM 优化原理与基本实践(1).md

    随着Web应用的复杂度和对用户体验要求的不断提升,前端性能优化变得愈发重要。优化不仅仅关乎加载速度和运行效率,还直接关系到用户的使用满意度和留存率。因此,掌握性能优化的知识和技巧,已经成为前端开发者的...

    ASP.NET源码——[整站程序]Thumbstudio申博工作室原创全站.zip

    - **性能优化**:分析代码效率,查找可能的瓶颈,比如数据库查询优化、缓存策略等。 - **错误处理和日志记录**:查看程序如何处理异常和记录日志,以备排查问题。 - **部署和配置**:理解应用程序的部署过程,包括...

    基于事件驱动和异步通信体系结构的Web服务器设计

    ### 基于事件驱动和异步通信体系结构的Web服务器设计 #### 一、引言 ...总之,事件驱动和异步通信技术为构建高性能Web服务器提供了一种新的思路,有助于解决当前Web服务器面临的高并发请求处理难题。

    基于WebServices的空间信息资源管理研究

    本文通过对基于WebServices的空间信息资源管理的研究,提出了一种有效的解决方案,不仅解决了WebGIS在访问空间数据时面临的瓶颈问题,还提高了系统的整体性能。自适应双层网格索引模型作为其中的关键技术之一,通过...

    ASP网站CMS程序源码——php168整站繁体中文版实例开发.zip

    4. **Web应用安全**:通过源码研究如何实现用户认证、授权,防止SQL注入、XSS攻击等安全问题。 5. **前端开发**:查看CMS的前端页面,学习HTML、CSS和JavaScript的实践应用,以及如何实现响应式布局和交互效果。 6...

    基于 Web 的压力测试作为主要研究方向,以《ASP数据库系统开发实例导航》书中介绍的“在线考试系统”作为对象,以美国 Mercury 公司生产的 LoadRunner8.1软件为工具进行外部性能压力测试。

    测试结果的【分析和汇总】则包括识别性能瓶颈、确定系统可扩展性和优化建议。 课程设计中还提到了【驱动的编写】,这可能指的是创建LoadRunner中的脚本,这些脚本模拟用户行为并触发系统操作。通过编写和执行这些...

    httpd 测试工具

    - **优化验证**:实施性能优化措施后,再次进行测试以验证效果。 ##### 2. 压力测试 - **稳定性验证**:长时间运行httperf,观察Web服务器是否能够稳定运行。 - **故障注入**:故意制造高负载,测试Web服务器在...

    携程大前端框架NFES-携程魏晓军.pdf

    - **TWA(Techless Web Application)**:一种新兴的技术方向,旨在简化Web应用程序的开发流程。 - **SPA(Single Page Application)模式下的首屏性能问题**:由于SPA模式加载整个应用逻辑导致的性能瓶颈。 - **原...

    RAMCloud paper

    它的设计思路不仅解决了当前大规模数据处理中的性能瓶颈问题,还为未来的数据中心提供了重要的参考模型。随着硬件技术的发展和应用需求的增长,RAMCloud有望成为未来高性能存储领域的关键技术之一。

    Accelerated.DOM.Scripting.with.Ajax.APIs.and.Libraries

    - 如何避免DOM操作中的性能瓶颈。 - Ajax请求的最佳实践,例如错误处理、数据格式的选择等。 - 如何优化Ajax应用以提高响应速度和用户体验。 5. **案例分析** - 实际项目中DOM和Ajax结合使用的真实案例。 - ...

    loadrunner 三大组件详细操作手册

    综上所述,LoadRunner作为一款功能强大的性能测试工具,其三大组件——Vuser、Controller和Analysis分别负责脚本的开发与优化、测试场景的设计与监控以及结果的分析。通过对这些组件的理解与运用,可以有效地评估并...

    what is html5

    过去,Flash等插件是实现动画、视频播放等功能的主要手段,但它们往往带来兼容性问题和性能瓶颈。HTML5通过引入`<video>`、`<audio>`等元素以及Canvas API,实现了无需第三方插件即可在网页中嵌入多媒体内容的能力,...

    jsp个人博客系统设计毕业论文

    它提供了强大的编辑器、调试器以及项目管理工具,是开发Java Web应用的理想选择。Dreamweaver则是一款网页设计软件,专为设计和编码而优化,适用于快速创建和修改HTML、CSS和JavaScript代码。 #### 数据库:SQL ...

    Java实现数据库的链接.pdf

    《Java实现数据库的链接》这篇文档主要探讨了在Web技术广泛应用背景下,如何高效地管理和使用数据库连接,以优化网络应用中的数据库操作。本文档提出了一个关键解决方案——使用数据库连接池来提升系统效率。 ...

    MyCode

    除此之外,性能分析工具如JProfiler、VisualVM等,能帮助我们定位程序瓶颈,进行性能优化。 在"MyCode"这个主题中,我们可以深入到各个领域,包括但不限于: 1. 源码阅读技巧:如何有效地阅读和理解源码,如何从...

Global site tag (gtag.js) - Google Analytics