我对一个小程序的两次重构过程

mpvue到Taro:一个老项目的框架重构之路 随着小程序市场的不断发展,对小程序开发框架的性能、功能和可维护性提出了更高的要求。mpvue是早期流行的小程序开发框架,它基于Vue.js,使得熟悉Vue的开发者能够快速上手小程序开发。然而,随着时间的推移,mpvue在一些方面逐渐暴露出不足,如维护力度不够、生态发展受限等。Taro是一个开放式跨端跨框架解决方案,支持使用React、Vue等多种框架进行开发,具有更强大的跨端能力和更好的生态支持。本次重构的目的就是将基于mpvue开发的老项目迁移到Taro框架上,以提升项目的性能、可维护性和跨端能力。 阅读详情

源于优快云上一位网友提出的一个问题:

 

算法实验题1.2 等式数量
★问题描述
集合是基本的数学概念,集合中的元素是互不相同的。
表示相等关系的式子叫做等式。
给你一个包含有N个整数的集合,如果从集合中找到三个不同的整数a,b,c, 使得
a+b=c,那么我们说这个集合包含一个等式。
★编程任务
计算集合中所包含的等式数量。
★数据输入
第一行为一个整数N (3 <=N <=5,000),表示集合中有N个不同的整数。第二行有N个整
数,表示集合中的元素,元素的整数值大小为-10000000~10000000。
★数据输出
输出一行一个整数,表示该集合的等式数量。
输入文件示例输出文件示例
input.txt output.txt
4        2
3125
http://topic.youkuaiyun.com/u/20090828/10/f41bc15e-339c-4b55-b1a6-2f4b3383a107.html?seed=547430668&r=59420060#r_59420060

 

他的算法是用三重循环来做。算法复杂度为n*n*n。

 

我能想到的就是改进为n*n*log(n)了,将其中的一层改进为二叉树结构。

 

初始程序:

我首先想到的是利用STL的map,它是基于树的。

随后我用5000个数据做了压力测试,速度实在是慢42.001秒,内存占用729MB,受不了。。。

 

第一次重构:

鉴于LZ不要打印过程,我把map改成了set,则不需要添加map的vector了。

重构之后,内存占用降到322M,时间为30.01秒。算法复杂度不变。
当时我还说:不过对于LZ的要求应该是达到了,一般的数据量也能接受。


第二次重构:

晚上回去想想,这占内存也太大了,我想到用vector <bool>,这是vector的一个特化版本,主要是空间上的节约(大概省了30左右吧),另外不用动态new,时间也省了不少,而且查找是常数时间,而不是对数时间。

 

我还是用昨晚的5000个数据做压力测试,内存占用降到4M,时间为1.306秒(Release,P4 3.0G,1G内存)。我已经很满意了。算法复杂度不变。

 

我从这次重构中学到两点:

1. 算法复杂度不变,不代表没有优化的空间了,正如上面如得,第三个程序比第一个空间上优化150多倍,时间上优化40多倍。

2.STL的容器空间分配子只能针对大部分情况是好的,对于某些情况还是得用自己的分配子,例如,如果我一定用map,那么我可以自己做一个分配子,使得内存集中存放,这样就不用那么多的new操作。

 

用 Django 开发微信小程序后端实现用户登录 本文将介绍采用 Django 开发微信小程序后端,通过将用户模块进行重构,并采用JWT来进行用户认证,来解决以下问题: 微信小程序不支持 Cookie,因此不能采用 Django 默认的 Session 验证机制; 同时小程序也不支持 Django 内置的用户登录模块。 希望通过此文可以帮助大家快速搭建小程序的后端服务。 1. 安装相关的依赖 在 requirements.txt 里面添加以下... 阅读详情

相关推荐

电商小程序实战教程-首页重构

本篇我们重构了一下首页的功能,添加了商品类别的导航功能,商品列表使用图文组件进行了重构。低代码学习就是要不断的研究组件的各种用法,必要时添加一部分代码会更加灵活,学会了按照教程改造一下首页吧。...

低代码布道师的博客 924

小程序重构过程记录

