标签 Next.js 下的文章

一个突然冒出的想法,我现在用 YAML 文件维护我的个人职业 timeline ,借助 Resume-as-Code 这个项目自动生成高度匹配目标岗位 JD 的简历,但感觉少了点什么,太单调,不够好看。

于是我设计了 TimeFlux ,可以将个人 timeline 的 YAML 文件转为一个 Next.js 交互展示网站。

分享一下,如果喜欢可以点点 star ,感谢感谢 :)

Beautiful, YAML-driven personal timeline generator for developers.

TimeFlux is a modern, minimalist timeline generator designed for developers to showcase their professional journey, projects, and achievements. Just manage your career data in a simple YAML file, and TimeFlux handles the rest—delivering a high-performance, interactive, and visually stunning web experience.

Vercel 最近发布了 React 最佳实践库,将十余年来积累的 React 和 Next.js 优化经验整合到了一个指南中。

其中一共包含8 个类别、40 多条规则

这些原则并不是纸上谈兵,而是 Vercel 团队在 10 余年从无数生产代码库中总结出的经验之谈。它们已经被无数成功案例验证,能切实改善用户体验和业务指标。

以下将是对你的 React 和 Next.js 项目影响最大的 10 大实践。

1. 将独立的异步操作并行

请求瀑布流是 React 应用性能的头号杀手。

每次顺序执行 await 都会增加网络延迟,消除它们可以带来最大的性能提升。

❌ 错误:

async function Page() {
  const user = await fetchUser();
  const posts = await fetchPosts();
  return <Dashboard user={user} posts={posts} />;
}

✅ 正确:

async function Page() {
  const [user, posts] = await Promise.all([fetchUser(), fetchPosts()]);
  return <Dashboard user={user} posts={posts} />;
}

当处理多个数据源时,这个简单的改变可以将页面加载时间减少数百毫秒。

策略1:并行异步操作

2. 避免桶文件导入

从桶文件导入会强制打包程序解析整个库,即使你只需要其中一个组件。

这就像把整个衣柜都搬走,只为了穿一件衣服。

❌ 错误:

import { Check, X, Menu } from "lucide-react";

✅ 正确:

import Check from "lucide-react/dist/esm/icons/check";
import X from "lucide-react/dist/esm/icons/x";
import Menu from "lucide-react/dist/esm/icons/menu";

更好的方式(使用 Next.js 配置):

// next.config.js
module.exports = {
  experimental: {
    optimizePackageImports: ["lucide-react", "@mui/material"],
  },
};

// 然后保持简洁的导入方式
import { Check, X, Menu } from "lucide-react";

直接导入可将启动速度提高 15-70%,构建难度降低 28%,冷启动速度提高 40%,HMR 速度显著提高。

策略2:避免桶文件导入

3. 使用延迟状态初始化

当初始化状态需要进行耗时的计算时,将初始化程序包装在一个函数中,确保它只运行一次。

❌ 错误:

function Component() {
  const [config, setConfig] = useState(JSON.parse(localStorage.getItem("config")));
  return <div>{config.theme}</div>;
}

✅ 正确:

function Component() {
  const [config, setConfig] = useState(() => JSON.parse(localStorage.getItem("config")));
  return <div>{config.theme}</div>;
}

组件每次渲染都会从 localStorage 解析 JSON 配置,但其实它只需要在初始化的时候读取一次,将其封装在回调函数中可以消除这种浪费。

策略3:延迟状态初始化

4. 最小化 RSC 边界的数据传递

React 服务端/客户端边界会将所有对象属性序列化为字符串并嵌入到 HTML 响应中,这会直接影响页面大小和加载时间。

❌ 错误:

async function Page() {
  const user = await fetchUser(); // 50 fields
  return <Profile user={user} />;
}

("use client");
function Profile({ user }) {
  return <div>{user.name}</div>; // uses 1 field
}

✅ 正确:

async function Page() {
  const user = await fetchUser();
  return <Profile name={user.name} />;
}

("use client");
function Profile({ name }) {
  return <div>{name}</div>;
}

只传递客户端组件实际需要的数据。

策略4:最小化RSC边界

5. 动态导入大型组件

仅在功能激活时加载大型库,减少初始包体积。

❌ 错误:

import { AnimationPlayer } from "./heavy-animation-lib";

function Component() {
  const [enabled, setEnabled] = useState(false);
  return enabled ? <AnimationPlayer /> : null;
}

✅ 正确:

function AnimationPlayer({ enabled, setEnabled }) {
  const [frames, setFrames] = useState(null);

  useEffect(() => {
    if (enabled && !frames && typeof window !== "undefined") {
      import("./animation-frames.js").then((mod) => setFrames(mod.frames)).catch(() => setEnabled(false));
    }
  }, [enabled, frames, setEnabled]);

  if (!frames) return <Skeleton />;
  return <Canvas frames={frames} />;
}

typeof window 可以防止将此模块打包用于 SSR,优化服务端包体积和构建速度。

策略5:动态导入组件

6. 延迟加载第三方脚本

分析和跟踪脚本不要阻塞用户交互。

❌ 错误:

export default function RootLayout({ children }) {
  useEffect(() => {
    initAnalytics();
  }, []);

  return (
    <html>
      <body>{children}</body>
    </html>
  );
}

✅ 正确:

import { Analytics } from "@vercel/analytics/react";

export default function RootLayout({ children }) {
  return (
    <html>
      <body>
        {children}
        <Analytics />
      </body>
    </html>
  );
}

在水合后加载分析脚本,优先处理交互内容。

策略6:延迟加载脚本

7. 使用 React.cache() 进行请求去重

防止服务端在同一渲染周期内重复请求。

❌ 错误:

async function Sidebar() {
  const user = await fetchUser();
  return <div>{user.name}</div>;
}

async function Header() {
  const user = await fetchUser(); // 重复请求
  return <nav>{user.email}</nav>;
}

✅ 正确:

import { cache } from "react";

const getUser = cache(async () => {
  return await fetchUser();
});

async function Sidebar() {
  const user = await getUser();
  return <div>{user.name}</div>;
}

async function Header() {
  const user = await getUser(); // 已缓存,无重复请求
  return <nav>{user.email}</nav>;
}

策略7-8:缓存去重

8. 实现跨请求数据的 LRU 缓存

React.cache() 仅在单个请求内有效,因此对于跨连续请求共享的数据,使用 LRU 缓存。

❌ 错误:

import { LRUCache } from "lru-cache";

const cache = new LRUCache({
  max: 1000,
  ttl: 5 * 60 * 1000, // 5 分钟
});

export async function getUser(id) {
  const cached = cache.get(id);
  if (cached) return cached;

  const user = await db.user.findUnique({ where: { id } });
  cache.set(id, user);
  return user;
}

这在 Vercel 的 Fluid Compute 中特别有效,多个并发请求共享同一个函数实例。

9. 通过组件组合实现并行化

React 服务端组件在树状结构中按顺序执行,因此需要使用组合对组件树进行重构以实现并行化数据获取:

❌ 错误:

async function Page() {
  const data = await fetchPageData();
  return (
    <>
      <Header />
      <Sidebar data={data} />
    </>
  );
}

✅ 正确:

async function Page() {
  return (
    <>
      <Header />
      <Sidebar />
    </>
  );
}

async function Sidebar() {
  const data = await fetchPageData();
  return <div>{data.content}</div>;
}

