当前位置:首页 > 客户案例 > 正文

代码优化(代码优化时所依据的是)

作为一个写了8年代码的老程序员,我想和大家分享一下我个人写代码和优化代码的经验。

我也带走了很多人。我一直坚持传道授业解惑的取人原则,坚持教人必须教的初心,一直在努力尝试各种取人的方式方法。在遇到特殊问题之前,我专门讲解了如何优化,对应的思路是什么,没有形成规范的记录。现在,当我有时间的时候,我会记录和总结它们。

常用编程语言:PHP,Javascript,Vue,Java

通用开发框架:Laravel、SpringBoot

常见中间件:Redis、Kafka

常用数据库:Mysql,MongoDB

常用服务器:Nginx

要做好代码优化,有一个重要的前提:基本功扎实!

一、规范

这里涉及到一个编码标准。不需要太苛刻,但必须苛刻。俗话说,没有规矩,就做不成方圆。有了规则,你自己的编码就会遵循一个规则,所以总有一个顺序在那里。

代码可以是公司的代码,也可以是个人制定的代码。在公司团队开发时,一般团队会给出某一种编程语言的开发规范。每个人都遵循规范。一方面统一管理编码行为,另一方面可以快速定位问题。

二、代码注释

对于一个简单或复杂的功能开发,代码注释是非常重要的。而且往往有些人在开发的时候不屑或者不愿意写评论。其实这样会给团队的其他人带来很多麻烦,因为你不能保证你的模块或者你的代码永远不会出错。当你的模块出了问题,需要别人修改的时候,你得到的是一堆天书代码。你觉得你的队友会是什么样的心情?

清晰的代码注释不仅可以帮助你在编写注释时理清一些逻辑和思路,还可以为未来做打算。也许你这段代码很久都没有出现任何问题,但是你不能保证哪个时候会出现BUG。如果前面的评论已经很清楚了,对你重新整理这段代码的逻辑会很有帮助。

第三,在编码过程中要时刻想着优化。

大部分人只是想按照工期完成功能开发,所以很多时候导致这个功能可以运行的很好,但是还可以优化,他选择了忽略。作为程序开发人员,压榨最后一点性能是编程的信条,要有把一件事做到极致的追求精神!

会比较费时费力,如果省时省力,然后如果有后续问题再优化当前代码段。

其他人可能会有一种误解,认为复杂的函数需要优化,不!只要你写了代码,就有可能优化它,不管函数有多复杂!

四。代码优化示例

1.额外的中间变量可以省略。

在编程过程中,如果你很自觉,就会主动回避。如果平时没有这个意识和习惯,很容易产生太多无用的中间变量。(这需要与代码运行相关的内存管理知识,比如对象、全局变量、局部变量、堆和栈)

//比如我这里只是想要打印一下a,但是我做了一个赋值操作,而这个赋值操作后面都没有用到var a = 1;var b = a;console.log(a);//又比如写循环处理时经常遇到临时变量问题function badFunc() { for (int i=0; i<10; i++) { Object a = new Object(); //业务处理 }}function goodFunc() { Object a = null; for (int i=0; i<10; i++) { a = new Object(); //业务处理 }}//有时程序员也会写出来这样的代码,这样会可能产生重复计算问题for (int i = 0; i < list.size(); i++){...}建议替换为:for (int i = 0, length = list.size(); i < length; i++){...}

2.写函数的时候,优先考虑参数验证和重要判断。

1.大部分人会先检查参数,但是要检查的参数的顺序可能不关心或者很少关心。这里有一个原则“重要的先查,问题大的先查”

2.在执行逻辑之前做所有需要预处理的事情。

2.1:badMultiCreate就是95%的程序员都会这样写,因为逻辑简单,也符合通常的编码惯性——过程思维。

2.2:goodMultiCreate也实现了批量插入,但是做了代码优化,避免了几个问题。

2.2.1:根据badMultiCreate实现逻辑,如果有1000个条目,如果第999条可能有问题,那么之前已经执行了998次数据库操作,最后全部丢弃。

2 . 2 . 2:good multi create中的序列号被一次又一次的获取,而GoodUltimate根据需要获取一次offset,然后将它们一个一个的回收分配。

2.2.3:badMultiCreate是逐个保存的,而goodMultiCreate是通过批量插入的方式只操作数据库一次。

