以下为《优化分为编码阶段优化和项目上线后优化,编码阶段优化》的无排版文字预览,完整格式请下载
下载前请仔细阅读文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。
优化
优化分为编码阶段优化和项目上线后优化,编码阶段优化:
编码规范
我们会在编码之前制定统一编码规范,保持项目组内成员编码风格的一致性,同时,也会在规范中制定一些优化策略,比如代码中的sql语句尽量大写,查询时不要用select * ,而是需要哪些字段,就查询哪些字段的信息。
Java代码的规范:
类名首字母应该大写。对于所有标识符,使用驼峰命名法。
(5) 设计一个类时,请设身处地为客户程序员考虑一下(类的使用方法应该是非常明确的)。然后,再设身处地为管理代码的人考虑一下(预计有可能进行哪些形式的修改,想想用什么方法可把它们变得更简单)。
(6) 使类尽可能短小精悍,而且只解决一个特定的问题。
■数量众多的方法涉及到类型差别极大的操作:考虑用几个类来分别实现
■许多成员变量在特征上有很大的差别:考虑使用几个类
(7) 让一切东西都尽可能地"私有"--private。可使库的某一部分"公共化"(一个方法、类或者一个字段等等),就永远不能把它拿出。若强行拿出,就可能破坏其他人现有的代码,使他们不得不重新编写和设计。若只公布自己必须公布的,就可放心大胆地改变其他任何东西。在多线程环境中,隐私是特别重要的一个因素--只有private字段才能在非同步使用的情况下受到保护。
(9) 若不得已进行一些不太雅观的编程,至少应该把那些代码置于一个类的内部。
(10) 任何时候只要发现类与类之间结合得非常紧密,就需要考虑是否采用内部类,从而改善编码及维护工作
(11) 尽可能细致地加上注释,并用javadoc注释文档语法生成自己的程序文档。
(18) 尽量使用interfaces,不要使用abstract类。若已知某样东西准备成为一个基础类,那么第一个选择应是将其变成一个interface(接口)。只有在不得不使用方法定义或者成员变量的时候,才需要将其变成一个abstract(抽象)类。接口主要描述了客户希望做什么事情,而一个类则致力于(或允许)具体的实施细节。
代码优化
1、尽最大努力少New新对象,新对象占用的是宝贵的内存空间。
2、字符串的拼接是一件非常浪费资源的事情,所以如果非要对字符串进行拼接的话,使用stringbuffer而不用string这种形式。
3、对于稀缺资源的使用问题,像io流、数据库连接这种稀缺资源使用后一定要关闭。对于数据库我们会采用数据库连接池,降低与数据库连接的频率。
4、多看数据结构、和算法方面的书,很多非常复杂的算法,前辈们都已经提供了非常简单的算法实现,如果这些东西自己编写程序实现那是一件非常繁琐而且浪费时间的事情,可想效率也不一定很好。
5、如果对于线程安全性没有要求的话,尽量使用线程不安全的类,因为一个类实现线程安全,也就是线程同步,这个是非常耗费系统资源的做法。所以对于线程安全没有要求的情况下,不用线程安全的类。
6、避免无用的空字符串:
如为了避免NullPointerException,新手常把字符串初始化为空字符串,
其实这是非常不好的做法,白白创建一个无用的字符串对象,占用资源。
7、及时清除不再需要的会话:
为了清除不再活动的会话,许多应用服务器都有默认的会话超时时间,一般为30分钟。当应用服务器需要保存更多会话时,如果内存容量不足,操作系统会把部分内存数据转移到磁盘,应用服务器也可能根据“最近最频繁使用”算法把部分不活跃的会话转储到磁盘,甚至可能抛出“内存不足”异常。当会话不再需要时,应当及时调用HttpSession.invalidate()方法清除会话。HttpSession.invalidate()方法通常可以在应用的退出页面调用。
8、尽量使用局部变量,调用方法时传递的参数以及在调用中创建的临时变量都保存在栈(Stack)中,速度较快。其他变量,如静态变量、实例变量等,都在堆(Heap)中创建,速度较慢。另外,依赖于具体的编译器/JVM,局部变量还可能得到进一步优化。成员变量是作用于整个类,即在一个类中的所有方法或内部类都能对其进行使用或修改,当类销毁时此变量才会被销毁;
局部变量是作用于方法体中,即只有在局部变量所在的方法体中能对其进行使用或修改,当方法使用完毕时销毁;
数据库优化
大表拆分小表(按照时间或者类型拆分),区分实时数据表和历史数据表,或者利用分区表
Sql优化
注释使用:在语句中多写注释,注释不影响SQL语句的执行效率。增加代码的可读性;
对于事务的使用:尽量使事务处理达到最短,如果事务太长最好按功能将事务分开执行(如:可以让用户在界面上多几步操作)。事务太长很容易造成数据库阻塞,用户操作速度变慢或死机情况;
尽量减少与数据库的交互次数。如果在前端程序写有循球访问数据库操作,最好写成将数据一次读到前端再进行处理或者写成存储过程在数据库端直接处理;
不要使用SELECT?*这样的语句,而应该明确指出要查询的列减少数据的通讯量并且这样的代码可读性好,便于维护;
尽量避免使用游标:它占用大量的资源。如果需要row-by-row地执行,尽量采用非光标技术,如:在客户端循环,用临时表,Table变量,用子查询,用Case语句等等。如果使用了游标,就要尽量避免在游标循环中再进行表连接的操作;
尽量使用count(1):count函数只有在统计表中所有行数时使用,而且count(1)比count(*)更有效率;
IN和EXISTS:EXISTS要远比IN的效率高。里面关系到全表扫描和范围扫描。几乎将所有的IN操作符子查询改写为使用EXISTS的子查询;
注意表之间连接的数据类型:避免不同类型数据之间的连接;
避免相关子查询:一个列的标签同时在主查询和where子句中的查询中出现,那么很可能当主查询中的列值改变之后,子查询必须重新查询一次。查询嵌套层次越多,效率越低,因此应当尽量避免子查询。如果子查询不可避免,那么要在子查询中过滤掉尽可能多的行;
代码离数据越近越好:所以优先选择Default,依次为Rules,Triggers,?Constraint(约束如外健主健CheckUNIQUE……,数据类型的最大长度等等都是约束),Procedure.这样不仅维护工作小,编写程序质量高,并且执行的速度快;
插入大的二进制值到Image列:使用存储过程,千万不要用内嵌Insert来插入。因为这样应用程序首先将二进制值转换成字符串(尺寸是它的两倍),服务器受到字符后又将他转换成二进制值.存储过程就没有这些动作:方法:
Create?procedure ?p_insert ?as ?insert?into?table(Fimage)? values?(@image),?在前台调用这个存储过程传入二进制参数,这样处理速度明显改善;
Between在某些时候比IN 速度更快:Between能够更快地根据索引找到范围。用查询优化器可见到差别。?select?*?from?chineseresume?where?title?in?('男','女')?Select?*?from?chineseresume?where?between?'男'?and?'女'?是一样的。由于in会在比较多次,所以有时会慢些;
对Where条件字段修饰字段移 内容过长,仅展示头部和尾部部分文字预览,全文请查看图片预览。 areThreads )
connectionTimeout 连接超时
minProcessors 服务器创建时的最小处理线程数
maxProcessors 服务器同时最大处理线程数
URIEncoding URL统一编码
三.Tomcat缓存优化
参数说明
c ompression 打开压缩功能
compressionMinSize 启用压缩的输出内容大小,这里面默认为2KB
compressableMimeType 压缩类型
connectionTimeout 定义建立客户连接超时的时间. 如果为 -1, 表示不限制建立客户连接的时间
[文章尾部最后300字内容到此结束,中间部分内容请查看底下的图片预览]请点击下方选择您需要的文档下载。
以上为《优化分为编码阶段优化和项目上线后优化,编码阶段优化》的无排版文字预览,完整格式请下载
下载前请仔细阅读上面文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。