效率软件开发中的效率软件的效率软件执行的效率。•时间•空间软件开发的效率。效率不要一味地追求程序的效率,应当在满足正确性、可靠性、健壮性、可读性等质量因素的前提下,设法提高程序的效率在优化程序的效率时,应当先找出限制效率的“瓶颈”,不要在无关紧要之处优化先优化数据结构和算法,再优化执行代码有时候时间效率和空间效率可能对立,作出适当的折衷。执行效率系统架构•软硬件环境UnixLinuxWindows•系统框架良好的数据结构•遵循范式•适当的破坏范式Selectuser.dwmcfromuserGroupID(1,2,3,4)高效的程序代码•尽量少的资源•尽量少的时间效率-大数据量DataBase•Oracle•DB2•SQLServer•MySQLOracleDB2SQLServerMySQL效率-大数据量数据库集群Cache•Oraclealtersystemsetdb_keep_cache_size=200mscope=both;altertablextwzbmstorage(buffer_poolkeep);selectSUM(BYTES)/1024/1024fromuser_extentswheresEgment_name='XTWZBM';效率-大数据量Entity•EJB2•EJB3•Hibernate•Ibatis•JDBCEJB2HibernateEJB3IbatisJDBC效率-SQLSQL大小写ORACLE采用自下而上的顺序解析SELECT子句中避免使用‘*‘用EXISTS替代INDISTINCT用UNION-ALL替换UNION尽量使用索引效率-SQL-Oracle索引函数not,,!=ISNULL和ISNOTNULL数据类型转换模糊匹配效率-SQL-OR尽可能的不使用OR•用IN来替换ORSELECT….FROMLOCATIONWHERELOC_ID=10ORLOC_ID=20ORLOC_ID=30SELECT…FROMLOCATIONWHERELOC_ININ(10,20,30);效率-SQL-OR用UNION替换OR•SELECTLOC_ID,LOC_DESC,REGIONFROMLOCATIONWHERELOC_ID=10ORREGION=“MELBOURNE”•SELECTLOC_ID,LOC_DESC,REGIONFROMLOCATIONWHERELOC_ID=10UNIONSELECTLOC_ID,LOC_DESC,REGIONFROMLOCATIONWHEREREGION=“MELBOURNE”效率-SQLORDERBY•ORDERBY中所有的列在索引中•数据库服务器的CPU效率-SQL尽量多使用COMMIT用TRUNCATE替代DELETE效率-SQL使用视图加速查询数据库分区•createtableA(id_NUMBER)partitionbyrange(id_)(partitionpart_01valueslessthan(20)tablespaceTABLESPACE1,partitionpart_02valueslessthan(60)tablespaceTABLESPACE1,partitionpart_03valueslessthan(maxvalue)tablespaceTABLESPACE1);大数据分表存储•按照年月分表•类型分表效率-分页OracleSELECT*FROM(SELECTA.*,ROWNUMROW_NUMFROM(SELECT*FROMKCCKDT)AWHEREROWNUM=10)BWHEREB.ROW_NUM=1MySQL•select*fromtalbelimit0,10效率-分页SQLServer•WITHCategoryAS(SELECTROW_NUMBER()OVER(ORDERBYCategoryIDDESC)ASRowNumber,*FROM[Category])SELECT*FROMCategoryWHERERowNumberBETWEEN1AND10效率-Tree父子结构Tree•递归•层级代码010101010101•0102010201•AJAX异步•Oracleselectt.roleid,t.roledesc,t.parentidfrombase_roletstartwithparentid=0connectbypriorroleid=parentid;效率-并发高性能的服务器、还有高性能的Web容器、高效率的编程语言•UnixLinuxWindows•WebLogicWebSphereJBossTomcat集群•服务器集群•WEB服务器集群效率-并发HTML静态化•实时静态化•增量静态化•定时静态化多媒体服务器分离•图片•视频•音乐缓存•Oscache效率-并发镜像•镜像的技术可以解决不同网络接入商和地域带来的用户访问速度差异负载均衡•硬件四层交换第四层交换使用第三层和第四层信息包的报头信息,根据应用区间识别业务流,将整个区间段的业务流分配到合适的应用服务器进行处理•软件四层交换LinuxVirtualServer效率-编程页面静态化•网站系统全站•应用系统首页缓存•应用系统首页•常用变量,内容效率-编程减少IO操作•减少控制台输出•System.out.println减少异常•当创建一个异常时,需要收集一个栈跟踪效率-编程HttpSession•除必要的用户信息等,禁止使用。效率-编程习惯String•Stringa=newString(“你好”);•Stringa=“你好”;StringBuffer•禁止使用+效率-编程习惯循环•ArrayListalist=newArrayList();•for(inti=0;ialist.size();i++){}•for(inti=0,n=alist.size();in;i++){}效率-编程习惯循环开连接•for(inti=0,n=alist.size();in;i++){Connectionconn=getConnection();…..conn.close();}效率-编程习惯Statement•for(inti=0;i5;i++){stmt.executeUpdate(insertintotest(id_,name_)values(1,2));}PreparedStatement•for(inti=0;i5;i++){pstmt.setInt(1,1);pstmt.addBatch();}pstmt.executeBatch();效率-编程习惯JSP•尽量少的JS引用•减少input类型•择正确的页面包含机制<%@includeefile=”test.jsp”%><jsp:includeepage=”test.jsp”flush=”true”/>jsp:useBeanscope=page|request|session|application效率-编程习惯request.getParameterValues•String[]chks=request.getParameterValues(chk);request.getParameter•request.getParameter(chk_1);效率-编程将页面输出进行压缩•Js压缩•gzip压缩filterdescription/descriptiondisplay-nameGZipFilter/display-namefilter-nameGZipFilter/filter-namefilter-classGZipFilter/filter-class/filterfilter-mappingfilter-nameGZipFilter/filter-nameurl-pattern/*/url-pattern/filter-mapping开发效率中国软件开发效率“世界第一”•美国9000行/年•代码量在400行/月开发效率软件开发过程•根据项目特点选择适当的开发过程•最熟悉的开发过程软件技术框架•最熟悉的框架•简单的就是最好的效率-软件开发过程瀑布式开发•需求分析、设计、编码、测试、维护迭代式开发效率-软件开发过程敏捷开发•注重概念和架构设计,而轻详细设计•业务和客户驱动,而非技术驱动•轻文档,但非无文档效率-软件开发过程做好调研和需求分析做好概要设计,保证整体框架简单可靠及时单元测试规范的代码,良好的注释IDE提高效率自动化方式提高效率及质量效率-开发Entity•EJB2•EJB3•Hibernate•Ibatis•JDBC•IbatisEJB3HibernateEJB2JDBC再见谢谢