这样一来,页眉和侧边栏就可以并行获取数据了。

10. 使用 SWR 进行客户端请求去重

当客户端上的多个组件请求相同的数据时,SWR 会自动对请求进行去重。

❌ 错误:

function UserProfile() {
  const [user, setUser] = useState(null);

  useEffect(() => {
    fetch("/api/user")
      .then((r) => r.json())
      .then(setUser);
  }, []);

  return <div>{user?.name}</div>;
}

function UserAvatar() {
  const [user, setUser] = useState(null);

  useEffect(() => {
    fetch("/api/user")
      .then((r) => r.json())
      .then(setUser);
  }, []);

  return <img src={user?.avatar} />;
}

✅ 正确:

import useSWR from "swr";

const fetcher = (url) => fetch(url).then((r) => r.json());

function UserProfile() {
  const { data: user } = useSWR("/api/user", fetcher);
  return <div>{user?.name}</div>;
}

function UserAvatar() {
  const { data: user } = useSWR("/api/user", fetcher);
  return <img src={user?.avatar} />;
}

SWR 只发出一个请求,并将结果在两个组件之间共享。

11. 总结

这些最佳实践的美妙之处在于:它们不是复杂的架构变更。大多数都是简单的代码修改,却能产生显著的性能改进。

一个 600ms 的瀑布等待时间,会影响每一位用户,直到被修复。

一个桶文件导入造成的包膨胀,会减慢每一次构建和每一次页面加载

所以越早采用这些实践,就能避免积累越来越多的性能债务。

总结:立即行动

现在开始应用这些技巧,让你的 React 应用快如闪电吧!

我是冴羽,10 年笔耕不辍,专注前端领域,更新了 10+ 系列、300+ 篇原创技术文章,翻译过 Svelte、Solid.js、TypeScript 文档,著有小册《Next.js 开发指南》、《Svelte 开发指南》、《Astro 实战指南》。

欢迎围观我的“网页版朋友圈”,关注我的公众号:冴羽(或搜索 yayujs),每天分享前端知识、AI 干货。

大家好,我是 Immerse,一名独立开发者、内容创作者、AGI 实践者。

关注公众号:沉浸式AI,获取最新文章(更多内容只在公众号更新)

个人网站:https://yaolifeng.com 也同步更新。

转载请在文章开头注明出处和版权信息。

我会在这里分享关于编程独立开发AI干货开源个人思考等内容。

如果本文对您有所帮助,欢迎动动小手指一键三连(点赞评论转发),给我一些支持和鼓励,谢谢!


Vercel 开源了一个项目,叫 agent-skills。

他们把团队积累的 React、Next.js 开发经验,打包成了 AI 可以直接调用的技能包。

写代码时,AI 会自动检查性能问题、可访问性、最佳实践。相当于自动 Code Review。

3 个技能包

react-best-practices:40 多条规则,分 8 个类别。

包括消除请求瀑布流、优化包体积、服务端性能、客户端数据获取。每条规则标注优先级(Critical、High、Medium)。

web-design-guidelines:100 多条规则。

涵盖可访问性、焦点状态、表单处理、动画、排版、图片、性能、导航、暗黑模式、触控交互、国际化。

vercel-deploy-claimable:在聊天窗口直接部署到 Vercel。

支持 40 多种框架,部署完给预览地址和认领地址。

安装和使用

npx add-skill vercel-labs/agent-skills

装完不需要配置,AI 自动检测使用场景。写 React 组件时自动检查性能,说要部署时自动调用部署功能。

工具支持

这个思路的价值

把经验和最佳实践结构化,让 AI 能理解和执行。

比文档好用,AI 会在写代码时主动提醒你。这些技能遵循 Agent Skills 标准,是开放格式。


项目地址:https://github.com/vercel-labs/agent-skills

人事小姐姐是我的饭搭子,跟我说年会要搞抽奖,问我有没有好用的在线转盘。

我随手发了几个链接给她,结果她一个个试完来吐槽:

  • Wheel of Names:不能同时转多个轮子,她想一边抽人一边抽奖品
  • 某国产转盘:广告太多,界面丑,领导看了要皱眉
  • 随机数生成器:太干了,没有仪式感

总之就是不体面,我说行吧,周末我给你写一个。

结果这一写,失控了。

刚开始想的很简单,就一个 Canvas 画个轮子,Math.random 选个结果。但写着写着开始较真:

  1. Math.random 不够随机。查了下发现如果要"公平抽奖",应该用
    crypto.getRandomValues(),这是密码学安全的随机数生成器。既然都做了,那就做对。
  2. 她要同时抽人+抽奖品。那就支持多轮盘吧,最多 6 个同时转。转完自动记录中奖历史。
  3. 中奖了的不能重复中。加了淘汰模式,中一个自动移除。
  4. 另外还加了绿幕模式,一键全屏纯绿底。
  5. 做了短链,方便分享或者保存自己定制好的转盘,用 Cloudflare Worker 写了个
    API ,转盘配置存起来生成短链,发个链接别人就能用。

做完发现功能有点多了:

  • 多转盘同时旋转
  • 权重设置(买 5 张票的人权重设 5 )
  • 淘汰模式
  • 倒计时模式( 3 、2 、1 开始!)
  • OBS 绿幕
  • 导入导出 JSON
  • 8 种语言
  • 本地自动保存

UI 也花了点心思,年会现场投屏效果挺好。暗色模式是青绿色系,亮色是橙粉系,看着挺舒
服的。

技术栈是 Next.js + React + TailwindCSS ,整了个 monorepo 用 Turborepo 管理,状态用 Nuqs 存 URL
参数方便分享。分享功能单独拆了个 Cloudflare Worker ,响应挺快的。

地址:gospinwheel.com


对了,快过年了,除了年会抽奖,其实过年聚会也能用:

  • 真心话大冒险:一个轮子选人,一个轮子选"真心话/大冒险",再来一个轮子选具体问题或任务
  • 谁洗碗:吃完年夜饭,全家人名字往里一扔,转
  • 今晚吃啥:火锅/烧烤/日料/随便,选择困难症救星
  • 该谁发红包了:下一个谁发?转盘决定,公平公正
  • 喝酒游戏:转到谁谁喝,配合淘汰模式,喝过的自动移除,雨露均沾

反正我过年准备拿这个整活了,投屏到电视上效果应该不错。

有什么建议欢迎提,毕竟本来只是帮人事做个小工具...

Nuxt 3 vs Next.js:新手选型指南与项目实战对比

当Vue遇上React,服务端渲染框架如何选择?

在现代Web开发中,两大全栈框架Nuxt 3和Next.js占据着服务端渲染(SSR)领域的主导地位。它们都提供了文件系统路由、自动代码分割、SEO优化等现代Web应用所需的核心功能,但技术选型背后的技术栈差异设计哲学却大不相同。

本文将通过对比分析,帮助前端新手理解这两大框架的区别,并提供实际的项目创建示例。


01 核心差异:Vue与React的技术栈选择

Nuxt 3与Next.js最根本的区别在于其底层技术栈

  • Nuxt 3:基于Vue 3生态系统,采用组合式API和响应式系统
  • Next.js:基于React生态系统,支持最新的React特性

这种核心差异决定了你的开发体验、学习曲线以及可用的第三方库生态。

学习曲线对比

对于完全没有前端经验的新手来说,Vue通常被认为比React学习曲线更平缓。Vue的模板语法更接近传统HTML,而React的JSX则需要适应将HTML与JavaScript混合编写的模式。

