想让您的应用更慢么?我们有最好的系能杀手。本文不完全忠实原著,限于本人的知识一定会遗漏大量原著的思想,想看原文请移步。原作者 Andreas Grabner (是个大帅哥)
杀手一 数据库,不要停
常见的问题是在一次请求或者一个事务中进行了过多的查询,有三种现象可以用来识别它们。
1)请求的数据超过所需,比如请求了用户表的所有字段,而不是要在页面上显示的那几个。
2)相同数据被多次请求。这通常发生在同一事物中不同的组件相互独立工作,并需要同一部分数据,它们不知道那些数据可以在context中获得,所以只好再各自查询一次
3)为了得到某一组数据进行多次查询,这通常是因为没有认真的编写复杂的查询语句或者存储过程。
杀手二 同步到死
毫无疑问为了在应用中保护共享的数据被正确的访问,使用同步机制进行保护是必不可少的。但是太多的情况下,研发人员是哟很难过了过度的同步。把大段的处理过程放到了排他的同步段中。通常在低负载的情况下,比如开发环境,性能问题并不浮现出来,但是到了生产环境在高负载的情况下,过度的同步常常会带来严重的性能和可伸缩性的问题。
杀手三 信道上的话痨
有大量的类库使得远程通讯对于所有人来说都是小菜一碟。开发者几乎感觉不到调用远程方法和本地方法有啥区别。由于缺少远程方法调用工作方式的理解,人们经常会忘了每次远程调用都要面对的问题:延迟、[反]序列化、网络传输、内存占用。远程调用的容易使用使得人们过多的使用它从而引起了性能问题。
杀手四 ORM滥用
ORM框架可以帮研发人员容易的从DB中加载对象和把对象持久化。和其他的所有框架一样,ORM框架有众多的配置选项供人配置,不良的配置可以引起严重的性能问题。在使用框架时应该了解它的配置,并且应该了解它底层的工作机制。
杀手五 内存泄露
受控的运行是环境比如JAVA和.net在内存管理上有很大的优势,他们提供了垃圾回收机制。但是GC并不能杜绝内存泄露。被遗忘的对象会一直留在内存中,并最终引起内存泄露,甚至可能引发OutOfMemory的错误。所以当一个对象不再需要的时候,要尽快移除对它的引用。
写的好累,未完待续
to be continued
每个杀手都有对应的解决方案,是单独的文章,原文里有链接