小程序重构过程记录 问题 小程序登录验证逻辑 身份切换逻辑 自定义组件化 新进公司就接受一个项目,为劳务公司开发一个工人管理小程序,所谓前人挖坑,后人踩坑,原本一个不是特别复杂的项目,被上上一个哥们做成了一个特别大的“坑”。为什么是上上一个哥们呢,因为上一个哥们受不了这样的“坑”,直接跑路了,然后就到我来踩坑了。 临近新版本上线,开启了极速填坑系列。因为上一次没有完全解决问题就上线了一个版本,以至于出现过多的bug被甲方进行了“爱的教育”,失望值拉满,所以新版本要把新功能和bug解决掉..

JingDengLai的博客 565

微信小程序 | 借ChatGPT之手重构社交聊天小程序

本文通过分析ChatGPT聊天界面的流式数据流效果,针对社交小程序中的具体聊天场景进行重构和实现,前端使用uniapp实现,后端可搭配python flask以及springboot中的PrintWrite方法进行效果实现!

陶人超有料的博客 8451

我的小程序项目知识点(网络模块重构)

我的小程序项目知识点(网络模块重构) 这个为什么要重构呢,就是一开始也是相似的wx:request请求代码重复写了几次,这个时候就像把她单独抽出去,相当于封装了函数库,需要哪个调用哪个。 1,在index.wxml同目录新建了一个network.js的文件 2,然后自定义一个函数,然后将请求代码复制过去,但是在这里不能直接将数据存放到页面读取数据的index.js的data中,所以只能暴露出去这...

_小郑有点困了的博客 242

重构秒杀小程序实战项目:wepyWexx

wepy上述代码块展示了如何使用wepy框架来实现秒杀小程序中买家端的核心功能。这些功能的实现充分体现了wepy在组件化设计、前后端交互、事件处理等方面的强大能力。

weixin_42471823的博客 1073

微信小程序项目重构之Redux状态管理