框架特性Nuxt 3Next.js
基础框架Vue 3React
路由系统文件系统路由(pages/目录)文件系统路由(app/目录)
数据获取useAsyncData, useFetch服务端组件、fetch API
状态管理Pinia (推荐)Zustand, Redux等
样式方案多种选择(CSS模块、Tailwind等)多种选择(CSS模块、Tailwind等)
部署平台Vercel、Netlify、Node服务器等Vercel(官方)、Netlify等

生态圈对比

Next.js拥有更庞大的社区和更丰富的第三方库,这得益于React本身的普及度。Nuxt 3虽然社区规模较小,但其官方模块质量很高,且与Vue生态无缝集成。


02 快速入门:创建你的第一个应用

Nuxt 3入门示例

项目初始化

# 创建Nuxt 3项目
npx nuxi@latest init my-nuxt-app
cd my-nuxt-app
npm install
npm run dev

创建页面和组件

  1. pages/index.vue中创建主页:

    <template>
      <div class="container">
     <h1>欢迎使用Nuxt 3</h1>
     <p>当前时间:{{ currentTime }}</p>
     <button @click="refreshTime">刷新时间</button>
      </div>
    </template>
    
    <script setup>
    // 使用组合式API
    const currentTime = ref('')
    
    // 获取服务器时间
    onMounted(async () => {
      const { data } = await useFetch('/api/time')
      currentTime.value = data.value
    })
    
    // 客户端交互
    const refreshTime = () => {
      currentTime.value = new Date().toLocaleString()
    }
    </script>
  2. 创建API端点server/api/time.get.ts

    export default defineEventHandler(() => {
      return new Date().toISOString()
    })

Next.js入门示例

项目初始化

# 创建Next.js项目(使用App Router)
npx create-next-app@latest my-next-app
cd my-next-app
npm install
npm run dev

创建页面和组件

  1. app/page.tsx中创建主页:

    export default function HomePage() {
      return (
     <div className="container">
       <h1>欢迎使用Next.js</h1>
       <TimeDisplay />
     </div>
      )
    }
    
    // 服务端组件:自动在服务器上运行
    async function TimeDisplay() {
      // 在服务端获取数据
      const response = await fetch('http://worldtimeapi.org/api/timezone/Asia/Shanghai')
      const data = await response.json()
      
      return (
     <div>
       <p>当前时间:{data.datetime}</p>
       <ClientComponent />
     </div>
      )
    }
    
    // 客户端组件:需要"use client"指令
    'use client'
    function ClientComponent() {
      const [count, setCount] = useState(0)
      
      return (
     <button onClick={() => setCount(count + 1)}>
       点击次数:{count}
     </button>
      )
    }

03 特性深度对比:数据获取与渲染策略

数据获取方式对比

Nuxt 3的数据获取

<template>
  <div>
    <h2>文章列表</h2>
    <div v-if="pending">加载中...</div>
    <ul v-else>
      <li v-for="post in posts" :key="post.id">
        {{ post.title }}
      </li>
    </ul>
  </div>
</template>

<script setup>
// useAsyncData用于服务端获取数据
const { data: posts, pending } = await useAsyncData(
  'posts',
  () => $fetch('https://api.example.com/posts')
)

// useFetch是useAsyncData的简写
const { data: user } = await useFetch('/api/user')
</script>

Next.js的数据获取

// 在App Router中,页面组件默认为服务端组件
export default async function PostsPage() {
  // 直接使用fetch API,Next.js会自动优化
  const response = await fetch('https://api.example.com/posts', {
    next: { revalidate: 60 } // 每60秒重新验证
  })
  const posts = await response.json()
  
  return (
    <div>
      <h2>文章列表</h2>
      <ul>
        {posts.map((post) => (
          <li key={post.id}>{post.title}</li>
        ))}
      </ul>
      <LikeButton postId={posts[0].id} />
    </div>
  )
}

// 客户端交互组件需要"use client"指令
'use client'
function LikeButton({ postId }) {
  const [likes, setLikes] = useState(0)
  
  return (
    <button onClick={() => setLikes(likes + 1)}>
      点赞 ({likes})
    </button>
  )
}

渲染策略对比

两个框架都支持多种渲染策略,但实现方式不同:

渲染模式Nuxt 3实现Next.js实现
静态生成(SSG)nuxt generateoutput: 'static'
服务端渲染(SSR)默认启用默认启用(服务端组件)
客户端渲染(CSR)<ClientOnly>组件"use client"指令
增量静态再生(ISR)通过模块实现原生支持(fetch选项)

04 实际应用场景分析

何时选择Nuxt 3?

  1. Vue技术栈项目:团队已熟悉Vue生态
  2. 快速原型开发:需要快速搭建MVP产品
  3. 内容型网站:博客、文档、营销页面
  4. 项目结构清晰:喜欢"约定优于配置"的理念

Nuxt 3优势场景示例

<!-- 快速创建SEO友好的内容页面 -->
<template>
  <div>
    <Head>
      <Title>产品介绍 - 我的网站</Title>
      <Meta name="description" :content="product.description" />
    </Head>
    
    <article>
      <h1>{{ product.title }}</h1>
      <!-- 内容自动渲染 -->
      <ContentRenderer :value="product" />
    </article>
  </div>
</template>

<script setup>
// 自动根据文件路径获取内容
const { data: product } = await useAsyncData('product', () => 
  queryContent('/products').findOne()
)
</script>

何时选择Next.js?

  1. React技术栈项目:团队已熟悉React生态
  2. 大型复杂应用:需要React丰富生态支持
  3. 需要最新特性:希望使用React最新功能
  4. Vercel平台部署:计划使用Vercel的完整能力

Next.js优势场景示例

// 复杂的动态仪表板应用
export default async function DashboardPage() {
  // 并行获取多个数据源
  const [sales, users, analytics] = await Promise.all([
    fetchSalesData(),
    fetchUserData(),
    fetchAnalyticsData(),
  ])
  
  return (
    <div className="dashboard">
      <SalesChart data={sales} />
      <UserTable users={users} />
      <AnalyticsOverview data={analytics} />
      {/* 实时更新的客户端组件 */}
      <LiveNotifications />
    </div>
  )
}

// 使用React Server Components实现部分渲染
'use client'
function LiveNotifications() {
  const [notifications, setNotifications] = useState([])
  
  useEffect(() => {
    // 建立WebSocket连接获取实时数据
    const ws = new WebSocket('wss://api.example.com/notifications')
    // ... 处理实时数据
  }, [])
  
  return <NotificationList items={notifications} />
}

05 开发体验与工具链对比

Nuxt 3的开发体验

  1. 零配置起步:大多数功能开箱即用
  2. 模块系统:官方和社区模块质量高
  3. TypeScript支持:一流的TypeScript体验
  4. 开发工具:Nuxt DevTools提供强大调试能力
# Nuxt 3的典型工作流
npx nuxi@latest init my-project  # 创建项目
npm install                       # 安装依赖
npm run dev                       # 开发模式
npm run build                     # 生产构建
npm run preview                   # 预览生产版本

Next.js的开发体验

  1. 灵活的配置:可根据需要深度定制
  2. TurboPack:极快的构建和刷新速度
  3. 完善的文档:官方文档质量极高
  4. Vercel集成:无缝部署和预览体验
