web开发优化总结(java)

面试被说成一直做功能的。看他对我没意思的样子我也没有反驳,而且页面反应慢难道不算是一个BUG吗。晚上没事总结一下吧。


一.、数据库  web服务器主要搞的就是数据库,对数据库进行增删改查,所谓的大网站就是这个过程复杂而已。

1. 索引,索引就是将索引的列缓存到内存中,由于内存的速度快就变相的提高了查询的速度。主键也是索引的一种,它还实现了列值的唯一性。

2. 存储过程,存储过程可以将多个语句等放到一个文件存储在数据库内,可以减少客户端SQL查询次数。在一张表的插入时依赖别的表数据同时SQL语句不好实现时使用。

3. 不使用约束,约束在执行增删改时会去检查约束,多做了一步,而且通常web代码会维护约束的。如果一点要加,那就将依赖的那列加上索引,原因见第1条。

4. 分库,分库通常在数据非常多的时候使用。原理是安装确定的范围将数据存放到不同的数据库内。如:用户编号1-1w 放到DB1, 1w1-2w放到DB2。

5. 选择合适的数据库存储引擎。默认的MySQL数据库引擎为InnDB,这个引擎各项表现都很平衡,但是性能不怎么样。


二、Java

1. JVM,JVM是Java代码的执行体,他的执行方式直接影响java执行速度。

(1). 普通JRE的JVM的垃圾回收都是单线程的,可以改成多线程回收。

(2). JVM内存区有新生代和老生代的区别,老生代回收的次数少,可以调整适合的比例减少垃圾回收的时间。

(2). Java代码默认是在使用少时解释执行,多时会编译成本地文件执行。如果内存多性能要求高,可以改成只使用编译执行。

(3). 通常在以64位JVM性能好些,而且还可以分配更多的内存。

2. JNI,JNI是JAVA的本地代码接口。就是使用Java调用本地的代码。本地的代码不需要解释执行,也不像JVM编译本地时会优化什么的,所以非常适合执行计算需求高的代码,但是不建议频繁调用。如:二维码识别

3. 单例,单例不仅保存了对象的唯一性还可以减少对象的创建次数。

4. 池,池是资源的存放地,使用时拿出来,不用了再放回去,这样的重复利用减少了对象的创建等。如:数据库连接池,如果数据库连接一直不关闭还可以减少连接建立的次数。

5. 未来模式,在一个长时间执行代码后需要另一个无关联的长时间计算结果时,可以开另一个的线程去执行后面的计算。如:先获得文件然后输出数据库查询结果,可以开一个线程查询数据库,Hibernate的懒加载好像不是未来的,是需要时获取。

6. 锁,对于需要同步的东西使用锁,不用同步方式,锁更灵活且性能更好。如:读写锁

7. 批量处理,在操作速度慢的IO时可以批量操作,减少调用次数。如:数据库批量添加,文件缓存写。

8. 静态资源,静态资源建议使用服务器的默认Servlet处理。

9. 缓存,对频繁读取的可变内容进行缓存。如:数据库查询结果,小文件。

10. 数据结构,不同的结构有着不同的属性,适合的才是最好的。如:频繁增删的使用链式存储,频繁查找的可以使用数组。


三、HTML+JavaScript

1. 需要时加载,当内容需要用户触发、数据多、触发几率小的时候可以使用异步的加载方式进行。

2. 图片懒加载,和上面的差不多,当一个页面太长图片太多的时候,可以先将浏览器窗口显示出来的图片第一时间加载,没显示的图片在需要显示的时候再加载。

3. 脚本优先执行,用户在意的是稳定和流畅度,脚本执行时优先执行与页面显示和功能相关的代码,其它的代码可以在页面稳定显示后执行。


吐槽:get、set、框架不都是浪费性能的!就像乔帮主好不容易薄了1毫米,最后又被保护壳加上去了。

尾:目前只想到这些,欢迎拍砖指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值