本文来自于Bernd Greifeneder总结。旨在提醒自己养成习惯。
问题一:过多的数据库调用
在每次请求/事务中存在过多的数据库查询。
在一次事务上下文中所请求的数据比实际需要的数据多出很多。比如说:请求所有的账
户信息而不是仅仅查询出当前需要显示的信息。
多次请求同样的数据。这种情况通常发生在相同事务中的不同组件之间是彼此独立的,
而每个组件都会请求同样的数据。我们并不清楚当前上下文中已经加载了哪些数据,最
后只得多次发出同样的查询。
发出多个查询语句以获得某一数据集。通常这是由于没有充分利用到复杂的SQL 语句、
存储过程等在一次批处理中获取需要的数据所导致的。
问题二:过多地使用同步
同步对于应用中共享数据的保护来说是至关重要的举措。在高负载或是产品环境下过度使用
同步(如在超大段代码中使用同步)会导致严重的性能与可伸缩性问题。
问题三:过度使用远程调用
很多库都使用了远程通信。每一次远程调用都会涉及到延迟、序列化、网络堵塞以及内存使用
等问题。如果没有经过深思熟虑而盲目使用这些远程技术就会导致严重的性能与可伸缩性问题。
问题四:错误地使用对象关系映射
对象关系映射为开发者解决了很多负担,比如从数据库中加载对象以及将对象持久化到数据库
中。但对象关系映射有很多配置选项需要优化,错误的配置与不正确的使用都会导致始料不及的性能
问题。在使用对象关系映射框架前,请务必保证熟悉所有的配置,如果有机会,请深入到所用框架的
内核,这样使用起来才有保障。
问题五:内存泄漏
托管的运行时环境(如Java 和.NET)可以通过垃圾收集器进行内存管理。但垃圾收集器无法
避免内存泄漏问题。“被遗忘”的对象依旧会占据着内存,最终将会导致内存泄漏问题。当对
象不再需要时,请尽快释放掉对象引用。
问题六:使用有问题的第三方代码/组件
没有人会从头编写应用的全部功能。我们都会使用第三方程序库来加快开发进程。这么做不
仅会加速产出,也增加了性能上的风险。虽然大多数框架都具有良好的文档并且经过了充分
的测试,但没人能够保证这些框架在任何时候都会像预期的那样好。因此,在使用这些第三
方框架时,事先一定要做好充分的调研。
问题七:对稀缺资源的使用存在浪费的情况
内存、CPU、I/O 以及数据库等资源属于稀缺资源。在使用这些资源时如果存在浪费的情况
就会造成严重的性能与可伸缩性问题。比如说,有人会长时间打开数据库连接而不关闭。连
接应该只在需要的时候才使用,使用完毕后就应该放回到连接池中。我们经常看到有人在请
求一开始就去获取连接,直到最后才释放,这么做会导致性能瓶颈。
问题八:膨胀的Web 前端
由于现在的 Web 速度越来越快,用户的网络体验也越来越好。在这个趋势下,很多应用的
前端都提供了太多的内容,但这么做会导致差劲的浏览体验。很多图片都太大了,没有利用
好或是错误地使用了浏览器缓存、过度地使用JavaScript/AJAX 等,所有这一切都会导致浏览
器的性能问题。
问题九:错误的缓存策略导致过度的垃圾收集
将对象缓存在内存中可以避免每次都向数据库发出请求,这么做可以提升性能。但如果缓存
了太多的对象,或是缓存了很多不常使用的对象则会将缓存的这种优势变成劣势,因为这会
导致过高的内存使用率及过多的垃圾收集活动。在实现缓存策略前,请想好哪些对象需要缓
存,哪些对象不需要缓存,进而避免这类性能与可伸缩性问题。
问题十:间歇性问题
间歇性问题很难发现。通常这类问题与特定的输入参数有关,或是发生在某个负载条件下。
完全的测试覆盖率及负载与性能测试能在这些问题产生前就发现他们。
问题十一:尽量减少http连接数
减少单个PV的http连接数,肯定可以增加单台服务器的用户负载数。减少Http连接数的具体
方法是减少没必要的iframe使用,合并js文件,css文件,和一种常见的方法---合并Css小背景图
(图片都被合并成了一张大图,然后用Css的Background-positioin属性控制显示背景图片的位置)
通过css控制在页面上单独显示每一个小图。这样每一个用户访问就相当于减少了n-1个http连接数,
这对于访问量大的网站来说,吞吐量的提升是显而易见的。
…………
分享到:
相关推荐
为了帮助读者更好地利用SQL Server 2008的强大功能,《Inside Microsoft SQL Server 2008 T-SQL Programming》还提供了一系列性能优化技巧和最佳实践建议: - **查询优化**:包括如何分析查询计划、识别性能瓶颈、...
### 关于《Beginning Microsoft SQL Server 2008 Programming》的知识点总结 #### 书籍概述 本书《Beginning Microsoft SQL Server 2008 Programming》由Robert Vieira编写,旨在为初学者提供一个全面且深入的SQL ...
### 《Professional SQL Server 2005 CLR Programming》核心知识点概述 #### 一、SQL Server 2005与CLR集成技术概览 - **CLR(Common Language Runtime)集成**:CLR是.NET Framework的核心组件之一,它为.NET程序...
本书《Programming Windows Server 2003》深入探讨了Windows Server 2003中的各种新技术和功能,包括.NET Framework 1.1、IIS 6、COM+ 1.5等。通过对这些技术的实际应用案例分析,本书不仅适合已经熟悉.NET概念的...
《Beginning SQL Server 2005 Programming》是一本专为SQL Server开发人员编写的入门级教材,旨在帮助初学者掌握SQL Server 2005的基础编程技能。本书由Robert Vieira撰写,并由Wiley Publishing出版。作为一本详尽...
根据提供的文件信息,“Professional SQL Server 2005 Programming”是一本由Robert Vieira撰写的书籍,该书详细介绍了如何使用Microsoft SQL Server 2005进行专业编程。以下是对该书中涉及的关键知识点的总结与扩展...
- **性能优化**:对代码进行优化,减少资源消耗,提高响应速度。 - **可维护性**:采用模块化设计,便于后期维护和扩展。 #### 四、总结 本书《Web服务器编程》深入探讨了服务器端处理的关键技术,包括CGI编程、...
《Inside Microsoft SQL Server 2008 T-SQL Programming》是由Itzik Ben-Gan等多位专家共同编著的一本书,主要针对的是SQL Server 2008版本的T-SQL编程技术。T-SQL是Transact-SQL的简称,它是微软为SQL Server设计的...
总结来说,`Java_Programming_EchoServer_Thread_code`是一个关于Java网络编程和多线程的示例,通过创建一个线程化的Echo服务器,展示了如何高效地处理并发客户端连接。这个知识对于深入理解Java高级编程和网络服务...
#### 六、总结 《深入微软SQL Server 2008:T-SQL编程》这本书深入浅出地介绍了如何利用T-SQL编程技术来高效管理和操作数据。通过掌握这些技术,开发者可以构建出更加灵活、可靠且高性能的应用程序。无论您是初学者...
- **ISAPI扩展**:IIS6支持ISAPI(Internet Server Application Programming Interface)扩展,允许开发者创建自定义的Web服务功能。 - ** metabase配置**:元数据库(Metabase)存储了IIS的配置信息,使得管理员...
它不仅涉及功能性的验证,还包括性能、安全性和兼容性测试。通过全面的测试,可以尽早发现潜在的错误,确保应用程序在各种情况下都能正常运行。 #### 防御未预期使用 应用程序可能会面临超出设计范围的使用场景,...
接下来是《Microsoft.Press.Inside.Microsoft.SQL.Server.2005.T-SQL.Programming.Jun.2006.chm》,这本书则更侧重于T-SQL的编程方面。除了查询,T-SQL也是创建、修改和管理数据库对象如表、视图、索引的关键工具。...
CICS System Programming Reference 为开发者提供了全面深入的技术指导,不仅有助于理解和掌握 CICS Transaction Server for OS/390 的核心功能和操作方式,还为开发者解决实际问题提供了有力的支持。通过对文档的...