# Next.js的典型工作流
npx create-next-app@latest my-app  # 创建项目
npm install                        # 安装依赖
npm run dev                        # 开发模式
npm run build                      # 生产构建
npm run start                      # 启动生产服务器

06 性能与优化对比

性能特征

  1. 首次加载性能:两者都优秀,Nuxt 3在小型项目上可能略快
  2. 开发服务器速度:Next.js的Turbopack在大型项目上优势明显
  3. 构建速度:取决于项目大小,两者都提供增量构建

优化技巧对比

Nuxt 3优化示例

<!-- 组件懒加载和图片优化 -->
<template>
  <div>
    <!-- 延迟加载重型组件 -->
    <LazyMyHeavyComponent v-if="showComponent" />
    
    <!-- 自动优化的图片 -->
    <NuxtImg
      src="/images/hero.jpg"
      width="1200"
      height="600"
      loading="lazy"
      format="webp"
    />
  </div>
</template>

Next.js优化示例

// 使用Next.js内置优化功能
import Image from 'next/image'
import dynamic from 'next/dynamic'

// 动态导入重型组件
const HeavyComponent = dynamic(() => import('./HeavyComponent'))

export default function OptimizedPage() {
  return (
    <>
      {/* 自动优化的图片组件 */}
      <Image
        src="/hero.jpg"
        alt="Hero image"
        width={1200}
        height={600}
        priority={false} // 非关键图片延迟加载
      />
      
      {/* 条件加载重型组件 */}
      <HeavyComponent />
    </>
  )
}

07 新手选择建议

根据背景选择

  1. 完全零基础

    • 如果喜欢更直观的模板语法 → 选择Nuxt 3
    • 如果看重就业市场需求 → 选择Next.js
  2. 有前端基础

    • 熟悉HTML/CSS/JS → 都可尝试,根据偏好选择
    • 有React经验 → 选择Next.js
    • 有Vue经验 → 选择Nuxt 3

根据项目类型选择

项目类型推荐框架理由
个人博客/作品集Nuxt 3快速搭建,SEO优秀
企业官网/营销页Nuxt 3开发效率高,维护简单
SaaS/管理后台Next.jsReact生态丰富,组件库多
电商平台Next.js性能优化完善,生态成熟
实时应用均可根据团队技术栈选择

无论选择哪个框架,最重要的是开始构建。真正的经验来自于项目实践,而不是框架比较。

🗳️ 互动时间:你的选择是?

读完全文,相信你对 Nuxt 3 和 Next.js 有了更清晰的认识。技术选型没有标准答案,真实项目中的经验才是最宝贵的参考。

欢迎在评论区分享你的观点:

  1. 投票选择:你目前更倾向于或正在使用哪个框架?

    • A. Nuxt 3 (Vue阵营)
    • B. Next.js (React阵营)
    • C. 两个都在用/观望中
  2. 经验分享:在实际项目中,你使用 Nuxt 3 或 Next.js 时,遇到的最大挑战或最惊喜的体验是什么? 你的分享对其他开发者会非常有帮助!

关注我的公众号" 大前端历险记",掌握更多前端开发干货姿势!

本文由mdnice多平台发布

demo-interactive-flow


交互式提示词生成流程

支持带附件(图,docx,pdf)对话优化提示词


多轮问题导向优化提示词
demo-template-management

Question

无论是复杂任务,如论文精度,汇报 PPT 大纲制作,深度搜索调研,还是 agent.md
还是简单任务,比如 linux 命令生成,旅游规划,text2img 绘图
我都体验过很多万能的模板,也体验了生成提示词的提示词优化器,然而他们都无法满足我的需求
这并不是这些提示词不行,而是并不适合我
我想,只有一个模板,他能通过交互式的方式适配到我的业务或需求上,这种方式的模板才真正万能
然而据我所知,市面上并没有这样的一款工具,因此,我开发了这样一款纯前端项目

Quote

一句话介绍: 通过多轮交互式对话,将模糊想法转化为结构化、高质量的 AI 提示词

在线体验

【免费免部署免配置体验】一个更贴近日常使用的交互式提示词优化器1 【免费免部署免配置体验】一个更贴近日常使用的交互式提示词优化器2

目前配置了免费的 apikey,欢迎测试,感谢 @huan 焕佬的支持,额度有限,大家轻点用
项目地址
如果这个项目对你有帮助,欢迎给个 Star!

核心亮点

1. 智能交互引导

不需要你是提示词专家,AI 会主动询问:

  • 你的角色定位是什么?
  • 目标受众是谁?
  • 需要什么深度的内容?
  • 期望的输出格式?

通过交互式表单,几次点击就能明确需求!

2. 多模态文件支持

  • 上传 PDF 论文,AI 自动解析内容
  • 粘贴图片截图,AI 理解视觉信息
  • 支持 DOCX、TXT 等多种格式

3. 本地优先 (Local-First)

  • API Key 仅存储在浏览器本地
  • 对话历史使用 IndexedDB 离线存储
  • 无需担心隐私泄露

4. 现代化体验

  • 深色模式支持
  • 响应式设计(移动端友好)
  • 基于 Shadcn/UI 的精美界面

案例展示

案例 1:模糊命令

Example




案例 2:复杂任务

Example

dog food example




对比生成后


然后我有点想选前者

todo

Todo

接入之前看的一个佬的 gemini 网页 2api 项目,实现免配使用
接入 CC/CODEX/ 寸止,进行交互式 Vibe Coding 提示词增强
▢ 提示词收藏与管理
▢ 目前元提示词不是很好,还要优化,一些指令遵从不好的模型,如 grok,会偏离流程
▢ 有些交互 bug
▢ 动画不是很好看
▢ icon 很丑,UI 太大众

碎碎念

其实用别人项目的时候我屁事都比较多,之前用过一个佬的优化提示词,后面用一直没能力也没时间弄出自己的想法,这次总算心一狠弄了出来,项目本身我还是挺喜欢的,至少满足了我的需求

这个项目从前天想到到今天上线弄了三天,中间被老板因课题没进度批了一顿,还差点放弃开发,没想到前端项目还开发这么久,可能还是没有前端基础导致,连一个 AI chat ui 的 AI 返回一直白屏都让 cld 用 playwright 和反重力的 gemini 3 pro high 改了一天,不过做出来还是成就感满满,毕竟站在 AI 的肩膀上很快从想法到实现了个稍微复杂的项目,并且自我感觉比较完善

技术细节

一共花费挺少的,反重力 0 成本,cld 这边大概花了 10 块吧



目前用的 ccg 工作流,但是一直没成功调用 codex,gemini,以及寸止,playwright 等 7 个 mcp,由于是纯前端项目,需要不断交互,主要用到前两个,ace 相关 mcp 也偶尔用到,anycode 不怎么用,之前以为跟 ccg 有冲突就没用,一般用开箱未配置的 wezterm


