- 博客(201)
- 资源 (29)
- 收藏
- 关注
原创 Node.js Conf 配置库要点分析 和 使用注意事项
electron-store 是一个基于 Node.js 配置库 Conf 的 Electron 封装,简化了主进程和渲染进程间的配置通信。它支持文件监听、加密存储、嵌套属性访问等功能,并通过 JSON Schema 确保配置格式正确。electron-store 在渲染进程中通过 IPC 通信获取配置,而在主进程直接访问。关键特性包括:版本迁移、配置默认值、实时监听文件改动等。使用时需注意文件权限和性能开销,适合需要跨进程共享配置的 Electron 应用。
2025-06-12 00:14:13
387
原创 Electron 防脱壳转二进制 JSC 打包过程以及踩坑记录
本文探讨了JavaScript代码加固方案,重点分析了.jsc二进制文件的保护机制。相比传统混淆工具,二进制打包通过V8引擎将代码转换为字节码,破坏源代码结构,极大提高了反编译难度。文章详细介绍了利用bytenode库和webpack插件实现代码二进制化的技术方案,包括关键步骤:通过vm.Script接口生成字节码、确保Node.js版本一致性、在webpack构建流程中插入字节码转换等。作者分享了实践中的踩坑经验,如解决webpack插件依赖冲突问题,并指出未来可迁移到electron-vite等成熟框架
2025-06-09 23:34:38
710
原创 Express 集成Sequelize+Sqlite3 & 默认开启WAL & 进程间通信 Conf & 打包成可执行 exe 文件
本文介绍了在Express中集成Sequelize操作Sqlite3数据库的技术实现方案。主要内容包括:1) 通过SequelizeCollector类集中管理数据库连接,实现模型同步和WAL模式开启;2) 采用单例模式封装模型创建过程,优化数据库操作;3) 解决跨平台打包问题,包括CentOS环境配置和macOS路径处理。技术亮点在于通过WAL模式实现读写并发,以及主进程与Express服务的底层通信机制。文中提供了关键代码实现,涵盖模型定义、连接管理和服务层操作,并分享了跨平台打包的实践经验
2025-06-03 18:51:46
1138
原创 ELectron 中 BrowserView 如何进行实时定位和尺寸调整
BrowserView 是继 Webview 后推出来的高性能多视图管理工具,与 Webview 最大的区别是,Webview 是一个 DOM 节点,依附于主渲染进程的附属进程,Webview 节点的崩溃会导致主渲染进程的连锁反应,会引起软件的崩溃。而 BrowserView 可以理解为比主渲染窗口更简洁的窗口,砍掉了一些窗口没必要的功能,只保留渲染视窗,且这个视窗是独立于主渲染进程的,但其所处层次和相对位置,取决于其追加进来的主渲染窗口。
2025-05-27 12:15:57
1296
原创 安装软件找不到下载目录,报Failed to get ‘downloads‘ path 简单处理方法
用户在删除下载目录后,无法找到下载文件。解决方法是在用户的电脑目录下查找或新建一个名为“Downloads”的文件夹。如果该文件夹已存在,可以通过文件资源管理器找到“下载”快捷方式,右键点击属性,选择“位置”并点击“还原默认值”,系统会自动将路径定位到新建的Downloads文件夹。此方法简单有效,能够快速恢复下载功能。
2025-05-22 10:37:00
312
原创 Electron 主进程中使用Worker来创建不同间隔的定时器实现过程
为了优化主进程中的定时任务执行,避免setInterval阻塞主线程,本文提出了一种基于Worker线程的定时任务管理方案。通过将定时任务封装在独立的Worker线程中,实现了任务的隔离性、可靠性和可管理性。主进程通过HeartbeatClock类与Worker通信,注册和注销定时事件,Worker则负责定时触发事件并通知主进程执行相应的回调函数。这种设计不仅提高了定时任务的执行效率,还简化了主进程的代码结构,便于扩展和维护。具体实现包括HeartbeatClock类的定义、Worker线程的初始化与通信机
2025-05-15 17:57:46
524
原创 FastAPI 实现 Express 框架的 p-limit(1) 防并发操作
本文将Electron主进程中的CURD逻辑从Express迁移到FastAPI,确保主进程与子进程解耦且稳定运行。技术选型上,使用FastAPI替代Express,并利用asyncio.Semaphore(1)进行并发控制。实现步骤包括创建FastAPI实例、定义请求处理函数、启动服务以及编写客户端代码进行测试。注意事项包括Python版本与openssl的兼容性问题,建议使用Python 3.11及以上版本以避免异步支持问题。此外,提供了conda创建基于openssl 3的Python 3.11环境的
2025-05-15 11:30:59
416
原创 利用 Promise 实现消息队列入库,利用内置事件循环来保证事务提交
在Electron中使用Webview进行多开时,多个Webview向渲染进程发送数据可能导致数据库的“脏读”问题。为解决此问题,提出了两种策略:不使用Promise和使用Promise。不使用Promise的方案通过维护点击顺序队列和结果存储来处理异步请求,而使用Promise的方案则通过Promise链来确保请求按顺序处理,代码更加简洁直观。此外,针对本地SQLite的并发锁问题,提出了开启WAL模式、读写分离、单库多表并行写以及使用p-limit进行限流等解决思路。这些方法有效提升了数据处理的顺序性和
2025-05-14 09:32:18
203
原创 从 JIT 即时编译一直讲到CGI|FastGGI|WSGI|ASGI四种协议的实现细节
本文深入探讨了JIT(即时编译)技术及其在不同编程语言中的应用,特别是PHP、Java和Python。JIT通过在程序运行时将频繁执行的代码编译成机器码来提升性能,尤其适用于常驻内存的应用,如Java服务和PHP的Swoole/Workerman。文章还对比了CGI和FastCGI协议,解释了它们在Web服务器中的应用场景和性能差异。此外,文章详细介绍了Python的WSGI和ASGI服务器,如Gunicorn和Uvicorn,以及它们如何与通用Web服务器(如Nginx)协同工作,以优化Python We
2025-05-12 19:46:04
939
原创 Windows11 VS code 安装 Cline 调用 Github MCP 配置过程坑点汇总
为了调研 MCP 在 windows 上如何使用本地的命令执行一些操作而实现自动化的过程,在 B 站视频的指导下,进行相应填坑过程,最终运行起来,并实现 github 自动化编程并提交代码的过程。
2025-05-05 18:42:36
1438
原创 大前端开发——前端知识渐变分层讲解 & 利用金字塔原理简化前端知识体系
看似非常复杂的大前端开发,最终无非就是在解决两个问题:解决不同层级下的通信问题同页面下的通信,例如 vue 的父子通信,或者 vuex不同页面下的通信,例如谷歌插件不同页面的 chrome.runtime.sendMessage不同进程下的通信,例如 electron 的 ipcRenderer.invoke不同服务下的通信,例如 electron 的 main.js 和本地 http.exe解决数据的存储问题同页面下的数据存储,例如 vuex 和 localStorage。
2025-04-29 21:53:30
1085
原创 Python 环境管理工具使用差别比对文档
Python 环境管理工具是现代 Python 开发中不可或缺的组成部分,用于隔离项目依赖、确保环境可重现性和管理不同 Python 版本。随着 Python 生态的扩展,环境管理工具的功能和设计理念差异显著。本报告调研了主流 Python 环境管理工具,包括 uv、conda、venv、virtualenv、Poetry、Pipenv 和 pdm,并重点分析 conda 在环境管理中的独特性和与其他工具的差异。报告基于功能、性能、存储效率、隔离机制和适用场景进行对比,旨在为开发者选择合适的工具提供参考。
2025-04-29 12:29:55
1103
原创 Papermark(多人共享文档开源代码) 和 TinyBird (类似阿里云日志)部署踩坑实录
因为对 papermark (文档共享开源代码),这个代码所用的第三方库较多,构建起来也比较复杂,部署期间发现 tinybird 这个服务,类似于阿里云日志,这里讲讲它的特点和注意事项。
2025-04-25 11:19:29
955
原创 Electron 中引入MessageChannel 大大缩短不同渲染进程和 Webview 各组件 1o1的通信链路
Webview 和 Renderer 是同级的,两者只有一个关联关系,也即 Webview 在那个 Renderer 中展现的,Webview 所有运行方式以及通信方式,均与 Renderer 没有任何差别,Webview 可以直接与主进程通信,这个概念特别重要,否则就会绕一大圈,Electron 官网给了一个 sendToHost API,误解性很大,让我们误以为只有 sendToHost 才能与 Webview 依附的渲染通信,然后再中转给其他渲染进程或者 webview 等,实际上完全不需要。
2025-04-17 17:09:05
869
原创 纯用Grok 实现一个多 iframe 互聊对话框 利用父子框架通信和MessageChannel 实现 n 个 iframe 的动态创建——通用编码习惯
在多iframe通信过程中,如果iframe层层嵌套的情况下,就如vue的组件一样,出现了父传子的回传地狱问题,Vue引入了Vuex来进行处理,而Vue只是单页面应用,所有的组件共享同一个环境,Vuex实现就有了基础,但是对于不在同一个环境下框架来说,又怎么能实现多iframe的互联互通,就成了一个比较复杂的问题,因此HTML5那群人也是这么想的,又回到了那句话,一切的开发问题,都源自于个人知识的不足,若你从未见过MessageChannel,又如何想起来去用,只会吭哧吭哧地自己在那传来传去。
2025-04-17 11:50:24
815
原创 Java NIO & Java 虚拟线程(微线程)与 Go 协程的运行原理不同 为何Go 能在低配机器上承接10万 Websocket 协议连接
Java NIO(New Input/Output) 是Java 1.4(2002年)引入的一种非阻塞、面向缓冲区的输入输出框架,旨在提升Java在高性能和高并发场景下的I/O处理能力。它相比传统的 Java IO(java.io包)更加高效,尤其在网络编程中,例如需要处理大量连接的服务器(如WebSocket、HTTP或TCP服务器)。Java NIO的核心组件Channel(通道):类似传统IO中的流,但支持非阻塞操作,例如SocketChannel和ServerSocketChannel。
2025-04-17 10:43:54
811
原创 window.postMessage使用第三参数transfer解决大数据传输中的内存溢出问题
普通 web 开发时,不会遇到大数据传输问题,因为不牵涉到大文件在多页面之间的通信,但是在开发 electron 产品时,我们会增强 web 页面的能力,同时多页面之间或者多进程之间我们需要数据传递,在早期开发中,我们就遇到这样的坑,用 window.postMessage 来传输大文件,导致内存不断上涨,最终导致内存溢出。既然如此,postMessage 应该如何使用,才是最佳实践呢?因此,我们需要先对window.postMessage做深入的学习和了解
2025-04-16 17:07:26
996
原创 Webstorm 使用搜不到node_modules下的JS内容 TS项目按Ctrl无法跳转到函数实现
Webstorm 使用搜不到node_modules下的JS内容 TS项目按Ctrl无法跳转到函数实现
2025-04-09 17:42:49
333
原创 免费Deepseek-v3接口实现Browser-Use Web UI:浏览器自动化本地模拟抓取数据实录
browser use webui 快捷本地部署,采用pycharm + conda 创建python环境,避开python环境设置问题,通过设置pycharm创建运行环境,保证联网正常
2025-04-07 17:27:10
2255
1
原创 利用本地 Express Web 服务解决复杂的 Electron 通信链路的问题
我们在开发 Electron 时发现了 Electron 进程间通信(IPC)的弊端,弊端的主要来源是 webview 到 Main 的通信链路过长,需要从 page 发到 proload.js 文件,再从 preload 发到 render,再从 render 发送到 Main,这个过程中,需要反复定义类同命名的事件进行中转,大大降低了开发效率,还无意中增加了 render 进程的内存耗费。
2025-04-07 12:58:54
710
原创 利用 Chrome devTools Source Override 实现JS逆向破解案例
之前讲解 Chrome 一大强势技术 override 时,给的案例貌似没有给大家留下多深的印象其实这个超厉害的,任何一项小技术在 buffer 叠加的基础下才能发挥威力,若单单看到这一项技术,就局限了。
2025-04-01 23:26:32
1575
原创 linux如何与windows进行共享文件夹开发,不用来回用git进行拉来拉去,这个对于swoole开发者来说特别重要
linux那边安装samba,此处不再赘述,百度一堆教程,设置一个最简单的共享文件夹,一般是放nginx运行代码的地方,我的是web,将web设置用户为samba(你创建的,直接用root不行),权限设置为777,要加-R,迭代设置。你可以用phpstorm打开这个盘中的文件夹,phpstorm操作文件代码时会自动同步到linux那边的服务器,非常爽。(补充):samba配置。
2025-04-01 14:27:11
316
原创 WSL 2 轻量级安装 Centos7 实现无缝衔接,hyperf 开发再也不用 window 映射共享文件夹了
在很久很久以前,如果想要开发 php 的 hyperf 框架,你需要先装个 virtualbox,然后再安装一个 centos,再在 centos 里面配置 ssh,然后 virtualbox 再来个桥接网络,最后再在 centos 安装一个 smb 共享文件夹服务,之后再在 windows 这边配置文件夹映射到 centos 中的 smb.service 服务共享的文件夹,实现代码同步,一阵操作猛如虎,把新人搞得头晕眼花,只要在这个环节中,卡住任何一点,新人就放弃了。启用 CEntOS7 系统。
2025-04-01 13:25:37
572
原创 【避坑指南】RAGFlow + Ollama + Deepseek 构建本地知识库
大模型在处理数据前会有一个前置数据分析,这个前置分析就像 JS 中的生命周期函数一样,可以以配置的方式,让大模型在前置分析时调用,前置分析本身算是一个 tokens 拆解匹配模型,叫 embedding(嵌入)顾名思义就是前置嵌入的意思。在这个前置模型中,如果能事先训练一些 token 出来,那么嵌入模型递交给大模型时就带着这些 token 过去了,这个过程就叫本地知识库微调。为何叫微调呢?因为前置嵌入模型可以容纳的上下文长度有限,所以就意味着 token 有限,所以能塞在前置分析的知识库也就有限,
2025-03-31 22:42:32
1325
1
原创 conda安装python 遇到 pip is configured with locations that require TLS/SSL问题本质解决方案
以前写了一篇文章,不过不是专门为了解决这个问题的,但是不能访问pip install 不能安装来自https 协议的包问题几乎每次都出现,之前解决方案只是治标不治本根本原因在于,你用conda安装不同版本的python时,如果没指定配套的openssl版本,那么python就会默认使用你系统安装的openssl版本因为你安装conda的时候,conda默认使用python12版本作为默认引擎,而python12使用的openssl版本较高,导致你创建一个python3.8版本时,就会报错。
2025-03-28 23:55:21
580
原创 【面试题】Promise在异步操作中到底扮演什么角色?若将其理解为状态管理器,有哪些更丰富的应用场景?
很多同学都不理解Promise的,Promise一度都是前端同学的摆设,基本都是封装一下Ajax请求就完了,其他的也就没用过了,这个面试题是一个启发式面试题,启发前端同学对知识有一种思考,真正理解知识,在理解的基础上,真正用起来。如果你仅仅知道这玩意解决了回调地狱的问题,那就优点太小瞧了Promise重要性,其实它比你想象的更重要,更强大,更不可或缺。
2025-03-27 19:23:35
712
原创 【面试题】利用Promise实现Websocket阻塞式await wsRequest() 请求
目标:实现一个类似 HTTP 请求的阻塞式调用接口(如 await wsRequest(...)),让开发者无需手动处理 WebSocket 的事件回调,而是通过 Promise 和 async/await 获得同步体验。onmessage:解析收到的消息,提取 requestId 和 data,通过 requestMap 找到对应的 Promise 并完成它。用 Promise 封装请求,监听 onmessage 时根据 requestId 完成对应的 Promise。
2025-03-27 17:53:54
952
原创 【面试题】在 CSS 中,实现一个 div 中的子 div 水平垂直居中
兼容性较 Flexbox 更差(IE11 需要前缀)。特点:类似 Flexbox,但更强大,适合复杂布局。7. 使用 line-height(单行文本居中)需要额外调整子元素为 inline-block。特点:手动计算偏移量,适合固定尺寸场景。只适用于单行内容,多行或复杂内容不适用。特点:简单、直观,现代浏览器支持良好。兼容性稍差(IE9 及以下不支持)。兼容性好(支持老浏览器)。特点:利用表格特性,较老式方法。兼容性极佳(支持老旧浏览器)。特点:适合单行文本或简单内容。简单,适合文本居中。
2025-03-27 17:45:35
542
原创 Git Bash 设置Notepad++作为默认编辑器
最简单的方式就是重新安装git,然后在选择编辑器的时候,勾选notepad++即可。网上搜的时候发现别人搞得有点复杂。
2025-03-26 17:33:22
521
原创 V8引擎源码编译踩坑实录
d8.exe 是 V8 引擎编译生成的一个可执行文件,作为调试壳(debug shell)存在,其作用总结如下:运行 JavaScript:提供一个独立的 JavaScript 执行环境,可直接运行代码或脚本文件。调试工具:用于分析 V8 的字节码、优化过程、内存布局等,帮助开发者调试和研究。研究 V8:适合探索 V8 的编译、执行和垃圾回收机制。轻量实验:无标准库和 DOM,专注于 V8 核心功能,适合教育和底层实验。
2025-03-24 22:40:33
1069
原创 【含代码】逆向获取 webpack chunk 下的__webpack_require__ 函数,获悉所有的模块以及模块下的函数
Webpack 打包后的代码是不会直接暴露 __webpack_require__ 函数,目的是为了避免污染全局变量同时也为了保护 webpack 的打包后的模块都隐藏在闭包函数里,达到数据的安全性。而有时我们为了测试某个函数,想直接获取这个内置函数,同时保证这个内置函数能使用其所带的上下文,若单独构建这个函数,创建上下文,难度非常之大,因为这个函数的上下文都在闭包函数里。而__webpack_require__.m 则可以提取所有的模块,所以拿到 __webpack_require__ 是关键。
2025-01-21 18:36:11
1614
原创 Webpack 5 混淆插件terser-webpack-plugin生命周期作用时机和使用注意事项
Terser(简要的/简短的) 混淆依据混淆是发生在代码已经 bundle 之后的事情变量或者函数在被引用或赋值时才能被混淆孤立的函数或者变量可能会被移除,但不会被混淆,要通过显式地引用
2025-01-14 19:10:37
981
原创 Electron-Vue 开发下 dev/prod/webpack server各种路径设置汇总
在实际开发中,我发现团队对于这几个路径的设置上是纯靠猜的,通过一点点地尝试来找到可行的路径,这是不应该的,我们应该很清晰地了解这几个概念,以下通过截图和代码进行细节讲解。
2024-12-19 20:25:29
1195
原创 【附源码】Electron Windows桌面壁纸开发中的 CommonJS 和 ES Module 引入问题以及 Webpack 如何处理这种兼容
在尝试让 ChatGPT 自动开发一个桌面壁纸更改的功能时,发现引入了一个 wallpaper 库,这个库的入口文件是 index.js,但是 package.json 文件下的 type:"module",这样造成了无论你使用 import from 还是 require,都会报 ES Module 引入错误,针对于这个问题,让 GPT 给了很多方案,但是都没有解决实质问题,最终,经过多次测试,发现必须借助打包工具 webpack 才能搞定这个事情。
2024-12-18 17:41:54
1390
1
原创 Electron-Vue 主进程远程调试 & Webpack/Webstorm 打包配置细节记录
很多人应该都不会electron主进程调试,electron-vue 框架给了一种node调试的一种方法,这里记录下来,对很多人应该都有用,另外,对于webstorm对electron的支持,这里也记录一下,方便大家提高开发效率
2024-12-17 01:00:25
1063
原创 Webpack 5 @babel/preset-env 与 @babel/polyfill && core-js:3 regenerator-runtime 之间的关系
最早有 Babel polyfill 的概念是接触 ES6 语法时,大概是 2016 年,被 polyfill 坑的时候是 2021 年开发谷歌插件时,经过 webpack 打包的代码中,我竟然看到有东西在重写 Promise,导致了原生的 Promise 不可用,后来我就开始对 Polyfill 进行了解,本文主要还是想彻底搞明白 Babel 怎么针对不同版本下的 ES 高级语法的支持和转化问题,怎么让自己的代码尽可能地少被 Babel 转化,从而利用浏览器原生 API 来提高代码运行速度,以及缩短打包时
2024-12-13 17:40:31
1114
原创 Electron-Vue 框架的构成拆解 & 动态 Webpcak 5 打包
在学习 Chromium 源码时发现,Electron 就相当于在 Chromium 源码的基础之上,又追加了 Node.js 的运行环境,并且使得 Node.js 和 Chromium 网页环境可以互相通信,互相取用各自的 API,形成了一个新的浏览器应用,也即 Electron 是 Chromium 浏览器的一个超集,而且 Electron 和 Chrome 内核的对应关系可能更为复杂,并不是很轻易就替换新的 Chromium 内核打造出来新的 Electron 衍生版本的。那是肯定可以执行的。
2024-12-12 16:44:46
1369
原创 WADesk 升级 Webpack5 一些技术细节认识5和4的区别在哪里
因为注入脚本是一整套塞进去的,字体,css,html 都应该打包在一个 js 里面,以 base64 方式注入,其中 dataUrlCondition 这个配置非常棒,只要将 maxSize 设置得足够大,就可以将字体文件也打包到 js 文件里面去,这样就特别方便 DOM 的注入和挂载。因为我们设定了 babel 的兼容 ES12,所以下面这些转化基本都用不到,因为 Chrome 能支持,所以也不需要这些插件,你可以直接用最新的语法,如?批量移除它们,proposal 这些都已经被作为正式版包使用了。
2024-12-11 23:08:53
927
原创 【2024-12】VS2022 编译 Chromium浏览器源码坑点汇总
探索浏览器参数开发时,发现第一步 Chromium 源码编译这块就坑点很多,这里统一记录下,以便未来碰到类似的 Visual Studio 编译时,会遇到同样的问题。遇到问题的关键点,主要还是对于 VS IDE 的不熟练,以及对 C++相关知识的欠缺导致。基于 B 站 Up 主的这个 Chromium 源码编译视频合集进行整理。
2024-12-06 15:17:08
1218
原创 【附源码】Electron-Vue 老版脚手架升级Webpack到5 Babel7 Vue2 填坑过程 & Webpack 批量载入配置实现自动化规范化打包过程
结尾遗留的 Webpack 升级到 5 的问题继续开展,在独立构建 Webpack5+Vue2 脚手架成功的前提下,理论上 Electron-Vue 升级到 Webpack5 不应该有任何问题,本文重新整理思路,以肯定可以升级成功的结论前提下,继续探索问题所在,同时打算在解决问题后,重新整理 Webpack 批量构建过程。
2024-12-03 00:14:44
669
阿里云点播URL鉴权处理流程
2019-11-06
个人总结搭建git服务器仓库采用无密登录方式以及TortoiseGit的用法
2018-11-17
phpstorm 远程调试,远程网页调试,使用远程php命令进行本地debug调试
2019-03-27
phpstorm远程调试基于swoole的hyperf框架.docx
2020-07-31
windows10环境下php使用selenium+chromedriver来模拟浏览器抓取(坑已填完)
2020-04-15
阿里云OSS临时授权STS直传视频文件到OSS服务器教程(含所需的核心js代码)
2018-12-30
php+html5(原代码改进)多进程实现大视频文件无刷新上传
2018-12-26
win10装PHP7.2的Imagick扩展.zip
2019-08-22
phpstorm常用操作完整说明文档图文word格式个人总结实战使用
2018-11-17
thinkphp5 console 调试启动脚本
2018-12-09
centos7 rpm快速安装rabbitmq3.6.5 php安装amqp扩展 避开坑 一步到位安装流程
2020-07-25
PHP 分片下载大文件/视频兼容图片下载大文件迁移设计方案
2019-03-21
集成IK中文搜索的elasticsearch1.7.4完整运行包直接放linux任意文件夹下即可运行
2018-11-17
win10 协同centos7 共享文件夹方式 实现phpstorm下的swoole的远程debug调试
2020-07-25
centos7 rpm快速安装rabbitmq3.8.5 php安装amqp扩展 添加延迟队列扩展 避开坑
2020-07-27
腾讯课堂自建composer安装包图文详细教程升级版
2018-12-28
爱之谷源代码升级修改版适配PHP5.6修复之前BUG
2016-04-16
阿里云OSS ali-oss 6.0 npm代码包带案例修复版本 编译打包js,可以直接引入使用
2019-11-02
emoji入库mysql注意事项除了更改utf8mb4最大的坑在这里
2018-11-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人