自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

醒途

从零到一,感谢自己

  • 博客(183)
  • 收藏
  • 关注

原创 vite instanceof 失效

背景:给一个巨石单体项目进行标准化模块拆分,封装出来的模块代码用vite进行构建,但模块启动后页面上的表现一直和webpack那版不一致一步步debug后,发现问题出在下面这个判断条件问:当func是生成器函数时,判断条件输出true还是false。

2024-07-30 19:56:53 412

原创 记一次老旧项目的整体技术升级

最近给公司采购的老旧的node8vue2.6webpack3npm项目做构建优化背景:整个项目build一次20+ min,本地冷启动和热更新也忒慢,依赖npm i一下也得装个20+ min众所周知,Node 版本依赖包管理工具和构建工具的升级都能对构建速度的优化有帮助。

2024-07-26 17:53:34 419

原创 记 zoom = 1 是否会触发重绘

显示,因为我们的大屏上不只是图表,其它的布局倒没什么影响,用户也喜欢放大看。自动给用户缩回去正常的图表大小,正常这事在页面初始化的时候干就完了,放大显示,但我们的可视化大屏在放大后,图表的数据显示会很紧凑。,按道理是不会引起页面变化的,应该不会引起重绘。录制下过程,发现确实没有引起重绘,是我多虑了。背景是用户电脑分辨率自己设置了。会引起重绘,用起来还是要当心点。又不能提示让客户自己去改成。但心存疑惑:初始时如果没有。默默打开控制台 写个。

2024-07-26 15:34:24 190

原创 Puppeteer 生成图片 生成 PDF

22 年时,那时由于团队权限比较受限,在不开新页面,也不开新服务的情况下,同样是生成图片的需求,性能要求也比较高,当时采用的 Html2canvas 的前端生成方案,做了十几个核心业务模块,在 Web,H5,App,Electron PC App 下, 速度 300ms~2500ms 内生成和下载图片。其中流程代码参考意义不大,核心代码里的裁切图片,自动滚动,等待指定 Iframe 加载 和 获取指定元素上的属性值,比较有参考意义。

2024-07-08 11:13:41 438

原创 python openpyxl 获取单元格背景色,含预设 theme 颜色转换

【代码】python openpyxl 获取单元格背景色,含预设 theme 颜色转换。

2024-06-20 17:15:42 278

原创 微信消息订阅,真TM蠢

单页面限制了 10 个订阅消息组件,超了就初始化时候直接报错。

2024-06-19 03:11:19 118

原创 获取 table 所有单元格的行列号,含合并单元格,行列号纠正

【代码】获取 table 所有单元格的行列号,含合并单元格,行列号纠正。

2024-05-31 10:18:00 296

原创 【微信支付】前端 JSAPI 时序图及代码实现 Hook,微信内置浏览器,公众号开发

主要参数都是从后端获取的,非常考验后端的签名,签名不对就要调试很久,切记官方的。可能是有问题的总是签名失败,当然也许是我们的后端使用方式不对。

2024-04-26 17:54:05 297

原创 【公众号开发】H5 微信授权

