2026/4/18 8:39:19
网站建设
项目流程
中国十大门户网站排行,做网站备案要多久,电子商务网站建设的具体内容,网站建设项目的流程图这个周末我失业了 。起因很简单#xff1a;公司项目原因#xff0c;我需要给订阅列表里的几千个用户发一封更新通知。 市面上的邮件营销工具#xff08;Mailchimp之类#xff09;死贵#xff0c;还要一个个导入联系人#xff1b;自己写脚本吧#xff0c;以前得折腾半天 …这个周末我失业了 。起因很简单公司项目原因我需要给订阅列表里的几千个用户发一封更新通知。 市面上的邮件营销工具Mailchimp之类死贵还要一个个导入联系人自己写脚本吧以前得折腾半天SMTP 协议、搞定并发限制、处理失败重试……想想就头秃 。正好有 Gemini 3 Pro 代码能力逆天。我就想试探一下它的底线。 结果这一试我后背发凉。我本来只想要个 Demo它直接给了我一个带连接池(Connection Pool)、任务队列(Task Queue)、甚至还顺手写了服务端渲染(SSR) 的完整全栈应用。以前我写这套东西起码得两天这次连写带调2 小时收工。今天复盘一下我是怎么压榨 Antigravity - Gemini 3 Pro 开发出这个Turbo Mail Sender的。不仅要看得下去还要骚气点我给第一个 Prompt 很简单但也很刁钻我要做一个邮件群发工具的单页 UI。要求写邮件集成 Quill 富文本编辑器。包含监控发送进度要有一个骚气的进度条和实时日志。用Tailwind CSS设计风格要轻色单栏带点微交互动画。直接给我 HTML 单文件就行。它思考了大概几分钟网络环境有点差 。它没有给我堆砌div它直接甩出了基于 Tailwind 的完整布局甚至贴心地加上了keyframes fadeInUp入场动画。看看这个生成的 UI 代码片段它连backdrop-filter和shadow的细节都处理好了style keyframes fadeInUp { from { opacity: 0; transform: translateY(6px);} to { opacity:1; transform: translateY(0); } } .log-entry { opacity:0; transform:translateY(6px); animation: fadeInUp 420ms ease forwards; } /* 进度条的光泽动画这审美绝了 */ keyframes shimmer { 0% { background-position: -200px 0 } 100% { background-position: 200px 0 } } /style最骚的是它连 JS 里的富文本编辑器初始化都帮我写好了甚至考虑到了 SSR 的数据回填逻辑。这哪里是 AI这简直就是自带 3 年经验的前端同事。从普通的脚本到工程化UI 画好了接下来是后端。这里才是见真章的地方。 很多新手写发邮件脚本就是写个for循环调用sendMail。结果就是发 100 封后 IP 被封或者内存溢出。我给 Gemini 的 Prompt 是后端用Express Nodemailer。注意我要发送几万封邮件。必须有连接池 (Connection Pooling)不能每次发送都握手。必须有生产者-消费者队列控制并发数Concurrency。失败要自动重试。给我写出架构级的代码。如果是以前的 AI大概率会给我瞎编一个队列。 但它给出的server.js让我这个老前端都挑不出毛病。自动实现了连接池缓存它自己封装了一个TransporterCache类防止重复创建 SMTP 连接。这波操作直接把性能拉满了。// server.js 核心片段连接池 class TransporterCache { constructor() { this.cache new Map(); } get(host, port, user, pass) { const key ${user}${host}; if (this.cache.has(key)) return this.cache.get(key); // Gemini 居然知道开启 pool: true 选项 const transporter nodemailer.createTransport({ pool: true, host: host, port: Number(port), secure: Number(port) 465, auth: { user, pass }, maxConnections: 3, // 自动限制最大连接数 rateLimit: 5 // 还有速率限制讲究 }); this.cache.set(key, transporter); return transporter; } }像模像样的任务队列它没有引入 Redis因为我要轻量级而是手搓了一个内存版的TaskManager和Worker。// server.js 核心片段消费者 Worker class Worker { constructor() { setInterval(() this.tick(), 500); } tick() { // 经典的消费逻辑控制并发数 while (taskManager.running CONFIG.CONCURRENCY taskManager.queue.length 0) { const id taskManager.queue.shift(); const task taskManager.getTask(id); if (task) this.processTask(task); } } // ...发送与重试逻辑 }看到这段代码时我意识到Gemini 不仅仅是在翻译需求它更懂架构。最后的细节修改做到这里工具已经能用了。但我故意刁难了一下 Gemini现在的配置SMTP服务器、端口每次刷新页面就没了体验太差。但我不想用数据库。你想办法解决一下。Gemini 3 Pro 给出的方案是SSR (服务端渲染) LocalStorage 双重兜底。它直接修改了server.js的/路由在返回 HTML 之前把 URL 参数里的配置通过正则替换注入到 HTML 中。不用数据库却实现了配置持久化的错觉。// server.js极其暴力的正则替换 SSR简单粗暴但有效 if (host) { html html.replace(/idsmtpHost\stypetext\svalue[^]*/, idsmtpHost typetext value${host}); }说实话这种正则替换虽然看起来很脏但在这种微型工具里不仅省事而且性能极高。AI 这种能力知道是小工具就不上重型框架才是最可怕的。成果与开源最终这个Turbo Mail Sender具备了以下能力高并发发送连接池 异步队列。实时可视化能看到每一封邮件的发送状态、耗时。️智能重试遇到网络抖动自动重发。CSV 导入支持批量导入收件人。