1.以往处理状态的一些方式第一种:App上挂globalData 这种方式就是直接写在App里面啦,取值赋值比较方便App.jsApp({globalData: {name: '前端学者',// ...other globalData},// ...other globalData});// 取值 var ...       1.以往处理状态的一些方式 第一种:App上挂globalData 这种方式就是直接写在App里面啦,取值赋值比较方便 App.js App({ globalData: { name: '前端学者', // ...other globalData }, // ...oth

小程序装修重构思维导图

自用。

learnjava1989的博客 219

从零开始:使用Python实现基于深度强化学习的柔性车间调度系统

本文详细介绍了如何使用Python和深度强化学习(DRL)构建柔性车间调度系统,特别关注图神经网络(GNN)与近端策略优化(PPO)算法的结合应用。通过实战指南,读者将学习从环境准备、异构图构建到PPO算法实现的全流程,最终实现生产效率的显著提升。

weixin_29074295的博客 244

小程序重构第二期丨不能说和原版毫无关系,只能说......

一、新旧版对比图(左旧右新) 计时页面整合到打卡页,新板块设置为信息流。 图片截图版本只展示了最近热门番剧的信息,后继版本会加入更多精简的信息。 早起签到页精简页面,赛季逻辑精简。 后继还会继续完善早起赛季逻辑。 原打卡页比较简陋,新版打卡页整合了倒计时、时钟等功能。 后继会继续完善打卡逻辑。 二、开发历程 项目在12-17开始,截止目前最后一次提交代码是12-23,本次重构历时约六天。 重构的设计文档↓↓↓ 三、开发实践 3.1 前后端分离更清晰 写第一个版本还是个程序小白,没有太多前后端的概念

豆小匠的博客 882

macOS Monterey官方镜像高速下载指南(附迅雷链接+兼容性清单)

本文提供macOS Monterey官方镜像的高速下载指南,重点介绍利用迅雷等工具加速下载官方安装包的有效方法。同时,详细列出了系统兼容性清单,帮助用户在下载前确认设备支持,并分享了从下载、验证到安全安装的完整流程与常见问题解决方案。

j7k8l的博客 2194

【Excel VBA 编程】批量核对两张表格数据,行和列显示顺序均被打乱

利用数据字典在 Excel 中进行表格数据的核对,该表格含有多行多列,并且行和列顺序是打乱的,批量核对数据后将差异输出

wei1019的专栏 1293

小程序重复代码如何重构

首先看下相似的代码 上面两段代码非常相似,修改如下: 转载于:https://www.cnblogs.com/colorful-paopao1/p/10903777.html

weixin_34400525的博客 1116

LabVIEW专栏九、类的继承与多态实践

本文深入探讨了LabVIEW中面向对象编程的核心概念——类的继承与多态。通过构建仪器参数父类与设备基类,并以网口设备为例创建子类,详细演示了如何利用继承实现代码复用,并通过多态机制实现统一接口调用不同仪器类型,从而构建灵活、可扩展的自动化测试与仪器控制系统。

weixin_29235525的博客 251

重构(第二版) 读书笔记 第一章(从一个小程序入手,开始我们的第一次重构)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录《重构》 从一个小程序入手,开始我们的第一次重构一、准备工作1.JavaScript运行环境与debug二、重构步骤1.起步(先理解场景和代码功能,代码我做了必要的注释,方便理解)2.分解statement函数2.1提取switch语句,提炼函数(106)2.2 对amountFor进行一些改进2.3 提炼计算观众量积分的逻辑2.4 移除format变量2.5移除volumeCredits2.6同样的方式移除totalAmount.

ANA的博客 812

计算机视觉-深度学习图像检测方法梳理

计算机视觉-深度学习图像检测方法梳理 由于之后要转方向啦,趁这段时间整理手中硕士研究方向的一些阅读笔记,这是一篇关于计算机视觉的基础知识梳理 先搞清一些小知识点 首先我们要弄清楚图像分类、目标定位、语义分割、实例分割的区别 a. 图像分类 :给定一张输入图像,图像分类任务旨在判断该图像所属类别; b. 目标定位 :在图像分类的基础上,我们还想知道图像中的目标具体在图像的什么位置,通常是以包围盒的(bounding box)形式; c. 语义分割 :语义分割是目标检测更进阶的任务,目标检测只需要框出每个目

qq_41662991的博客 9953

淘宝抓包,直达函数内部request请求体和response响应体, 告别FD, Charles,SSL,justtrustme 等http代理,证书工具。

淘宝抓包,hook发包函数,直接获取response相应数据

binary66的博客 4472

两年后又捣鼓了一个健康类小程序

熟悉我的老老…老朋友应该都知道,这个小程序其实是我两年前做的,当时是用uniapp做的,做得还比较简陋,页面比较粗糙,逻辑上只能用我的流程通过,不然就有BUG那种哈哈。个人是非常认同这个小程序的价值的,确确实实希望它能够帮助到更多人全面了解真实的自己,基于此以及其他原因如支付接入iOS限制😓,所以这个小程序最终是完全免费的,如果你觉得其对你有帮助,希望能帮忙多多分享一下。所以开始重构!这次从UI设计开始,前端用Vue Mini全部重新写了一遍,后端也修改了不少。

weixin_47042983的博客 814

SAP 销售订单BOM使用场景简介

通常在MTO的生产场景中,我们会根据已创建的SO去展开BOM去驱动生产,如果我们生产地产品BOM是通用性的通常我们用标准BOM的方式就可以实现,但是实际在生产过程中往往不会这样,不同的客户对某些物料的规格就不相同,就会涉及产生不同的BOM,但是该客户的产品又不存在通用性,这个时候就会引入概念就是销售订单BOM,先有销售订单然后根据销售订单+行项目创建BOM。销售BOM:根据销售订单号+行项目号创建的BOM,是根据特定的销售订单或者可以理解为特定的客户创建的BOM。

我小时候很黑的博客 4224

重构微信小程序

近期空闲下来将2018年底上线的社区小程序做一下功能更新,提交了两次都被腾讯给驳回了。 陡然间感觉微信小程序对个人开发者已不再友好,决心放弃微信小程序了。 好不容易积累的1500+用户量,50+的日活跃量就这么放弃心有不甘。决心用VUE重构一版,希望接下来一切顺利,新版功能尽快上线吧。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200229103...

Mattscl的博客 892

【SpringBoot 3.x 第92节】Spring Modulith:构建模块化单体架构(基于 Spring Boot 3),一文带你搞透(超详细)!

🏆本文收录于《滚雪球学SpringBoot 3.x》,专门攻坚指数提升,本年度国内最系统+最专业+最详细(永久更新)。    该专栏致力打造最硬核 SpringBoot3 从零基础到进阶系列学习内容,🚀均为全网独家首发,打造精品专栏,专栏持续更新中…欢迎大家订阅持续学习。 如果想快速定位学习,可以看这篇【SpringBoot3教程导航帖】,你想学习的都被收集在内,快速投入学习!!两不误。

**My Coding Family** 1002

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

使用 React Hooks 重构你的小程序

戳蓝字「前端瓶子君」关注我们哦!“本文由 余澈 根据他在GMTC 全球前端大会 上的《使用 React Hooks 重构你的小程序》分享整理而成”背景—一直关注小程序开发的朋友应该...

我本可以容忍阳光,如果我不曾见过太阳,然而阳光已使我荒凉,成为更新的荒凉。 414

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

为了解决小程序tabbar闪烁的问题,我将小程序重构成了 SPA

几个月前,因工作需求,我开发了一个小程序,当时遇到了一个需求,是关于tabbar权限的问题。小程序的用户分两种,普通用户和vip用户,普通用户tabbar有两个,vip用户小程序下面的tabbar有五个。因为涉及自定义tabbar的问题,所以官方自带的tabbar肯定就不能用了,我们需要自定义tabbar。官方也提供了自定义tabbar的功能。基础能力 / 自定义 tabBar (qq.com)"list": []就是需要在app.json中的tabBar项指定custom字段,需要注意的是。

zlh241156的博客 1760

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

小程序重构第一期丨不小心删库了。。。

一、以前的代码烂成一坨 事情的起因是,我之前不是准备 学Go语言 嘛。 基础学完后,准备开个项目练练手,突然发现我大二开发的小程序又自动把我的签到数据 – 清零了! 这里简单介绍一下 时光早安(重构前)的功能: 早起打卡(含赛季评定、排行榜和签语抽取等) 计时(含长时间倒计时、钟表、音乐播放等) 打卡记录(设定目标,打卡标记) 设置(设置个性签名,早起时间判定等) 其实我还在小程序隐藏了一个后台数据管理~ 细数 时光早安(重构前) 罪状: 代码臃肿,结构不合理 逻辑混乱,前后端严重糅合 功能、效果全靠

豆小匠的博客 446

AI加持的小程序逆向革命:用InsCode智能重构反编译代码

经过一番摸索,我设计了一个全栈工具链,结合InsCode平台的AI能力,实现了从反编译到智能重构的一站式解决方案。整个系统采用React+Node.js全栈架构,分为三个核心模块:文件上传解析模块负责处理.wxapkg包,代码编辑器模块展示和编辑反编译结果,Diff对比模块验证重构效果。针对反编译常见的代码碎片化问题,特别设计了代码高亮和折叠功能,让混乱的代码结构更易读。惊喜的是,利用平台的部署功能,可以直接生成在线可访问的演示版本,省去了配置Web服务器的麻烦。的智能补全能力,效率提升了数倍。

MoonbeamRaven28的博客 1664

什么是重构,什么不是重构

有时候,会有程序员跑到我这里说他们不喜欢某个东西的设计,“我们需要给它来个全面的重构”,来纠正里面的错误。哦,哦。这听起来可不是个好主意。而且这听起来也不是重构…重构(Refactoring)这个词最初由Martin Fowler 和 Kent Beck给下的定义,它是一种修改,使软件的内部结构更容易理解,在不改变软件的可见行为方式前提下使软件更容易变更…它是一种有节制的整理代码、使bug产生几率

曹胜欢 4229

使用mpvue重构个人小程序(二)文件结构

使用mpvue重构个人小程序(一)安装 package.json文件 package.json是项目的主配置文件,里面包含了mpvue项目的基本描述信息、项目所依赖的各种第三方库以及版本信息、以及可执行的脚本信息。 我们看到该文件中的scripts部分配置了4个可执行的命令: "dev": "node build/dev-server.js", "start": "node bu...

孙三苗的专栏 330
上一篇: 《C++ 语言的设计和演化》摘要暨读后感
下一篇: 用Python高效地移动文件
thy38
博客等级 码龄19年 184粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值