参考项目

  1. smkalami/prompt-decorators: Prompt Decorators are structured prefixes, such as +++Reasoning and +++StepByStep, designed to enhance AI responses. Inspired by Python decorators, they make AI outputs more logical, accurate, and well-organized without requiring lengthy instructions, simplifying interactions for users.
  2. GitHub - anthropics/prompt-eng-interactive-tutorial: Anthropic's Interactive Prompt Engineering Tutorial
  3. GitHub - tranzwalle/prompt_builder: 基于 [Anthropic 的 Interactive Prompt Engineering Tutorial](https://github.com/anthropics/prompt-eng-interactive-tutorial) 构建的智能 Prompt 优化工具。
  4. GitHub - xavierchoi/Prompt-Enhancer
  5. GitHub - lwh8915/PromptX: PromptX 不仅仅是一个提示词存储工具,它是专为 AI 时代打造的生产力神器。采用 UI/UX Pro Max 设计标准,结合强大的 版本管理 和 智能分类,让你的 AI 工作流效率提升 10x。
  6. GitHub - Hunyuan-PromptEnhancer/PromptEnhancer: PromptEnhancer is a prompt-rewriting tool, refining prompts into clearer, structured versions for better image generation.
  7. GitHub - songtingze/prompt-optimizer: 大模型提示词优化器,让大模型根据测试结果进行反思生成优化建议,并结合用户要求进行提示词优化。
  8. GitHub - linshenkx/prompt-optimizer: 一款提示词优化器,助力于编写高质量的提示词

参考帖子

  1. 新人水帖,一个提示词优化器项目 - 开发调优 - LINUX DO
  2. 提示词优化分享 - 递归自优化生成系统 - 开发调优 - LINUX DO
  3. 「SSRPrompt」为了方便内部项目的 prompt 管理,产品经理设计了这款开源软件 - 开发调优 - LINUX DO
  4. 【提示词工程】分享那些我认为好用的, 我在用的, 我愿意推荐的提示词 - 文档共建 - LINUX DO

📌 转载信息
原作者:
systemoutprintlnhell
转载时间:
2026/1/16 18:50:38

Instant Melon (即刻瓜田)

一个专注于匿名故事分享与互动的开源平台。
“每个人都有故事,这里是你的树洞,也是你的瓜田。”

项目简介

最近闲来无事(忘记在哪刷到了一个类似的平台),就 A 了一个匿名吃瓜平台。
起因是想做一个纯粹的、无压力的吐槽和分享空间。项目目前已经开源,欢迎各位佬品鉴。

给我一些优化建议。如果觉得还不错,求一个宝贵的 Star

GitHub 地址: https://github.com/AIME-JF/Instant-Melon
在线地址:Instant-Melon


核心功能

  • 匿名发布:无需复杂的注册流程(匿名),保护隐私,畅所欲言。
  • 吃瓜互动:支持评论、双击点赞、表情互动,让吃瓜更有趣。
  • 清新 UI:精心设计的界面,适配移动端与桌面端,阅读体验极佳。
  • 内容管理:内置简单的审核机制,防止滥用。

  • 前端框架:Next.js (App Router) / Vue3
  • UI 组件:TailwindCSS / ShadcnUI
  • 后端 / 数据库: PostgreSQL / FastAPI

(PS:现在没啥内容在里面,因为根本没人玩 ,有几个内容是搬站内佬的)

快速开始 / 部署

  1. git clone [https://github.com/AIME-JF/Instant-Melon.git](https://github.com/AIME-JF/Instant-Melon.git)
    

📌 转载信息
转载时间:
2026/1/14 10:59:40

作为一名 41 岁的“大龄” IT 从业者,过去 13 年我一直在做聚焦国内做电商 ERP (Java 栈)。国内的 SAAS 环境,大家都懂的。在这个年纪,无论是职场还是个人发展都容易陷入瓶颈。与其焦虑,不如折腾。于是我决定跳出舒适区,尝试搞一次独立站出海试试水。

这算是一个 Hello World 级别的 MVP ,核心原则是**“零成本启动” (白嫖)**,主要目的是为了跑通 产品 -> 部署 -> 支付 -> 上线 的全链路。

项目刚上线,分享一下在这个过程中的技术选型和遇到的坑,希望能给同样想出海的兄弟们一点参考。

1. 市场调研:AI 的“彩虹屁”与现实

对于没出过国的土著开发者,挖掘海外需求是最大的痛点。
这次我没有去 Reddit 或 Google Trends 爬数据,而是从自己日常生活的一个小需求出发:**根据照片直接生成简单的视频集锦 (Montage)**,主打极简,不需要复杂的剪辑。
调研过程中我使用了 Gemini Deep Research

  • 体验:虽然报告很详尽,但我感觉 AI 有点“过分吹捧”。它会义正言辞地告诉我 $4.99 的定价不高,“对老外就是一杯咖啡钱”。
  • 反思:AI 的鼓励听听就好,真金白银的转化率才是检验标准的唯一真理。

2. 域名与品牌 (Spaceship + Cloudflare)

  • 起名:直接问 Gemini 要了 10 个建议,逐一验证。最后选中了 QuickMontage.com( Montage 在英文中即为蒙太奇/剪辑之意,语义直观)。
  • 注册商:选择了 Spaceship
  • 理由:Gemini 建议出海尽量选国外注册商(避坑阿里云/腾讯云的实名和转出限制)。对比了 Porkbun 和 Cloudflare ,Spaceship 的 UI 最现代,而且支持支付宝付款,使用了优惠码后价格也很香。DNS 解析生效极快。

3. Logo 设计

试了一些国外的 AI Logo 生成工具(如 Namecheap Logo Maker 等),提示词怎么调都不太满意。最后反而是国产的 即梦 (Jimeng) 生成的效果比较符合我想要的“简洁风”,稍微修整一下就用了。

4. 技术栈:从 Java 到 Next.js 的“叛逃”

作为一个写了十几年 Java 后端的人,以前开发那是相当重:Tomcat, MySQL, Nginx 一套下来挺累人。
这次出海,为了效率和成本,我选择了目前海外最火的 Next.js + Serverless 方案,主打一个 Vibe Coding (随缘写码,AI 辅助)。

  • 前端/框架:Next.js (App Router)。

  • 后端/DBSupabase。对于独立开发者,BaaS 真的比手搓后端香太多了,Auth 和 Database 一把梭。

  • 托管/部署GitHub + Cloudflare Pages

  • 优势:Master 分支一提交自动触发部署,全球 CDN 速度极快,且 HTTPS 证书自动搞定。

  • 对比:相比我以前搞 ERP 的发布流程,现在的体验简直是降维打击。

  • IDE:Antigravity (配合 AI 辅助编程)。

5. 支付:最耗时的一环 (Creem)

这是最大的坑。因为没有海外公司和港卡,Stripe 这种第一梯队用不了。

  • PayPal:注册了个人号,但体验不好,跳转支付容易流失用户。
  • Creem:最后选了这家做 MoR (Merchant of Record)。
  • 踩坑:注册顺利,但卡在了收款账户开通( Live Access )。系统自动审核把我的个人身份验证拒了(可能风控觉得中国个人开发者风险高)。
  • 解决:不得不走人工审核。老外的效率大家懂的,来回拉锯了一个多星期。期间提供了详细的产品演示视频,解释了开发背景,最后才给过。
  • 建议:如果大家接支付被拒,不要放弃,直接找客服对线,证明你是真实开发者通常都能过。

6. 现状与求拍砖

目前站子刚上线,功能非常 MVP ,就是纯粹的照片转视频。同时,现在其实仍然在我的舒适区,最难的推广,找词这些现在都没敢去碰。
地址:https://www.quickmontage.com

想请教各位大佬:

  1. 网速测试:在国内不挂梯子的情况下,Cloudflare Pages 的加载速度如何?
  2. SEO:对于这种工具类的小站,除了提交 Sitemap ,还有什么适合个人操作的冷启动路子?

感谢各位!

Claude Code SEO 是一款基于 Claude Code 的自动化 SEO 优化工具。它利用先进的语义理解能力,为开发者提供智能的 Meta 标签生成、网页结构优化及关键词建议。

该项目旨在解决传统 SEO 手动配置繁琐、语义匹配度低的问题。通过简单的集成,即可让 AI 辅助提升网页的搜索权重与曝光率。

  • 高效自动化 :秒级生成高质量 SEO 核心要素。

  • 深度智能化 :精准匹配搜索引擎算法与用户意图。

  • 开发者友好 :开源架构,轻松嵌入现有工作流。

项目地址: GitHub - huifer/claude-code-seo: Next.js SEO assistant plugin for Claude Code CLI. Automated SEO audits with 100-point scoring across 6 dimensions. Covers metadata, structured data, E-E-A-T, content strategy, local SEO, and backlink building. Supports bilingual optimization, smart route detection, and 27+ commands for comprehensive SEO management.


📌 转载信息
原作者:
Zenf
转载时间:
2026/1/8 18:09:51

Wordpress 时期

16 年初买过阿里云的学生服务器做 wordpress 博客,还搞了域名备案什么的,最后上面只发了课堂 Linux 笔记。当时一搜自建博客都推荐 wordpress。到 16 年后半年时在网上看到 Github Pages ,不要服务器还可以绑域名,竟然有这等好事!从此开始了 Hexo 的静态博客之路。

Hexo Hugo

后来换成了 Hugo。用 Go 写的编译比 Hexo 快多了,有比较现代化的主题。但感觉好多喜欢的模板都在 Hexo 上,又换了回去。

我自己是喜欢功能很全的极简风,网站装修这种东西,弄久了就是想手搓。再往后学了 React,但当时做了个 SPA 后发现,这对搜索引擎不友好。Next.js 的出现打破了这个问题,可以导出静态页面,当时觉得简直是魔法。从此走上了手撮博客的道路。

Next.js

手搓博客大致要求是:

  • 博客主体完全静态
  • 完全兼容 Hexo 用法
  • 有无限滚动的说说页面
  • 有评论阅览量统计
  • 有站内全文搜索
  • 有 rss 和 sitemap

技术选型参考的 Josh WComeau 文章。当时他看好 Styled-Components 和 Mdx(老实说现在觉得是个错误,一是还是要自己做 CSS 水合避免闪屏,二是,写文章时真的不会想写代码,图片都懒得加,最后还只是用 .md)

但是当时 Next.js 的 SSG 只有 Pages Router,不使用他家的 ISR(需要服务器)就很难做不被卸载的菜单栏和全局进度条动画。并且有的小版本代码分割有问题,rss 的编译部分老被认成客户端,我服了,有点讨厌这个框架了。

去年有朋友帮我用 AI 重构到了 App Router。但他用了一个现成的 Markdown 库,但我为了让说说部分写起来简单,以及渲染看起来长得像社交媒体,解析是手撮的。所以说说相关的部分,以及 rss 、搜索,都没挪过去,功能缺了很多。

React Router 7

后来想了想,我用 Next.js 不就是看重他的路由和 SSG。既然 React 18 有 RSC 了,那我不如直接 React,静态渲染就抓路由用 renderStaticMarkup 跑一遍好了……

于是上个月问了问哈基米,接触到了 React Router 7,一个完美符合我需要的路由框架。还接触到了 Velite 预构建数据。用 AI 做技术选型还是靠谱的。元旦前一天开始改了 7 天,重构了,并且加好了我心心念念的静态页面间全局进度条。

离开了 Next.js 后,才发现原来外面根本没下雨,原来静态页面导出并不需要 30 秒,只需要 3 秒啊……React Router 7 目前在我心中是完美的路由框架,他只是个处理路由的,写起来是 React 本身的自由度。

不过搓了半天文章没怎么写,全在吹水,说说算是最值得的一个模块了。

所以请看博客

还有 404 页面(不是

性能 Desktop:

主页:

原本的说说页面是打算拿 telegram 和 X 的 api 做同步的。但后来发现其实 iCloud 同步到手机上开 Obsidian 写也是一样的…… Obsidian 还有 Dataview 和 模板 QuickAdd 按钮,何尝不是一种静态博客后台管理工具。……

评论是 Waline,从 Valine 迁移的。还是万年的 LeanCloud 免费额度数据库,反正没人哈哈。


📌 转载信息
原作者:
illy
转载时间:
2026/1/8 10:28:31

起因

因为本人喜欢摄影,或者说是喜欢瞎拍拍,于是找了一些关于摄影、相册的优秀开源项目

而这几个更是纯粹的照片展示的项目,但都和我的想法不太符合,那就是 照片 + 文字

Mo Gallery

仓库地址:

预览地址:

slogan

每张照片都有自己的故事。

因此,我弄出了 Mo gallery,一个由照片 + 文字组合的类似于博客的网站,项目全部是由 AI 驱动开发的,谈不上啥技术含量,但是做出一款符合自己想法和需求的东东时,那种满足感是无以言喻的。

项目的传播性可能是比较小众,但也是乐在其中。

后续,我也会持续使用并优化该项目,让其功能更加完善。

特点

主要特点

  • 基于 nextjs+honojs,使其可以直接部署在 vercel,免去服务器的束缚;
  • 支持多源存储:GITHUB、R2、LOCAL(服务器部署)
  • MARKDOWN 编辑器,实时预览
  • LINUX DO 快捷登录,支持评论功能
  • 照片 + 文字的特点,打造个人摄影展示平台
  • 照片 + 相册管理,个人摄影备份新方式
  • 照片日志,书写照片背后的故事,个人影像记录新方式

AI 生成:

部分截图:




管理页面



原本是想昨天发的,但是问题依旧很多,然后今天又改了一天,最后实在熬不动了,干脆今天发吧,保证了大部分的功能是正常运行。

一些遐想

也许可以做成平台,大家都分享照片,然后加入 LDC 积分系统,对于喜欢的照片,积分打赏啊哈哈哈,感觉似乎还不错

最后感觉 L 站的佬友们提供的公益,才使得我完成了这个项目,耗时了小半个月也是

感谢公益
@mazhichen8780
@nineyuan
@gx123

anyrouter
Elysiver
WONG


📌 转载信息
原作者:
shaioo
转载时间:
2026/1/2 12:53:50

最近做了一个 简单的 SSL 证书监控网站,想和大家分享一些开发过程中的经验。项目地址放在最后了,先聊聊技术实现。

起因

之前遇到过几次 SSL 证书过期导致服务中断的情况,每次都是用户发现后才去处理,很被动。市面上有一些监控工具,但要么太重,要么功能不够用,就想着自己做一个。

技术选型

Next.js 16 + shadcn/ui + TypeScript

选 Next.js 是因为:

  • App Router 的开发体验很好,路由和文件结构对应

  • Server Components 减少了客户端 JavaScript

  • 内置的图片优化、字体加载等开箱即用

shadcn/ui 是基于 Radix UI 的组件库,优点是:

  • 组件复制到项目中,完全可控

  • 使用 Tailwind CSS,样式定制方便

  • Accessibility 做得很好

Drizzle ORM + PostgreSQL

之前用过 Prisma,这次试了 Drizzle,感觉更轻量:

  • 类型生成更快

  • SQL 操作更直观

  • 查询性能更好

better-auth 认证系统

这个是最近发现的,比 NextAuth 更新:

  • TypeScript 支持更好

  • API 设计更简洁

  • 支持邮箱密码 + 多种 OAuth(GitHub、Google)

遇到的一些坑

1. 证书链验证的复杂性

一开始以为 SSL 证书检查很简单,就是获取证书信息。后来发现证书链验证很复杂:

  • 需要验证每个证书的签名

  • 检查证书链的完整性

  • 判断根证书是否可信(浏览器内置)

  • 处理中间证书缺失的情况

解决方案是写了一个完整的证书链提取和验证模块,包括:

  • 从 TLS 连接提取完整证书链

  • 验证每个证书的签名和有效期

  • 检测链断裂和不完整的情况

  • 树形结构可视化展示

2. 安全评分系统的设计

为了让用户快速了解证书的安全状况,做了一个 A+ 到 F 的评分系统。核心逻辑:


四个维度加权评分

- 证书有效性:30% - 链完整性:25% - 加密强度:25% - 协议版本:20%

如果有严重问题(如证书过期),评级上限为 C

难点在于:

  • 权重分配如何合理

  • 扣分规则如何设计

  • 如何给出有价值的改进建议

最终采用了分层评分,每个维度独立计算,再加权汇总。

3. 多语言路由的 Hydration 问题

支持 6 种语言时遇到了 React Hydration 错误:

 // ❌ 错误做法 // app/[locale]/layout.tsx 中包含 <html> 标签 // 与根 layout 冲突 // ✅ 正确做法 // 根 layout 只有一个 <html> 标签 // 使用客户端组件动态更新 lang 属性 

4. Redis 缓存的降级处理

为了提升认证性能,加了 Redis 缓存。但需要考虑:

  • Redis 不可用时怎么办?

  • 缓存和数据库数据不一致怎么办?

解决方案:

  • Redis 连接失败自动降级到数据库

  • 数据库更新时主动失效缓存

  • 提供缓存统计 API 监控命中率

5. PageSpeed 优化

最初 Lighthouse 跑分只有 60 多分,主要问题:

JavaScript Bundle 太大

  • 使用 Next.js 的动态导入(dynamic import)按需加载组件

  • 移除未使用的依赖

  • 启用 Tree Shaking

图片优化

  • 使用 Next.js Image 组件自动优化

  • 添加合适的 placeholder

  • 启用图片懒加载

字体加载

  • 使用 next/font 自动优化字体

  • 减少字体变体数量

  • 使用 font-display: swap 避免布局偏移

关键渲染路径

  • 识别关键 CSS,内联到 HTML

  • 延迟加载非关键 JavaScript

  • 优化第三方脚本加载顺序

第三方脚本优化

  • Google Analytics、Crisp Chat 等延迟加载

  • 使用 defer/async 属性

  • 考虑使用 Web Workers 处理耗时任务

最终优化后:

  • Performance: 60 → 95

  • Accessibility: 85 → 98

  • Best Practices: 90 → 100

  • SEO: 100

一些技术亮点

证书链可视化

用树形结构展示证书链,支持展开 / 折叠,不同状态用颜色编码:

  • 绿色:有效

  • 黄色:即将过期

  • 红色:已过期

安全问题检测

自动检测不安全的加密算法:

  • MD5、SHA-1 签名算法

  • RC4、DES 等弱加密

  • TLS 1.0/1.1 等旧协议

多渠道通知

目前支持邮件、Slack、Discord、Telegram、飞书五种通知渠道,用户可以自由组合。

项目地址

https://guardssl.info

功能:

  • 免费 SSL 证书检查

  • 域名监控和过期提醒

  • 安全评分和改进建议

  • 多语言支持(中英日法西)

欢迎试用和反馈,有什么问题可以一起交流。


📌 转载信息
原作者:
yeheboo
转载时间:
2026/1/1 20:24:42

最近做了一个 简单的 SSL 证书监控网站,想和大家分享一些开发过程中的经验。项目地址放在最后了,先聊聊技术实现。

起因

之前遇到过几次 SSL 证书过期导致服务中断的情况,每次都是用户发现后才去处理,很被动。市面上有一些监控工具,但要么太重,要么功能不够用,就想着自己做一个。

技术选型

Next.js 16 + shadcn/ui + TypeScript

选 Next.js 是因为:

  • App Router 的开发体验很好,路由和文件结构对应

  • Server Components 减少了客户端 JavaScript

  • 内置的图片优化、字体加载等开箱即用

shadcn/ui 是基于 Radix UI 的组件库,优点是:

  • 组件复制到项目中,完全可控

  • 使用 Tailwind CSS,样式定制方便

  • Accessibility 做得很好

Drizzle ORM + PostgreSQL

之前用过 Prisma,这次试了 Drizzle,感觉更轻量:

  • 类型生成更快

  • SQL 操作更直观

  • 查询性能更好

better-auth 认证系统

这个是最近发现的,比 NextAuth 更新:

  • TypeScript 支持更好

  • API 设计更简洁

  • 支持邮箱密码 + 多种 OAuth(GitHub、Google)

遇到的一些坑

1. 证书链验证的复杂性

一开始以为 SSL 证书检查很简单,就是获取证书信息。后来发现证书链验证很复杂:

  • 需要验证每个证书的签名

  • 检查证书链的完整性

  • 判断根证书是否可信(浏览器内置)

  • 处理中间证书缺失的情况

解决方案是写了一个完整的证书链提取和验证模块,包括:

  • 从 TLS 连接提取完整证书链

  • 验证每个证书的签名和有效期

  • 检测链断裂和不完整的情况

  • 树形结构可视化展示

2. 安全评分系统的设计

为了让用户快速了解证书的安全状况,做了一个 A+ 到 F 的评分系统。核心逻辑:


四个维度加权评分

- 证书有效性:30% - 链完整性:25% - 加密强度:25% - 协议版本:20%

如果有严重问题(如证书过期),评级上限为 C

难点在于:

  • 权重分配如何合理

  • 扣分规则如何设计

  • 如何给出有价值的改进建议

最终采用了分层评分,每个维度独立计算,再加权汇总。

3. 多语言路由的 Hydration 问题

支持 6 种语言时遇到了 React Hydration 错误:

 // ❌ 错误做法 // app/[locale]/layout.tsx 中包含 <html> 标签 // 与根 layout 冲突 // ✅ 正确做法 // 根 layout 只有一个 <html> 标签 // 使用客户端组件动态更新 lang 属性 

4. Redis 缓存的降级处理

为了提升认证性能,加了 Redis 缓存。但需要考虑:

  • Redis 不可用时怎么办?

  • 缓存和数据库数据不一致怎么办?

解决方案:

  • Redis 连接失败自动降级到数据库

  • 数据库更新时主动失效缓存

  • 提供缓存统计 API 监控命中率

5. PageSpeed 优化

最初 Lighthouse 跑分只有 60 多分,主要问题:

JavaScript Bundle 太大

  • 使用 Next.js 的动态导入(dynamic import)按需加载组件

  • 移除未使用的依赖

  • 启用 Tree Shaking

图片优化

  • 使用 Next.js Image 组件自动优化

  • 添加合适的 placeholder

  • 启用图片懒加载

字体加载

  • 使用 next/font 自动优化字体

  • 减少字体变体数量

  • 使用 font-display: swap 避免布局偏移

关键渲染路径

  • 识别关键 CSS,内联到 HTML

  • 延迟加载非关键 JavaScript

  • 优化第三方脚本加载顺序

第三方脚本优化

  • Google Analytics、Crisp Chat 等延迟加载

  • 使用 defer/async 属性

  • 考虑使用 Web Workers 处理耗时任务

最终优化后:

  • Performance: 60 → 95

  • Accessibility: 85 → 98

  • Best Practices: 90 → 100

  • SEO: 100

一些技术亮点

证书链可视化

用树形结构展示证书链,支持展开 / 折叠,不同状态用颜色编码:

  • 绿色:有效

  • 黄色:即将过期

  • 红色:已过期

安全问题检测

自动检测不安全的加密算法:

  • MD5、SHA-1 签名算法

  • RC4、DES 等弱加密

  • TLS 1.0/1.1 等旧协议

多渠道通知

目前支持邮件、Slack、Discord、Telegram、飞书五种通知渠道,用户可以自由组合。

项目地址

https://guardssl.info

功能:

  • 免费 SSL 证书检查

  • 域名监控和过期提醒

  • 安全评分和改进建议

  • 多语言支持(中英日法西)

欢迎试用和反馈,有什么问题可以一起交流。


📌 转载信息
原作者:
yeheboo
转载时间:
2026/1/1 20:18:51

首先感谢KuekHaoYang对KVideo的开发,仓库地址:https://github.com/KuekHaoYang/KVideo

最近发现了一个非常酷的开源项目 *KVideo*——一个基于 Next.js 构建的现代化视频聚合播放平台,拥有独特的“液态玻璃”UI 设计。既然是 Next.js 项目,能不能不依赖电脑,直接在安卓手机上跑起来呢?

答案是肯定的!利用 *Termux* 这款强大的终端模拟器,我们完全可以在手机上搭建一个本地 Node.js 环境。虽然过程踩了不少坑,但最终成功运行的那一刻,成就感拉满。本文将详细记录从 0 到 1 的部署过程,希望能帮到同样喜欢折腾的朋友。

1. 安装 Termux

千万不要在 Google Play 商店下载 Termux,那里的版本已经很久没更新了,兼容性很差。

  • 正确姿势:去 F-Droid 官网下载安装最新版 Termux。

  • 初始化

    安装后打开,更新一下软件源:

    pkg install nodejs git
    

2. 安装核心环境

在安装依赖,由于国内网络环境,直接 npm install 经常会出现 ECONNRESET 错误。

  • 解决方案:切换到淘宝 NPM 镜像源,速度飞快且稳定。
# 切换镜像源
npm config set registry https://registry.npmmirror.com
# 清理残留 rm -rf node_modules package-lock.json
# 重新安装
npm install --ignore-scripts

KVideo 是基于 Node.js 的,我们需要安装它以及 Git 工具来拉取代码:

pkg install nodejs git

安装玩后可输入

node -v
npm -v

查看是否安装成功。

3. 克隆项目代码

使用 git 命令将 KVideo 的源码拉取到本地:

git clone https://github.com/KuekHaoYang/KVideo.git
cd KVideo

4. 安装依赖

注意,这里用通用代码部署会遇到兼容性问题,这一部分会解决这些问题,如果本篇文章给出的解决方案不可行,请

直接运行 npm install 会报错,因为项目包含 Cloudflare 的部署工具(workerd),它不支持安卓平台。

解决方案:使用 --ignore-scripts 参数跳过安装脚本,只下载必要的代码包。

npm install --ignore-scripts

KVideo 默认使用 Next.js 16,其默认的 Turbopack 打包器在安卓 ARM64 架构下存在兼容性问题(turbo.createProject is not supported),导致无法启动开发模式。

解决方案:我们需要手动降级到 Next.js 15,它使用兼容性更好的 Webpack。

# 降级 Next.js 到 15.x
sed -i 's/"next": "16.1.1"/"next": "^15.1.0"/g' package.json
# 为了稳妥,同步降级 React 到 18.x
sed -i 's/"react": "19.2.0"/"react": "^18.3.1"/g' package.json
sed -i 's/"react-dom": "19.2.0"/"react-dom": "^18.3.1"/g' package.json

5. 启动项目

万事俱备,启动服务!

npm run dev

当终端出现 Ready on http://localhost:3000 时,说明服务已成功启动。

6. 订阅源

这个就得大家各显神通了,我不参与哈()

更多信息请前往KVideo 在这边提供源吧,在Github上直接放还是太危险了 - 搞七捻三 / 搞七捻三, Lv1 - LINUX DO观看

本文同步发布于 在手机上搭建KVideo | 红石の空间站


📌 转载信息
转载时间: 2026/1/1 01:50:04

背景

看过 afimory 这样的开源项目,更多像是纯粹的的照片展览了,与我的需求稍微有点不一样

Mo Gallay

mo gallary 是一个基于 nextjs​honojs 的项目,由于 honojs 的特性,可以直接部署在 vercel,专为摄影爱好者打造的照片博客平台。

类似于博客,但其更偏向于照片叙事,生活分享,个人展示方面

功能

  • 使用 postgreSQL(supabase)
  • 支持评论,精选照片
  • 支持 github,r2 存储源
  • 照片故事
  • 照片 exif 信息参数,色卡盘
  • 画廊多视图切换
  • 夜间模式切换

当前存在博客菜单,感觉和其本质有点出入,未来可能会将博客砍掉

特点 & 未来(目标)

  • 支持文件路径调整
  • 存储源迁移(如 github 迁移到 r2)
  • 照片集锦
  • 组图查看

全部 vibe coding 的项目,bug 有点多,就不便直接开源,待我再打磨打磨

预览地址:

移动端访问问题较多,建议 pc 访问

欢迎提供建议

首页



画廊




管理页面





📌 转载信息
原作者:
shaioo
转载时间:
2025/12/30 10:13:20

第一个版本链接:

同时也修复了很多水印部分的 BUG,也感谢部分同学的反馈,非常感谢

以下是压缩工具的界面截图:

依旧免费开源!!!觉得不错的记得给我点 Starred​。十分感谢

效果预览:

如果你有任何想法或者建议,可以告诉我


📌 转载信息
原作者:
dexiaoly
转载时间:
2025/12/29 12:33:53

Light-GPT 是一个基于 GPT-3.5-Turbo 模型的交互式网站项目,使用 Next.js 框架构建,使用 Vercel 云平台部署,是一个纯前端的轻量级应用。

站点预览

基于 GPT-3.5-Turbo 模型的问答机器人,使用 Next.js 搭建, Vercel 一键部署

站点功能

  1. 纯前端应用,基于 GPT-3.5-Turbo 模型,使用 API KEY 在前端请求 OpenAI 的对话接口,支持流式数据,页面以打字机效果显示机器人回复。
  2. 部署后,用户在前端页面设置自己的 API KEY ,科学上网的情况下,问答速度会很快。用户设置的 API KEY 将保存在客户端,完全没有泄漏风险。
  3. 支持新的主题对话和查看历史主题对话。所有对话数据都存储在浏览器的 IndexedDB 中,也就是说对话数据记录是保存在本地的,不会有数据泄漏风险。
  4. AI 回复支持多种语法高亮和一键复制代码功能,针对编程相关问题。对话支持图片和 PDF 导出。
  5. 应用适配了 PC 和 Mobile 设备,方便使用。
  6. 支持 DIY ,支持设置用户头像和 AI 头像。
  7. 支持根据文字生成图片