瓶颈是什么?
一条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应用性能优化是一个复杂而重要的任务,旨在提升用户体验和服务器效率。本文主要关注找到性能瓶颈并提出相应的优化策略。性能瓶颈通常是指应用中限制整体性能的关键环节,优化这些环节能够显著提升系统的整体效能...
分布式数据库是一种应对海量数据处理的有效解决方案,它将...然而,设计这样的系统需要考虑诸多因素,包括SQL语句的解析、数据分布策略、并发控制以及性能优化等,这些都是实现高效分布式数据库必须面对的技术难题。
随着Web应用的复杂度和对用户体验要求的不断提升,前端性能优化变得愈发重要。优化不仅仅关乎加载速度和运行效率,还直接关系到用户的使用满意度和留存率。因此,掌握性能优化的知识和技巧,已经成为前端开发者的...
- **性能优化**:分析代码效率,查找可能的瓶颈,比如数据库查询优化、缓存策略等。 - **错误处理和日志记录**:查看程序如何处理异常和记录日志,以备排查问题。 - **部署和配置**:理解应用程序的部署过程,包括...
### 基于事件驱动和异步通信体系结构的Web服务器设计 #### 一、引言 ...总之,事件驱动和异步通信技术为构建高性能Web服务器提供了一种新的思路,有助于解决当前Web服务器面临的高并发请求处理难题。
本文通过对基于WebServices的空间信息资源管理的研究,提出了一种有效的解决方案,不仅解决了WebGIS在访问空间数据时面临的瓶颈问题,还提高了系统的整体性能。自适应双层网格索引模型作为其中的关键技术之一,通过...
4. **Web应用安全**:通过源码研究如何实现用户认证、授权,防止SQL注入、XSS攻击等安全问题。 5. **前端开发**:查看CMS的前端页面,学习HTML、CSS和JavaScript的实践应用,以及如何实现响应式布局和交互效果。 6...
测试结果的【分析和汇总】则包括识别性能瓶颈、确定系统可扩展性和优化建议。 课程设计中还提到了【驱动的编写】,这可能指的是创建LoadRunner中的脚本,这些脚本模拟用户行为并触发系统操作。通过编写和执行这些...
- **优化验证**:实施性能优化措施后,再次进行测试以验证效果。 ##### 2. 压力测试 - **稳定性验证**:长时间运行httperf,观察Web服务器是否能够稳定运行。 - **故障注入**:故意制造高负载,测试Web服务器在...
- **TWA(Techless Web Application)**:一种新兴的技术方向,旨在简化Web应用程序的开发流程。 - **SPA(Single Page Application)模式下的首屏性能问题**:由于SPA模式加载整个应用逻辑导致的性能瓶颈。 - **原...
它的设计思路不仅解决了当前大规模数据处理中的性能瓶颈问题,还为未来的数据中心提供了重要的参考模型。随着硬件技术的发展和应用需求的增长,RAMCloud有望成为未来高性能存储领域的关键技术之一。
- 如何避免DOM操作中的性能瓶颈。 - Ajax请求的最佳实践,例如错误处理、数据格式的选择等。 - 如何优化Ajax应用以提高响应速度和用户体验。 5. **案例分析** - 实际项目中DOM和Ajax结合使用的真实案例。 - ...
综上所述,LoadRunner作为一款功能强大的性能测试工具,其三大组件——Vuser、Controller和Analysis分别负责脚本的开发与优化、测试场景的设计与监控以及结果的分析。通过对这些组件的理解与运用,可以有效地评估并...
过去,Flash等插件是实现动画、视频播放等功能的主要手段,但它们往往带来兼容性问题和性能瓶颈。HTML5通过引入`<video>`、`<audio>`等元素以及Canvas API,实现了无需第三方插件即可在网页中嵌入多媒体内容的能力,...
它提供了强大的编辑器、调试器以及项目管理工具,是开发Java Web应用的理想选择。Dreamweaver则是一款网页设计软件,专为设计和编码而优化,适用于快速创建和修改HTML、CSS和JavaScript代码。 #### 数据库:SQL ...
《Java实现数据库的链接》这篇文档主要探讨了在Web技术广泛应用背景下,如何高效地管理和使用数据库连接,以优化网络应用中的数据库操作。本文档提出了一个关键解决方案——使用数据库连接池来提升系统效率。 ...
除此之外,性能分析工具如JProfiler、VisualVM等,能帮助我们定位程序瓶颈,进行性能优化。 在"MyCode"这个主题中,我们可以深入到各个领域,包括但不限于: 1. 源码阅读技巧:如何有效地阅读和理解源码,如何从...