这是一个额外的数据对象,它被 JSON 字符串化并编码成 URL 编码的字符串。它包含了 redirectUrl,即用户登录成功后应该被重定向到的页面的 URL。extra 被附加到回调 URL 上,以便在用户登录成功后可以传递额外的信息。这个路径被编码成 URL 编码的字符串,以确保它在 URL 中是有效的。: 这个变量代表当前页面的原始域名信息,通常包括协议(如 http:// 或 https://)和域名。在微信开发中,每个应用都会有一个唯一的 AppID,用于标识应用并进行微信服务的授权。

2024-04-20 23:23:20 274

原创 Taro 路由拦截 身份认证 授权登录

【代码】Taro 路由拦截 身份认证 授权登录。

2024-04-20 23:16:46 392

原创 使用 npm 工具高效更新项目依赖包

团队内部会用工具定时检查包的最新版本并通知,以便我们及时跟进社区进展,避免和技术栈出现版本脱节导致无法使用最新特性和优化内容。这里只说明手动查看和更新包的主要几个命令。:检查项目中过时的依赖包及其最新版本。中所有依赖至最新版本(不执行安装)依赖至最新版本(不执行安装)工具,用于管理依赖更新。:执行依赖更新,安装。中指定的最新版本依赖。

2024-04-12 23:06:10 436

原创 git worktree

git worktree 会在指定路径生成新的目录。

2024-03-26 22:42:40 139

原创 Img 设置宽高尺寸后模糊失真

建议大图可以根据需要添加缩放算法,并且所有图用二倍图这样清晰度上会有所改善。添加图像缩放算法,但要注意图片尺寸很小时候会出现“毛边”,还不如不加。

2024-02-19 18:12:57 932

原创 【化蛹为蝶】NextJS 图像渐进式加载

但NextJS的Image组件帮开发者内置了渐近加载的处理,需要在特定条件下使用。

2024-02-19 15:47:12 637

原创 【化蛹为蝶】NextJS 使用 Image 宽高,不固定宽高

【代码】【化蛹为蝶】NextJS 使用 Image 宽高,不固定宽高。

2024-02-18 16:44:14 462

原创 什么是贪心算法

需要注意的是,贪心算法的局部最优选择并不一定导致全局最优解,因此在使用贪心算法时需要谨慎验证其有效性。但对于一些特定类型的问题,它可以提供简单而有效的解决方案。贪心算法是一种解决问题的算法范式,它在每一步选择中都采取当前状态下的最佳选择,而不考虑先前的选择会对未来的结果产生影响。贪心算法通常适用于那些具有最优子结构性质的问题,即问题的最优解可以通过子问题的最优解来构造。在每一步,贪心算法选择当前状态下的最佳选项,然后更新状态,继续进行下一步。贪心算法的基本思想是通过局部最优选择来达到全局最优解。

2024-01-25 17:02:30 374 1

原创 什么是开放寻址法

开放寻址法(Open Addressing)是一种解决哈希冲突的方法,其中如果一个哈希表位置被占用了,就去寻找下一个可用的位置,直到找到一个空槽或者遍历整个表。开放寻址法的优势在于它不需要额外的数据结构来存储相同哈希值的元素,但它可能会导致聚集(clustering)的问题,即相邻的位置可能会被频繁占用,导致查找效率下降。使用两个哈希函数,第一个哈希函数计算出位置,如果发生冲突,则通过第二个哈希函数计算一个步长,再次寻找下一个位置。在发生冲突时,二次探测会根据一个二次方程的形式探测下一个位置,公式为。

2024-01-18 18:30:58 807

原创 JavaScript 有对象了为什么还需要 Map 结构?

相比于普通的对象(Object),Map对象的键只能是字符串或符号(Symbol),而Map的键可以是任意数据类型,包括基本类型和对象等。Map保持键值对的插入顺序,迭代时会按照插入的顺序进行。Map提供了size属性,可以方便地获取键值对的数量。Map提供了更灵活的迭代方式,包括keys()values()和entries()等方法,使得对键、值或键值对的遍历更加方便。与对象相比,Map提供了has方法,用于判断是否包含指定的键。Map可以使用任意类型的值作为键和值,包括函数、对象等。在某些场景下,使用。

2024-01-18 18:28:49 407

原创 【团队管理】绩效与目标

在给予肯定和赞赏时,要确保表达真诚和具体的赞扬,指明具体的行为或成就。同时,也要确保公平性,给予每个成员适当的肯定和赞赏。了解每个成员对自己的职业发展有何期望和目标,并与他们探讨如何通过培训、项目经验和导师指导来实现这些目标。通过开放性问题,了解他们的想法和看法,同时也能够引导他们思考和反省自己的表现。给予成员足够的时间和空间,倾听他们的观点、反馈和意见。在适当的时候,向成员表达对他们的工作成果和努力的肯定。在会议前,回顾每个成员的工作表现和数据,为每个人制定清晰的议程和目标,并准备好相关的反馈和建议。

2024-01-16 22:59:37 873

原创 【前端架构】前端通用架构

提供良好的路由管理机制,支持页面导航、嵌套路由和路由守卫等功能,以实现灵活的页面跳转和权限控制。:支持持续集成和持续部署的流程,自动化构建、测试和部署的环节,提高开发团队的效率和应用的交付速度。:提供性能优化的建议和工具,包括代码分割、懒加载、缓存策略等,以提升应用的加载速度和响应性能。:支持多语言和多地区的应用展示,提供国际化和本地化的解决方案,以满足全球化的需求。:集成单元测试、集成测试和端到端测试的工具和框架,以确保应用的稳定性和质量。

2024-01-16 22:48:35 920

原创 Edge 旧版本回退

点击“关于 Microsoft Edge”,进入后会自动更新到在策略输入的版本号,更新完毕后重启 Edge 即可。配置策略 “目标版本覆盖” 为已启动,并且手动输入版本号,如 110.0.1587.41。配置策略 “回退到目标版本”为已启用。配置策略 “更新策略替代” 为已禁用。配置策略 “允许安装” 为已启用。

2023-12-01 18:05:14 1287 1

原创 React Query + Redux toolkit 封装异步请求

当你需要进行 Redux 和 React Query 的组合时,除了常规的 Redux 方法(例如手动派发 action 和更新 state),还可以使用。reducer,并添加 React Query Provider,这样可以在整个应用程序中共享 React Query 的 cache,避免重复的请求。和 React Query 结合的方式,不仅可以更轻松管理 Redux 的异步状态和数据请求,也更方便地管理用户的相关状态信息。hooks,展示用户信息和用户列表。最后,在组件中使用创建的。

2023-11-01 09:54:40 610

原创 PM2 vs Kubernetes:在部署 Node.js 服务时使用哪个?

Node.js 已成为 Web 开发中的热门技术之一,但如果我们想成功地将 Node.js 应用程序交付给用户,我们需要考虑部署和管理这些应用程序。两个常见的选项是 PM2 和 Kubernetes。PM2 是一个用于运行和管理 Node.js 应用程序的进程管理器,它能够创建不间断运行的 Node.js 应用程序,并确保它们始终保持稳定和高可用性。同时它还具有负载均衡、进程监控、日志管理等功能。Kubernetes 是一个强大的容器编排系统,可以方便地进行容器的部署和管理。

2023-11-01 09:53:05 1147

原创 前端松耦合高聚合:编写可扩展可维护代码的策略

在现代的前端开发中,代码的可维护性、可测试性和可扩展性是非常重要的。通过接口定义,可以明确规定模块之间的交互方式,而不是直接依赖于具体的实现细节。采用单向数据流的架构模式(如 Flux、Redux),确保数据的流动是单向的,从而减少模块之间的相互影响和耦合。使用事件驱动的方式进行模块或组件之间的通信,而不是直接调用彼此的方法或访问彼此的属性。松散耦合的通信方式,如事件驱动,可以降低模块间的依赖程度。这样可以提高模块的内聚性,使其只关注自身的功能,减少对其他模块的依赖,从而降低耦合度。

2023-11-01 09:52:35 171

原创 快速上手 Jest 单元测试框架:使用 Jest Preset 加速配置,灵活应对项目需求

即使使用了 preset,仍可以在个别项目中进行自定义配置。具体来说,Jest 会先加载预设值,然后用用户提供的配置覆盖这些预设值。Jest preset 参数的作用是提供一个预先定义好的配置集合,以便于快速开始使用 Jest 单元测试框架。通过使用预设值和覆盖其默认配置,Jest 使得开发者可以方便快速地开始使用 Jest 单元测试,同时还可以随着项目的需求进行灵活配置。这样,用户就可以根据需要自定义配置,并仍然保持 preset 所带来的便利。合并过程中,数组和对象类型的属性会使用更复杂的合并策略。

2023-11-01 09:51:55 186

原创 electron session.defaultSession.loadExtension

session.defaultSession.loadExtension() 方法是 Electron 中用于加载和启用一个扩展(extension)的方法。该方法允许你将一个以文件夹形式存在的扩展路径传递给它,Electron 会将这个文件夹作为一个 Chrome 扩展加载到应用程序中。在 Electron 中,可以使用 BrowserWindow 对象打开一个 Chromium 窗口,然后在窗口中加载和运行 web 应用程序。注意:如果你的扩展存在弹出窗口,那么需要配置相应的权限。

2023-05-17 19:48:52 658

原创 electron systemPreferences

在 Electron 中,通过使用 Node.js API 可以访问底层操作系统的一些功能,例如 systemPreferences 模块,这个模块提供了访问用户设置的接口。systemPreferences 模块提供的主要功能是获取和设置用户的偏好设置,包括声音、外观和桌面背景等。此外,该模块还可以获取用户当前使用的颜色主题和其他系统级设置。以上仅是 systemPreferences 模块的一些基本用法,更多详细信息可以参考 Electron 文档。

2023-05-17 19:37:36 248

原创 【无标题】electron setAppUserModelId

是 Electron API 中的一个方法,用于设置应用程序的用户模型标识符(App User Model ID)。用户模型标识符是一个唯一的字符串标识符,用于在 Windows 操作系统中标识和组织应用程序的窗口和任务栏图标。设置正确的用户模型标识符可以确保应用程序在 Windows 操作系统上正确地显示窗口缩略图、进度条和通知等元素,并能够正确地处理多个实例和快速启动等功能。其中,com.example 是应用程序的域名,myapp 是应用程序的名称。方法之前,应用程序需要先创建一个。

2023-05-17 13:30:39 732 1

原创 【无标题】@electron/remote/main 什么作用

虽然 Electron 提供了一套完整的 IPC API,可以让渲染进程和主进程进行通信,但在使用过程中,由于渲染进程和主进程的上下文不同,很难直接调用主进程的方法或操作主进程的对象。在 Electron 应用程序中,渲染进程(Web 页面)和主进程(Node.js)是运行在不同的进程中的,它们之间的通信方式需要借助 Electron 提供的 IPC 机制。上面的代码演示了如何在渲染进程中通过 remote.require 方法调用主进程中暴露的 add 方法,这个方法实现了两个数字相加的功能。

2023-05-16 19:06:40 747

原创 【无标题】child_process 作用及发展历程,再给个使用示例

后来的版本中,child_process 增加了更多功能,比如 fork() 方法实现了父进程和子进程之间的共享数据和通信,execFile() 方法允许直接运行可执行文件等。这个示例代码中,执行 Python 脚本是在 Node.js 应用程序中创建了一个子进程来完成的,从而实现了 Node.js 应用程序和 Python 脚本之间的交互。child_process 是 Node.js 中的一个内置模块,它的主要作用是创建和控制子进程,从而实现了 Node.js 应用程序与操作系统进行交互的能力。

2023-05-16 18:49:29 283

原创 Rust #[actix_web::main]

函数,该函数使用 Tokio 异步运行时(Async Runtime)启动一个 HTTP 服务器,并监听指定的地址和端口。该函数还将所有应用程序的路由规则绑定到 HTTP 服务器上,从而实现了 Web 应用程序的工作。属性宏告诉编译器将这个函数包装成一个可执行文件,并启动 Actix-Web 框架的运行时。是 Actix-Web 框架中非常重要的一个属性宏,用于将标记的入口函数转换为一个 Actix-Web 应用程序。函数,该函数创建了一个 HTTP 服务器实例,并将。在这个例子中,我们定义了一个。

2023-05-06 23:06:51 868

原创 Rust eprintln

可以将错误消息输出到标准错误流中,并使其在终端上呈现出不同的颜色,以便用户能够更方便地区分错误消息和正常输出。同时,由于标准输出和标准错误是不同的输出流,因此将错误消息输出到标准错误流中不会混淆程序的正常输出。标准错误流和标准输出流是程序与外界交互的两个基本接口。标准错误流一般用于输出程序运行过程中的错误消息,而标准输出流则用于输出正常的结果信息。代表 error,表示将消息输出到标准错误流中,而不是标准输出流。是一个 Rust 的宏,用于将错误消息输出到标准错误流中。宏,用于将消息打印到标准输出流中。

2023-05-06 23:01:55 230

原创 Rust main 函数返回值类型不能是 String

函数返回任意类型,那么就可能出现各种奇怪的行为和安全漏洞。这个限制源于 Rust 的设计哲学,即强制代码正确性和安全性。如果你这样做了,Rust 编译器会产生一个编译错误。函数返回一个非零值,这通常表示程序执行失败或遇到错误。表示一个空元组类型,类似于 void 类型,而。,不能是其他类型,这是 Rust 的设计约定。函数执行成功时,它会返回一个值为 0 的。函数的返回类型只能是两种,分别是。函数返回一个值为 0 的。类型,表示程序执行成功。函数的返回类型声明为。函数的返回类型必须是。例如,在如下代码中,

2023-05-06 22:51:50 929

原创 【无标题】 `x` is assigned to here but it was already borrowed

这个错误信息通常出现在 Rust 代码中,它意味着在一个已经借用的变量上尝试进行其他操作,而这是不允许的。在 Rust 中,一个变量可以同时存在多个不可变借用,但只能有一个可变借用。当一个变量被可变借用时,任何不可变借用也将被视为不可用,直到该可变引用作用域结束。解决这个问题的方法通常是重新设计代码逻辑,以避免发生变量重复借用的情况,或者使用 Rust 提供的 borrow checker 工具来保证代码正确性。如果有错误,编译器将会给出详细的提示,并指出错误所在的位置。

2023-05-06 22:46:58 150

原创 【无标题】Rust & 什么意思

表示一个引用类型(reference),用于借用变量而不是拥有变量的所有权。例如,在如下代码中,符号在 Rust 中有多种不同的含义,通常表示引用或借用。它的具体含义取决于它出现的上下文。也通常表示借用,用于将一个变量的所有权传递给函数。例如,在如下代码中,函数。符号有多种不同的含义,具体取决于它出现的上下文。类型变量的引用作为参数。在上述代码中,我们定义了一个函数。是一个引用,所以它的值为。在上述代码中,我们使用。

2023-05-06 22:43:24 518

原创 【腾讯云】云服务器 Nginx 内网访问 COS 省流量费

tmd 全网找不到示例,用阿里云那套又不行,最后试出来有个注意的地方是 http https 的区别要配置好。

2022-09-17 00:10:09 1064 2

原创 【阿里云】云服务器 Nginx 内网访问 OSS 省流量费

【代码】【阿里云】云服务器 Nginx 内网访问 OSS 省流量费。

2022-09-17 00:07:51 890

原创 makeapie 暂停服务

http://ppchart.com 看了一下这个数据最全 2w个github: https://github.com/ppchart

2022-02-05 14:20:20 1639

原创 【已解决】Mysql 存储 emoji 表情报错 Incorrect string value: ‘\xF0\x9F\x98\x82\xF0\x9F

mysql 库、表、字段字符集从 utf8 改为 utf8mb4校验规则改为 utf8mb4_unicode_ci

2022-01-30 16:13:22 668

原创 mac sqlite 导出 csv

打开终端cd desktop/data/ #切换到文件所在目录sqlite3 xxx.sqlite #输入对应sqlite格式文件名sqlite> .output data.csv sqlite> select * from chart; #从数据库的一个表中选取全部数据 sqlite> .output stdout #结束自动保存同原数据库文件路径...

2022-01-30 11:56:32 968

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除