/*** 举个例子,比如设计一个批量插入函数,要求对于每个数据包做格式校验检查,每条数据生成好流水号* 以下示例一个伪代码* 1、假设流水号增量为1* 2、假设单条数据保存方法为save,一次性插入多条为saveMulti*///不好的实现function badMultiCreate(List<Map> data) { try { for(Map dt: data) { //检查数据包每个参数格式 if (!check()) { throw new Exception("数据出现格式问题"); } //生成流水号 String seqno_id = makeSeqno(); dt.put(id, seqno_id); //保存单条数据 Entity.save(dt); } } catch(Exception e) { Log.info(e.message); return {code:500, message: e.message}; } return {code:200, message: 'ok'};}//好的实现function goodMultiCreate(List<Map> data) { for(Map dt: data) { //检查数据包每个参数格式 if (!check()) { return {code:500, message: "数据出现格式问题"}; } //生成流水号 String seqno_id = makeSeqno(); dt.put(id, seqno_id); Entity.save(dt); } //获取数据的条数 int size = data.size(); //一次性获取size跨度的流水号 int lastSeqnoNumber = makeSeqno(size); //循环分配流水号 for(Map dt: data) { dt.put(id, --lastSeqnoNumber); //每次流水号减一 } try { //批量插入数据 Entity.saveMulti(dt); } catch(Exception e) { Log.info(e.message); return {code:500, message: e.message}; } return {code:200, message: 'ok'};}

3.避免过多的数据库折腾。

3.1:所有数据库都是磁盘操作。在任何情况下,IO操作都会影响效率。所以如果没有必要,尽量不要折腾数据库。

//比如下面这段伪代码,注册用户成功之后,返回用户id。假设save方法返回的就是注册成功之后的id,但是下面那段代码又再次查询了一下数据库。String user_name = "zhangsan";//查询用户名是否已经注册userService.check(user_name);//如果没有,则注册新账户String user_id = userService.save(userData);//根据用户名查询账户信息User user = userService.find(user_name);return user.id;

3.2:考虑到一些固化的但是经常查询的数据,可以考虑放在缓存中。内存效率远高于磁盘。

4.缓存的使用

1.服务器缓存

1.1:一般使用redis等中间件。缓存虽然好,但也不能贪。应该考虑缓存的一致性。

代码优化(代码优化时所依据的是)  第1张

1.2.如果一段数据频繁更新,甚至和直接查询数据库一样高效,就没有必要使用缓存。

1.3.掌握更新缓存的时机和方法(比如数据更新后异步推送更新缓存)。

2.首页缓存

2.1.使用nginx,可以先找到静态页面,找不到静态页面的时候再去找实时页面控制器。

3.数据库操作

3.1:一般使用连接池。(这里连接池的配置需要结合服务器硬件环境来设置。)

3.2:根据实际情况,设置最小连接数,过多也会造成资源浪费(维护连接池也需要CPU开销)。

5.结合数据库编程

5.1:检查你的SQL语句是否符合规范,是否取了索引。

5.2:如果您手动和本机创建了一个数据库连接,您必须记住在使用后关闭该连接。

6.使用服务器架构编程。

6.1:现在服务器架构是分布式的。考虑分布式情况的编码问题。

6.2:使用apache ab工具或Jmeter工具等。,具有性能需求的代码可以被预先测量、观察和分析。

7.结合网络编程

7.1:可以减少网络传输的数据量,尽量控制(比如把一个大的json包转换成Json字符串,然后在服务器端处理)

7.2.能合并的接口请求尽量合并在一起,减少网络开销。

7.3:常量数据,只需请求接口一次,避免重复请求。

-结论-结论

最后,做好代码优化,除了夯实自己的基本功,还需要从平时的项目实践中总结,形成自己的方法论。方法论是一个实用的系统,是解决某些问题的逻辑抽象,能以不变应万变。平时还是要多关注自己,多揣摩,多练习。只要多写代码,看看运行效果,就能熟能生巧,练完再把一些理论记进脑子里!

这里不能列举更多代码优化的例子。其实要掌握一些基础知识,比如内存管理、垃圾回收、代码运行机制、代码规范、编程语言特性、数据库编程、网络编程等。如果基础知识足够好,我们自然会注意到编程过程中代码运行的质量和性能。

0