分类: 软件

  • 3D游戏初学者着色器指南:环境搭建

    image.png

    环境搭建

    在开始学习和应用3D游戏着色器之前,确保你的开发环境已经正确设置。下面是开发和测试示例代码所用的环境。

    开发环境

    • 操作系统:Linux Manjaro 5.10.42-1-MANJARO
    • 显卡:GeForce GTX 970/PCIe/SSE2
    • OpenGL版本:4.6.0 NVIDIA 465.31
    • 编译器:g++ (GCC) 11.1.0
    • 引擎:Panda3D 1.10.9

    材质设置

    使用Blender创建的mill-scene.egg模型包含如下五种纹理:

    • Diffuse(漫反射)
    • Normal(法线)
    • Specular(高光)
    • Reflection(反射)
    • Refraction(折射)

    通过在所有模型中使用相同位置的这些纹理贴图,着色器可以被通用化,减少重复代码的需求。

    如果一个物体使用其顶点法线,则使用“平蓝色”法线贴图。

    image.png

    例如,这是一张平蓝色法线贴图。它仅包含平蓝色 (red = 128, green = 128, blue = 255),代表一个指向正z轴 (0, 0, 1) 的单位法线。

    (0, 0, 1) =
      ( round((0 * 0.5 + 0.5) * 255)
      , round((0 * 0.5 + 0.5) * 255)
      , round((1 * 0.5 + 0.5) * 255)
      ) =
        (128, 128, 255) =
          ( round(128 / 255 * 2 - 1)
          , round(128 / 255 * 2 - 1)
          , round(255 / 255 * 2 - 1)
          ) =
            (0, 0, 1)

    如上所示,单位法线 (0, 0, 1) 被转换为平蓝色 (128, 128, 255),并且平蓝色被转换回单位法线。你将在法线映射技术部分学习更多内容。

    image.png

    上图是其中一个高光贴图。红色和蓝色通道控制根据摄像机角度看到的高光反射量,绿色通道控制光泽度。你将在光照菲涅耳效应部分了解更多内容。

    反射和折射纹理用于屏蔽那些具有反射、折射或两者皆有的物体。对于反射纹理,红色通道控制反射量,绿色通道控制反射的清晰度或模糊度。

    Panda3D配置

    示例代码使用Panda3D作为着色器之间的粘合剂。这对描述的技术没有实际影响,意味着你可以将这里学到的内容应用到你选择的技术栈或游戏引擎中。Panda3D确实提供了一些便利功能,我会指出这些功能,以便你可以在你的技术栈中找到等价功能或自己实现它们。

    为了演示程序的目的,更改了三个Panda3D配置。你可以在config.prc中找到这些配置。更改的配置包括:

    • gl-coordinate-system default:Panda3D默认使用z-up右手坐标系,而OpenGL使用y-up右手坐标系。这个配置可以避免在着色器内部进行坐标系转换。
    • textures-auto-power-2 1:允许我们使用非二次幂的纹理尺寸(如果系统支持)。这在进行SSAO和其他屏幕/窗口尺寸相关的技术时非常有用,因为屏幕/窗口尺寸通常不是二次幂。
    • textures-power-2 down:如果系统只支持二次幂大小的纹理,这个配置会将我们的纹理大小调整为二次幂。

    更多详情请参阅Panda3D配置手册页面。


    希望这篇博客能帮助你快速搭建3D游戏着色器的开发环境,顺利开启你的开发之旅!如果你有任何问题,欢迎在评论区留言。

    (C. 2019 David Lettier
    lettier.com

  • 让你的3D游戏更加炫酷!—— 初学者3D游戏着色器指南

    引言

    你是否想为你的3D游戏添加纹理、光影、阴影、法线贴图、发光物体、环境光遮蔽、反射、折射等等效果?如果是的话,那么你来对地方了!在这里,我将介绍一系列提升游戏视觉效果的着色技术,并详细解释每种技术的实现方法。无论你使用的是Godot、Unity、Unreal,还是其他引擎,你都可以将这些技术应用到你的开发中。

    为了更好地展示这些技术,我选择了出色的Panda3D游戏引擎和OpenGL着色语言(GLSL)作为示例。如果你也在使用这套技术栈,那么你将从中受益匪浅,学会如何在Panda3D和OpenGL中实现这些着色技术。

    image.png

    目录

    在这篇文章中,我将覆盖以下内容:

    许可证

    本文中所有涉及到的 .cxx.vert.frag 源代码文件均已包含在许可证内,其他内容未被授权使用。

    归因

    版权

    © 2019 David Lettier
    lettier.com

    通过本文,你将学习到使用各种着色技术提升游戏视觉效果的方法。希望这篇指南能对你有所帮助,让你的3D游戏更加炫酷!Happy coding!

  • 让您的2D游戏更上一层楼!—— 介绍 SmartShape2D

    📜 简介

    欢迎来到 SmartShape2D 的世界!这是一个为 Godot 引擎开发的开源插件,让您能够轻松创建精美的2D多边形。无论您是新手还是老手,SmartShape2D 都能让您的开发过程更加顺畅和有趣。

    💡 什么是 SmartShape2D.

    SmartShape2D 插件让您可以创建漂亮的2D多边形,只需放置几个点并分配形状材质即可。该插件的纹理使用与 TileMaps/TileSets 类似的方法,这意味着您可以轻松创建类似地形的效果。

    主要特点

    • 支持 Godot 4.x:最新版本专为 Godot 4.x 开发和支持。
    • 易于使用:简单的点放置和材质分配即可创建多边形。
    • 开源:完全开源,欢迎社区贡献!

    📦 安装与支持

    安装 SmartShape2D 非常简单,只需按照安装指南进行操作即可。如果您仍在使用 Godot 3.x,可以前往此处获取相应版本。

    📚 文档与教程

    虽然有些文档可能已经过时,但您仍然可以参考以下资源来快速上手:

    此外,还有一些视频教程可供参考:

    🛠️ 贡献

    提交问题

    如果您有任何建议或发现了错误,请随时提交问题。提交问题时,请包括以下信息:

    • 错误/建议
    • 使用的 Godot 版本
    • 使用的 SmartShape2D 版本

    提交问题的最佳方式是附上一个包含问题的示例项目,并尽量详细描述问题。图片和截图也非常有帮助。提交问题

    开发

    我们有一套测试用于验证代码(感谢 GUT)。提交合并请求时,请确保所有测试通过。如果更新了测试,请在合并请求中注明。

    Discord 社区

    我们有一个专门的 Discord 服务器,在这里您可以:

    • 寻求帮助
    • 展示您的项目
    • 直接与开发者交流

    加入我们的 Discord 社区:https://discord.gg/mHWDPBD3vu

    ☕ 支持我们

    如果您喜欢这个工具并希望支持其开发,请我喝杯咖啡


    通过 SmartShape2D. 您可以轻松创建出色的2D多边形,让您的游戏更上一层楼!快来试试吧!

  • 欢迎来到 Mattermost 世界!

    🤖 介绍

    Mattermost 是一个开源平台,旨在整个软件开发生命周期中提供安全的协作工具。它使用 Go 和 React 编写,并作为单个 Linux 二进制文件运行,支持 MySQL 或 PostgreSQL 数据库。每月 16 号发布一个新的编译版本,采用 MIT 许可证。

    无论你是想在本地部署 Mattermost,还是想在云端免费试用,我们都能满足你的需求!部署 Mattermost,或立即免费试用

    Mattermost 用户界面

    🎯 用例

    通过 Mattermost,可以实现以下几种用例:

    📥 安装指南

    自托管安装

    其他安装指南:

    移动和桌面应用

    除了 web 界面,你还可以下载 Mattermost 的客户端:

    🔒 获取安全公告

    订阅 Mattermost 安全公告邮件列表,获取关于关键安全更新的通知,确保你的部署始终安全。

    立即订阅

    🌟 参与其中

    📚 了解更多

    📜 许可证

    查看 LICENSE 文件 了解许可权利和限制。

    📰 获取最新消息

    💡 贡献

    Small Image

    请参阅 CONTRIBUTING.md 了解更多信息。
    加入 Mattermost 贡献者服务器 参与社区讨论、开发等。

    希望这篇文章能帮助你更好地了解 Mattermost。如果你有任何问题或建议,欢迎在评论区留言。Happy coding!

  • 🐍 Python NZ的背叛:信任的崩塌与重生

    🐍 Python NZ的背叛:信任的崩塌与重生

    在新西兰,Python的热潮让无数开发者心潮澎湃,而作为这一语言的推广者,Python New Zealand(Python NZ)更是扮演了不可或缺的角色。然而,最近发生的丑闻却让这个志愿者运营的组织陷入了前所未有的危机。财务主管Carlos Bavastrello Cordero在近五年的时间里,竟然私自挪用了多达7万美元(约49万元人民币)的资金,导致协会的财务状况岌岌可危。更令人震惊的是,当这一切被揭露时,协会的银行账户里竟然仅剩下26美元(约183元人民币),这让人不禁感叹:信任一旦崩塌,后果不堪设想。

    💔 失落的信任与背叛

    Python NZ成立于2009年,旨在通过会议和技术交流活动来促进Python语言在新西兰的发展。该协会的年度盛会——Kiwi PyCon大会,成为了社区交流的重要平台。然而,在2023年9月的Kiwi PyCon大会后,协会主席Tom Eastman却惊讶地发现组织背负着巨额债务,Cordero自然成为了第一个被问责的人。

    Cordero的隐秘行动如同一场精心编织的谎言,直到最后的真相浮出水面。他利用编造的虚假理由来掩盖资金的去向,但最终谎言的链条还是断裂了。Eastman对此感到非常失望,“在Cordero的管理下,协会深陷债务危机。”

    🔍 揭开真相:贷款与挪用

    在调查过程中,Python NZ发现Cordero不仅擅自申请了Covid-19的小企业现金流贷款(SBCS),而且在未经协会同意的情况下,私自将协会的资金用于个人支出。当被问及这笔贷款时,Cordero的借口显得拙劣而可笑:“我看不惯这家银行,就开始了更换银行的程序,但后来忘记喊停了。”这番话不仅无法自圆其说,反而让人更加质疑他的动机。

    经过仔细审查,协会发现Cordero在2019年2月至2023年10月期间,利用职务之便,共进行了1674笔与协会业务无关的交易,导致未经授权的净支出高达48,849.23美元。具体开销中,Cordero在星巴克花费超过1万美元,在快餐店支出7000多美元,这种挥霍的生活方式让人震惊。

    🚨 危机与重生:社区的团结

    Cordero的行为不仅让协会的财务状况恶化,还将Python NZ推向了破产的边缘。面对此情此景,协会的成员们感到无比焦虑,面对清算风险,他们甚至不得不筹款请律师,以确保自己的合法权益。

    在危机最严重的时刻,来自Linux Australia的支持成为了协会重生的希望。在开源社区的团结下,Python NZ得以获得救助,重建信任与透明度。Eastman感慨道:“广泛的开源社区和技术社区以我从未见过的方式团结在我们身边,给了我们极大的希望。”

    🛡️ 吸取教训与未来展望

    为了防止类似事件的重演,Python NZ采取了多项新措施来加强财务透明度和问责制。其中包括改进财务流程,确保需要使用财务工具的人能够获得必要的权限,并对现有的保障措施进行实际测试。这一切的改变,犹如软件开发中的迭代更新,确保了组织的健康运行。

    Cordero最终承认了自己的罪行,将在2024年10月10日接受判决。尽管协会已对他提出诉讼并要求赔偿,但Eastman清楚,这笔钱大概率是要不回来的。

    🎉 结语:重塑信任的旅程

    Python NZ经历了信任的崩塌与重建的艰辛,然而正是在这场风波中,协会在成员的共同努力下,展现了惊人的韧性与团结。未来,Python NZ将继续在新西兰推广Python语言,举办更丰富的活动与会议,重塑一个更加透明与信任的社区。

    在这个不确定的时代,信任是最珍贵的财富,而Python NZ的故事恰恰提醒我们:在追求成功的路上,信任与透明永远是不可或缺的基石。


    参考文献

    1. Juha Saarinen. “Trusted treasurer turned thief for personal gain at high-profile coding language society.” Interest.co.nz. 链接.
    2. CSDN博客. “突发!Python协会曝出丑闻:49万元被“熟人”挪用,发现时账户仅剩183元,险些破产…” 链接.
  • 开源GPU虚拟化方案:HAMi

    在当今的计算环境中,GPU的高效利用变得愈加重要,尤其是在需要并行计算的AI和机器学习任务中。本文将深入探讨一个开源的GPU虚拟化方案——HAMi,涵盖其安装、配置和使用方法。

    1. 为什么需要GPU共享与切分?

    在深入HAMi之前,我们首先需要思考一个问题:为什么需要GPU共享和切分等方案?在裸机环境中,多个进程可以共享同一GPU,然而当我们转向Kubernetes(K8s)环境时,这种共享就变得复杂了。

    资源感知

    在K8s中,资源是与节点绑定的。NVIDIA提供的device-plugin可以帮助我们感知GPU资源,并将其上报到kube-apiserver。这样,我们就能在Node对象上看到相应的GPU资源。

    例如,使用以下命令查看节点资源:

    root@liqivm:~# k describe node gpu01 | grep Capacity -A 7
    Capacity:
      cpu:                128
      memory:             1056457696Ki
      nvidia.com/gpu:     8

    可以看出,该节点上有8个GPU可用。

    资源申请

    当我们创建Pod时,可以申请相应的GPU资源。例如,申请一个GPU:

    apiVersion: v1
    kind: Pod
    metadata:
      name: gpu-pod
    spec:
      containers:
      - name: gpu-container
        image: nvidia/cuda:11.0-base
        resources:
          limits:
            nvidia.com/gpu: 1
        command: ["nvidia-smi"]

    这样,K8s调度器就会将该Pod调度到拥有足够GPU资源的节点上,同时该Pod申请的资源会被标记为已使用,无法再分配给其他Pod。

    2. 什么是HAMi?

    HAMi(Heterogeneous AI Computing Virtualization Middleware)是一个异构算力虚拟化平台,旨在为Kubernetes集群中的异构AI计算设备提供管理和调度功能。HAMi允许任务在不同类型的异构设备(如GPU、NPU等)之间共享资源,并基于设备的拓扑和调度策略做出更优的调度决策。

    主要功能

    HAMi支持GPU的细粒度隔离,可以对核心和内存使用进行1%级别的隔离。通过替换容器中的libvgpu.so库,HAMi能够实现CUDA API的拦截,从而实现对GPU资源的有效管理。

    例如,您可以在Pod中这样指定资源:

    apiVersion: v1
    kind: Pod
    metadata:
      name: gpu-pod
    spec:
      containers:
        - name: ubuntu-container
          image: ubuntu:18.04
          command: ["bash", "-c", "sleep 86400"]
          resources:
            limits:
              nvidia.com/gpu: 1 # 请求1个vGPU
              nvidia.com/gpumem: 3000 # 每个vGPU申请3000M显存
              nvidia.com/gpucores: 30 # 每个vGPU使用30%的GPU算力

    3. HAMi的部署

    HAMi的安装使用Helm Chart,非常简单。首先,您需要部署NVIDIA的GPU Operator,以确保环境的兼容性。

    部署步骤

    1. 添加HAMi仓库:
       helm repo add hami-charts https://project-hami.github.io/HAMi/
    1. 获取集群服务端版本:
       kubectl version
    1. 使用Helm安装HAMi:
       helm install hami hami-charts/hami --set scheduler.kubeScheduler.imageTag=v1.27.4 -n kube-system
    1. 验证安装状态:
       kubectl get pods -n kube-system | grep hami

    如果vgpu-device-pluginvgpu-scheduler的状态为Running,则表示安装成功。

    4. 验证GPU资源

    在安装完成后,您可以检查节点的GPU资源是否已经按照预期扩容。例如,使用以下命令:

    kubectl get node xxx -oyaml | grep capacity -A 7

    您将看到节点上可用的GPU资源数量增加。

    5. 小结

    HAMi作为一个开源vGPU方案,提供了细粒度的GPU资源隔离和管理能力,极大地提升了GPU的利用率。通过HAMi,用户可以在Kubernetes环境中实现对GPU资源的有效共享与管理,推动AI和机器学习任务的高效执行。

    如需了解更多,欢迎访问HAMi的GitHub页面


  • 🌐 PHP in WebAssembly:一个新纪元的到来

    在技术的海洋中,WebAssembly(Wasm)如同一艘航行的航母,正以其惊人的速度和强大的能力改变着我们对网页应用的想象。今天,我们将深入探讨一个令人兴奋的项目——php-wasm,它将PHP这一古老而强大的编程语言融入到了WebAssembly的世界中。准备好了吗?让我们一起探索这个技术的奇迹吧!

    🎉 何为php-wasm?

    php-wasm是一个让PHP能够在WebAssembly环境中运行的项目,这意味着你可以在你的浏览器中直接运行PHP代码,而无需依赖服务器。想象一下,PHP在浏览器中就像一位魔术师,随时随地为你表演它的魔法。无论是处理表单,还是进行复杂的计算,php-wasm都能轻松应对。

    🚀 版本0.0.9-alpha的新特性

    在这个版本中,php-wasm引入了一系列令人兴奋的特性,以下是一些值得关注的亮点:

    • PHP-CGI支持:现在,你可以在Web服务器模式下运行PHP,像Apache或Nginx一样,处理HTTP请求。
    • 运行时扩展加载:动态加载扩展,让你的PHP代码更加灵活。
    • 支持多种常用库:如libicu、freetype、zlib等,扩展了PHP的功能。
    • HTTPD-like CGI包装器:让php-wasm在处理请求时表现得更加得心应手。
    • 与Webpack兼容:现在模块可以轻松地与Webpack集成,构建过程更加流畅。

    这些功能是如何实现的呢?下面的图表为您展示了php-wasm的架构和工作原理。

    graph TD; A[浏览器] –>|请求| B[Service Worker]; B –>|HTTP请求| C[php-cgi-wasm]; C –>|生成响应| B; B –>|返回| A;

    💻 安装与使用

    要开始使用php-wasm,安装过程相当简单。只需运行以下命令:

    npm install php-wasm@alpha

    你也可以安装php-cgi-wasm和php-wasm-builder,分别用于不同的需求:

    npm install php-cgi-wasm@alpha
    npm install php-wasm-builder@alpha

    示例:在React中使用php-wasm

    下面是一个在React应用中使用php-wasm的简单示例,展示了如何通过php-wasm处理表单输入:

    import { PhpWeb } from 'php-wasm/PhpWeb.mjs';
    
    const php = new PhpWeb();
    
    php.addEventListener('output', (event) => {
        console.log('PHP Output:', event.detail);
    });
    
    const handleSubmit = async (event) => {
        event.preventDefault();
        const code = `<?php echo "Hello, " . htmlspecialchars($_POST['name']); ?>`;
        await php.run(code);
    };
    
    // JSX部分
    return (
        <form onSubmit={handleSubmit}>
            <input type="text" name="name" />
            <button type="submit">提交</button>
        </form>
    );

    在这个示例中,我们创建了一个简单的表单,用户输入的名字会被PHP代码处理,并输出到控制台。

    🌍 实际应用示例

    1. 数据库操作

    在php-wasm环境中,我们可以与SQLite数据库进行交互。以下示例展示了如何创建一个简单的用户表并插入数据:

    <?php
    $db = new SQLite3('my_database.db');
    $db->exec('CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)');
    $stmt = $db->prepare('INSERT INTO users (name) VALUES (:name)');
    $stmt->bindValue(':name', 'John Doe', SQLITE3_TEXT);
    $stmt->execute();
    ?>

    2. 动态生成网页内容

    利用php-wasm,您可以通过PHP动态生成网页内容。例如,以下代码展示了如何生成一个简单的HTML页面:

    <?php
    echo "<h1>欢迎使用php-wasm!</h1>";
    ?>

    这段代码会在浏览器中显示一个欢迎信息,展现了PHP在WebAssembly环境中的强大能力。

    📚 参考文献

    1. Sean Morris. (2023). php-wasm README. GitHub. 链接
    2. WebAssembly Documentation. (2023). MDN Web Docs. 链接
    3. PHP Manual. (2023). PHP.net. 链接

    通过php-wasm,PHP不仅仅是一个服务器端的脚本语言,它正在迈向前端开发的新领域。未来,php-wasm将继续发展壮大,成为Web开发者不可或缺的工具。准备好迎接这个新时代了吗?

  • 🔒 WP-WebAuthn:密码的终结者

    在这个快节奏的数字时代,密码就像过时的老派舞蹈,虽然我们都在努力坚持,但实际上谁不想换一种更酷、更安全的方式呢?这里,WP-WebAuthn 应运而生,带来了新时代的网络认证技术。让我们一起探索这一令人兴奋的技术,看看它如何颠覆我们对密码的依赖。

    🌐 什么是 WebAuthn?

    WebAuthn 是一个新生的网络认证技术,其目标是通过 USB 认证器、指纹识别、Windows Hello、FaceID/TouchID 等手段,取代传统的密码。想象一下,你不再需要在每次登录时输入复杂的密码,只需轻触一下认证器,几秒钟内便可完成身份验证,真是太神奇了!image.png

    🛡️ 安全性与隐私

    WebAuthn 于2019年3月成为W3C建议,旨在帮助Web应用程序创建和使用基于公钥的强大凭证。它的设计理念是确保安全与隐私并重。通过这种方式,用户的隐私数据根本不需要被传输,简直是网络认证的未来之星!

    📦 WP-WebAuthn 插件

    WP-WebAuthn 是一个极其方便的 WordPress 插件,能让你的网站轻松启用 WebAuthn。这意味着你可以通过简单的安装,体验到最新的网络验证技术。想象一下,用户只需轻松点击一次按钮,就能完成登录,完全不需要输入密码,简直是懒人福音!

    ⚙️ 安装步骤

    1. 确保你的服务器已安装 PHP 扩展 gmp 和 mbstring。
    2. releases 下载插件并上传安装。
    3. 或者在 WordPress 后台搜索安装 WP-WebAuthn

    📜 插件功能

    WP-WebAuthn 插件包含 4 个短代码和 4 个 Gutenberg 区块,用户可以非常方便地在前端页面中插入认证器注册表单等组件。无论是初学者还是开发者,都能轻松上手。

    🎉 许可证与感谢

    WP-WebAuthn 使用 GPL v3.0 许可证开源,任何人都可以自由使用和修改这个插件。在此特别感谢所有的贡献者,正是你们的努力,让这个项目得以成功。

    结语

    在网络安全日益重要的今天,WP-WebAuthn 为我们提供了一种全新的认证方式,摒弃传统密码的麻烦,迎接更安全、更便捷的数字生活。谁说密码是不可或缺的?让我们一起拥抱无密码的未来吧!


    参考文献

    1. WebAuthn 官方文档
    2. W3C WebAuthn 推荐
    3. WP-WebAuthn GitHub 页面

    你还没有登录。

  • 让Emacs在Win下输出中文

    在 Windows 下,Emacs 默认使用 UTF-8 编码。如果你希望将 message 输出的文本设置为 GBK 编码,可以通过以下方法实现:

    1. 设置编码

    在你的 Emacs 配置文件(如 .emacsinit.el 位置在:C. \Users\你的用户名\AppData\Roaming)中,添加以下代码:

    ;; 设置默认编码为 GBK
    (prefer-coding-system 'gbk)
    
    ;; 将 message 输出设置为 GBK
    (set-language-environment "Chinese-GBK")

    2. 确保正确的输出

    在使用 message 函数时,确保传递的字符串是正确编码的。例如:

    (message "你好,世界!")

    3. 保存文件时使用 GBK 编码

    如果需要保存文件时使用 GBK 编码,可以在打开文件后使用:

    (set-buffer-file-coding-system 'gbk)

    4. 重新启动 Emacs

    修改配置文件后,重新启动 Emacs,使设置生效。

    5. 测试输出

    你可以在 Emacs 中执行以下代码来测试 message 的输出:

    (message "这是一个测试消息。")

    6. 其他注意事项

    • 确保你的终端或其他输出设备支持 GBK 编码。
    • 如果你的 Emacs 版本不支持 GBK,可能需要安装相应的编码库。

    通过以上步骤,你应该能够将 message 输出的文本设置为 GBK 编码。

  • 🎯 一键推送:如何在 Caddy 2 中推送所有的 JS 和 CSS 文件

    在现代 web 开发中,加载速度是用户体验的重要组成部分。Caddy 2 提供的 HTTP/2 推送功能,能够让我们在用户请求页面时,主动将 JavaScript 和 CSS 文件推送给他们。这样就像是给用户送上了一份精致的套餐,让他们在享用主菜的同时,也能提前品尝到美味的配菜。今天,我们就来看看如何配置 Caddy 2 推送所有的 JS 和 CSS 文件。

    📂 步骤一:打开 Caddyfile

    首先,我们需要找到并打开 Caddy 的配置文件 Caddyfile。这个文件通常位于 /etc/caddy/Caddyfile,你可以使用以下命令打开:

    sudo nano /etc/caddy/Caddyfile

    ✏️ 步骤二:修改 Caddyfile 配置

    Caddyfile 中,你可以使用通配符来匹配所有的 JS 和 CSS 文件,并进行推送。以下是一个示例配置:

    example.com {
        root * /var/www/html
        file_server
    
        # 推送所有的 CSS 文件
        @css {
            path_regexp css ^.*\.css$
        }
        push @css
    
        # 推送所有的 JS 文件
        @js {
            path_regexp js ^.*\.js$
        }
        push @js
    }

    在这个配置中:

    • @css@js 是两个匹配器,用于匹配所有以 .css.js 结尾的文件。
    • path_regexp 是一个正则表达式匹配器,它能够灵活地匹配文件路径。
    • push 指令则会将匹配到的文件进行推送。

    🔄 步骤三:重启 Caddy 服务

    完成 Caddyfile 的修改后,别忘了重启 Caddy 服务,使更改生效:

    sudo systemctl restart caddy

    🔍 步骤四:验证推送效果

    要验证推送是否成功,你可以使用浏览器的开发者工具:

    1. 打开你的网页,右键点击选择“检查”或按 F12
    2. 切换到“网络”选项卡。
    3. 刷新页面,查看加载的资源。

    在加载的资源列表中,你应该能看到 .css.js 文件被标记为 “Pushed”,这说明推送功能已经成功运行。

    ⚠️ 注意事项

    1. 推送的频率:推送过多的文件可能会导致网络拥堵,因此建议根据实际情况合理选择推送的文件。
    2. 浏览器支持:确保目标用户的浏览器支持 HTTP/2 推送,尽量避免在老旧浏览器中出现兼容性问题。
    3. 性能监测:建议在推送后进行性能测试,观察整体的加载时间和用户体验的变化。

    ✅ 总结

    通过以上步骤,你已经成功配置了 Caddy 2 以推送所有的 JavaScript 和 CSS 文件。这样的配置不仅提升了网页的加载速度,还能为用户带来更流畅的浏览体验。希望这篇指南能够帮助你更好地利用 Caddy 2 的强大功能,让你的网站如虎添翼!如有任何疑问,欢迎随时交流!

人生梦想 - 关注前沿的计算机技术 acejoy.com