avatar
Articles
13
Tags
16
Categories
9

首页
文章
  • 分类
  • 标签
  • 随机
leetcode
关于我
Lstmxx的空间
首页
文章
  • 分类
  • 标签
  • 随机
leetcode
关于我

Lstmxx的空间

微信小程序query参数解析问题及解决方案
Created2025-10-11|坑|微信小程序•技术问题
问题描述在微信小程序开发中,我们通常通过页面生命周期回调函数 onLoad 的第一个参数来获取页面 URL 中的 query 参数。微信小程序框架会自动解析 URL 中的查询字符串,并将其作为参数传递给页面。 然而,当 query 参数值中包含等号(=)字符时,微信小程序的解析机制会出现问题,导致参数值被错误截断。 问题案例原始小程序链接: 1pages/index/index?skin_id=jzWddAEWvD&channel_id=1639617&product_type=5&appid=wx3cc2cddf09969268&short_link_code=3==qMsxn&product_id=81 实际解析结果: short_link_code 被解析为 3 期望值应为 3==qMsxn 这种解析错误会导致后续业务逻辑失败,例如使用错误的短链码获取长链接时会失败。 问题原因分析微信小程序的 URL 解析机制与浏览器解析有差异,以下是浏览器解析结果。 可以看出,在浏览器中解析是正常的。 解决方案修改参数生成逻辑:在对微信小程序通 ...
H5 Safari浏览器input自动聚焦问题
Created2025-09-25|问题汇总|H5•Safari
Sorry, your browser doesn't support embedded videos. 问题描述当用户在输入手机号后,自动获取验证码功能会将焦点从手机号输入框切换到验证码输入框,导致 blur 和 focus 事件被多次触发,从而引发 window.scrollTo 定位异常。 window.scrollTo 的适配为适配 iOS 设备,在 input 的 blur 和 focus 事件上绑定 window.scrollTo,以便在键盘弹出时,页面元素能够正确上移。实现代码如下: 1234567export function handleInputScroll(isBlur: boolean) { if (isBlur) { window.scrollTo(0, CacheData.cacheScroll) } else { CacheData.cacheScroll = window.screenY }} 解决方案setTimeout 尝试最初的思路是通过增加延迟(se ...
解放前端生产力:我如何用 LLM 和 Bun.js 构建一个 YApi to TypeScript 的自动化代码生成服务
Created2025-07-30|AI|TypeScript•Bun•MCP•AI
引言:我们与 YApi 的“爱恨情仇”在现代前后端分离的开发模式中,API 文档是连接前后端的桥梁。YApi 以其直观、易用的特性,成为了许多团队的首选。然而,对于前端开发者来说,一个普遍的痛点随之而来:我们不得不花费大量时间,手动将 YApi 上的接口定义,逐字逐句地翻译成项目中的 TypeScript 类型(Interfaces/Types)。 这项工作不仅枯燥、重复,而且极易出错。一个字段的拼写错误、一个数据类型的遗漏,都可能导致难以追踪的 Bug。当后端接口频繁变更时,这种维护成本更是呈指数级增长。我们不禁思考:这种高度模式化的重复性劳动,是否可以被彻底自动化?AI 大模型(LLM)能否理解 YApi 的 JSON 定义,并为我们编写出高质量、可维护的类型代码? 为了终结这场“爱恨情仇”,yapi-mcp-server 诞生了。它是一个小巧而强大的命令行工具,旨在将 YApi 定义自动化生成为 TypeScript 代码。本文将完整分享它的设计思路、技术实现和开发过程中的心得体会。 一、项目核心特性yapi-mcp-server 的核心目标是成为开发者工具箱中的一把利器,让类型 ...
如何在Electron中使用数据流的形式加载本地视频
Created2025-06-10|Electron|Electron
1.引言在桌面应用开发中,本地视频的高效加载与播放是提升用户体验的关键。本文介绍如何通过 Electron 的协议处理器与 Node.js 流式 API,实现高性能的本地视频加载方案。 自定义协议流传输的优势 特性 文件路径 Blob 流式传输 内存占用 高(线性增长) 极高(全量驻留) 低(动态分片) 大文件支持 ❌ ❌ ✅ 首帧时间 慢 慢 快 拖拽播放 卡顿 卡顿 流畅 内存泄漏风险 中 高 低 2. 核心实现原理2.1 协议层架构设计123456sequenceDiagram Renderer->>Main: 请求 media://id.mp4 Main->>FileSystem: 创建可读流 FileSystem->>Main: 返回文件流 Main->>Renderer: 流式传输响应 2.2 关键技术选型 Electron Protocol API:注册自定义协议替代file:// Node.js Stream:实现分块读取与传输 HTTP Range:支持视频播放器范 ...
你不知道的javascript上卷读后笔记
Created2024-10-22|阅读笔记|javascript
前言几个月前读完了《你不知道的 javascript 上卷》,笔记整理了但是一直忘记发了,今天有空就发了吧。 这本书对于想深入了解 js作用域、闭包、类和原型等原理和运行规则的人,我是非常推荐的。
基于webtorrent和Electron的磁力链下载器
Created2024-10-18|Electron|Electron•WebTorrent
bt-downloader是一个基于webtorrent和electron的磁力链下载器。 项目地址:https://github.com/Lstmxx/bt-downloader 技术栈 框架:electron + vite + Vue3 + Typescript 前端持久化 pinia 磁力链下载:webtorrent UI:TailwindCSS PrimeVue 数据库: better-sqlite3 ORM: Typeorm 配置保存:electron-store 对于想上手 electron 的朋友,可以看看 webtorrentwebtorrent 是一个基于 WebRTC 的磁力链下载客户端。对比 Aria2 的优势在于 webtorrent 使用 js 写的,同时也有对应的 types 包,所以对于 electron 开发会比较友好。 better-sqlite3对于桌面端应用的数据库选择,一般是选择 sqlite3。而 better-sqlite3 要比 sqlite3 性能好一些,所以选择了 better-sqlite3 ORM 方面则选择了 Typeorm ...
如何绕开浏览器批量下载的限制
Created2024-10-18|前端|TypeScript
前言最近遇到一个需求,需要将批量选择的图片,批量一个个下载。 触发单个下载在浏览器中触发下载,我们可以借用 a 元素来触发。 12345678910111213141516const downloadFile = async (url: string, name: string) => { const res = await fetch(url); const blob = await res.blob(); const strList = url.split('.'); const type = strList[strList.length - 1]; const downUrl = window.URL.createObjectURL(blob); const downloadElement = document.createElement('a'); document.body.appendChild(downloadElement); downloadElement.href = downUrl; downloadElem ...
如何拆分long task
Created2024-07-04|前端优化|TypeScript
前言前段时间实现了一个使用 opencvjs 将印花图与 mask 图原图进行正片叠底的效果,印花使用四方连续的形式拼接,大概效果如下图所示 测试反馈说生成图时操作会变得卡顿,于是便开始着手优化了。 找到问题打开 performance 录下操作,发现有长任务需要优化。 可以发现有一个比较长的任务,我们看看调用栈分析一下哪个函数时间比较长。从图上可以发现整个 task 主要耗时的函数有 getSourceMatAndMaskMat 和 mergeImage 两个。查看一下 render 函数 拆分 long task对于主线程中的长任务可以使用在  Promise  中调用  setTimeout 的方式让出主线程。 12345export function yieldToMain() { return new Promise((resolve) => { setTimeout(resolve, 0); });} 在两个函数之间加上 yieldToMain 再录一次操作发现顺利拆分了 那么继续看看 getSourceM ...
如何构建树形数据和封装树形组件
Created2024-07-01|前端|TypeScript•Vue3
前言最近遇到了一个需求,要将算法的标签品类数据以树形的形式回显到后台管理页面上。通过和后端的沟通,决定了通过 parentCode 和 categoryCode 来让前端组成树形结构。通过接口获取的数据是这样的: 其中当节点为 root 节点时,parentCode 为空字符串。知道数据长啥样,我们就可以构建着手构建树了。 格式化数据树形结构首先我们要先确定树中的 node 类型应该是长怎么样的,明显我们只需要将数据关联起来,而原数据我们希望原封不动保留,所以我们可以用 ts 来定义一下数据结构 123export type Tree<T> = T & { children?: Tree<T>[];}; 知道数据结构长啥样就可以着手写一下函数了。 编写函数在 js 中对象中,变量存储的是对象的引用(地址),我们利用这个特性,便可以通过一次遍历来构建出一颗树。 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474 ...
nestjs自定义filters和logger
Created2023-12-04|后端|NestJS
常见的日志库pino性能高比较小的日志库 winston性能好而且大而全的日志库,一般用于生产。 npm: winston npm: nest-winston winston 文件相关库 npm: winston-daily-rotate-file filters在 nestjs 中,filters 是用来捕获程序中发生的错误。它可以用来 收集错误,生成日志 格式化错误,返回给用户 内置 HTTP 异常在@nestjs/common 中有着常用的 HttpException 来提供给开发人员使用,通过 throw new 对应的 Exception 来触发。 获取 request ip 地址的库npm: request-ip 自定义 logger 模块和 filters首先使用 nest cli 来创建模块 1nest g mo logs 编写 logger 模块 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647import { Module  ...
12
avatar
Lstmxx
Articles
13
Tags
16
Categories
9
Follow Me
Announcement
emmmmmm
Recent Post
微信小程序query参数解析问题及解决方案2025-10-11
H5 Safari浏览器input自动聚焦问题2025-09-25
解放前端生产力:我如何用 LLM 和 Bun.js 构建一个 YApi to TypeScript 的自动化代码生成服务2025-07-30
如何在Electron中使用数据流的形式加载本地视频2025-06-10
你不知道的javascript上卷读后笔记2024-10-22
Categories
  • AI1
  • Electron2
  • 前端3
    • 优化1
  • 后端3
  • 坑1
  • 问题汇总1
  • 阅读笔记1
Tags
Electron TypeScript 微信小程序 javascript H5 Bun WebTorrent 技术问题 Python NestJS Vue3 AI Flask Safari MCP WebSocket
Archives
  • October 20251
  • September 20251
  • July 20251
  • June 20251
  • October 20243
  • July 20242
  • December 20231
  • November 20232
Info
Article :
13
UV :
PV :
Last Update :
©2020 - 2025 By Lstmxx
Framework Hexo|Theme Butterfly