diff --git a/scripts/clean-unused-images.js b/scripts/clean-unused-images.js index fe712cfdf..0ca80cd0a 100644 --- a/scripts/clean-unused-images.js +++ b/scripts/clean-unused-images.js @@ -85,7 +85,8 @@ function extractImageReferences(content) { // 但如果是本地文件引用,可能直接就是路径 // 1. 匹配标准 Markdown 图片 ![...](...) - const markdownImageRegex = /!\[.*?\]\((.*?)\)/g; + // 修复:支持 URL 中包含一层括号,例如 image(1).png + const markdownImageRegex = /!\[.*?\]\(((?:[^()]+|\([^()]*\))+)\)/g; while ((match = markdownImageRegex.exec(content)) !== null) { let url = match[1].trim(); // 如果 URL 包含 title 部分 (例如 "path/to/image.png" "Title"),去除 title diff --git a/src/content/assets/images/eovsesa-1.png b/src/content/assets/images/eovsesa-1.png new file mode 100644 index 000000000..5675fc928 Binary files /dev/null and b/src/content/assets/images/eovsesa-1.png differ diff --git a/src/content/assets/images/eovsesa-10.png b/src/content/assets/images/eovsesa-10.png new file mode 100644 index 000000000..189179d04 Binary files /dev/null and b/src/content/assets/images/eovsesa-10.png differ diff --git a/src/content/assets/images/eovsesa-11.png b/src/content/assets/images/eovsesa-11.png new file mode 100644 index 000000000..7fe210396 Binary files /dev/null and b/src/content/assets/images/eovsesa-11.png differ diff --git a/src/content/assets/images/eovsesa-12.png b/src/content/assets/images/eovsesa-12.png new file mode 100644 index 000000000..32946c397 Binary files /dev/null and b/src/content/assets/images/eovsesa-12.png differ diff --git a/src/content/assets/images/eovsesa-13.png b/src/content/assets/images/eovsesa-13.png new file mode 100644 index 000000000..6e45a03e0 Binary files /dev/null and b/src/content/assets/images/eovsesa-13.png differ diff --git a/src/content/assets/images/eovsesa-14.png b/src/content/assets/images/eovsesa-14.png new file mode 100644 index 000000000..bd79e7f0e Binary files /dev/null and b/src/content/assets/images/eovsesa-14.png differ diff --git a/src/content/assets/images/eovsesa-15.png b/src/content/assets/images/eovsesa-15.png new file mode 100644 index 000000000..7d8ce8922 Binary files /dev/null and b/src/content/assets/images/eovsesa-15.png differ diff --git a/src/content/assets/images/eovsesa-16.png b/src/content/assets/images/eovsesa-16.png new file mode 100644 index 000000000..be161f03c Binary files /dev/null and b/src/content/assets/images/eovsesa-16.png differ diff --git a/src/content/assets/images/eovsesa-17.png b/src/content/assets/images/eovsesa-17.png new file mode 100644 index 000000000..afa889863 Binary files /dev/null and b/src/content/assets/images/eovsesa-17.png differ diff --git a/src/content/assets/images/eovsesa-18.png b/src/content/assets/images/eovsesa-18.png new file mode 100644 index 000000000..796646b02 Binary files /dev/null and b/src/content/assets/images/eovsesa-18.png differ diff --git a/src/content/assets/images/eovsesa-19.png b/src/content/assets/images/eovsesa-19.png new file mode 100644 index 000000000..64ac472b9 Binary files /dev/null and b/src/content/assets/images/eovsesa-19.png differ diff --git a/src/content/assets/images/eovsesa-2.png b/src/content/assets/images/eovsesa-2.png new file mode 100644 index 000000000..40bd0f0dd Binary files /dev/null and b/src/content/assets/images/eovsesa-2.png differ diff --git a/src/content/assets/images/eovsesa-20.png b/src/content/assets/images/eovsesa-20.png new file mode 100644 index 000000000..e21b5ea12 Binary files /dev/null and b/src/content/assets/images/eovsesa-20.png differ diff --git a/src/content/assets/images/eovsesa-21.png b/src/content/assets/images/eovsesa-21.png new file mode 100644 index 000000000..54bd59bcb Binary files /dev/null and b/src/content/assets/images/eovsesa-21.png differ diff --git a/src/content/assets/images/eovsesa-3.png b/src/content/assets/images/eovsesa-3.png new file mode 100644 index 000000000..25bcf8912 Binary files /dev/null and b/src/content/assets/images/eovsesa-3.png differ diff --git a/src/content/assets/images/eovsesa-4.png b/src/content/assets/images/eovsesa-4.png new file mode 100644 index 000000000..5b96fbf1b Binary files /dev/null and b/src/content/assets/images/eovsesa-4.png differ diff --git a/src/content/assets/images/eovsesa-5.png b/src/content/assets/images/eovsesa-5.png new file mode 100644 index 000000000..f434b41ca Binary files /dev/null and b/src/content/assets/images/eovsesa-5.png differ diff --git a/src/content/assets/images/eovsesa-6.png b/src/content/assets/images/eovsesa-6.png new file mode 100644 index 000000000..0903475ef Binary files /dev/null and b/src/content/assets/images/eovsesa-6.png differ diff --git a/src/content/assets/images/eovsesa-7.png b/src/content/assets/images/eovsesa-7.png new file mode 100644 index 000000000..b4b350443 Binary files /dev/null and b/src/content/assets/images/eovsesa-7.png differ diff --git a/src/content/assets/images/eovsesa-8.png b/src/content/assets/images/eovsesa-8.png new file mode 100644 index 000000000..b95461aa0 Binary files /dev/null and b/src/content/assets/images/eovsesa-8.png differ diff --git a/src/content/assets/images/eovsesa-9.png b/src/content/assets/images/eovsesa-9.png new file mode 100644 index 000000000..6debb9ac1 Binary files /dev/null and b/src/content/assets/images/eovsesa-9.png differ diff --git a/src/content/assets/images/eovsesa.png b/src/content/assets/images/eovsesa.png new file mode 100644 index 000000000..7468bd724 Binary files /dev/null and b/src/content/assets/images/eovsesa.png differ diff --git a/src/content/posts/eovsesa.md b/src/content/posts/eovsesa.md new file mode 100644 index 000000000..7d61aa990 --- /dev/null +++ b/src/content/posts/eovsesa.md @@ -0,0 +1,120 @@ +--- +title: EO VS ESA,谁才是国内CDNの王?! +published: 2026-01-16T16:53:08 +description: EdgeOne和ESA都是非常好的免费国内CDN,常规用起来几乎一模一样,今天我们就来让他俩一决雌雄! +image: ../assets/images/eovsesa.png +draft: false +lang: "" +--- +# 前言 + +首先,EdgeOne是来的最早的,于25年7月就开始测试了,而ESA是10月才开放的。 + +虽然EdgeOne在早期需要兑换码换免费套餐,而兑换码从早期的发推特然后找官方领码,再到Discord群组每天固定时间发码,最后到测速分享直接拿兑换码,门槛逐渐放低,功能逐渐齐全。 + +而ESA由于是后来者,直接给每个阿里云账户发了一个免费的ESA套餐,如果你有多站点接入的需求,也可以通过拉人头来得到更多的免费套餐。 + +就当前(26年1月)来说,两家的体验大差不差,但是EdgeOne和ESA的底层逻辑是有点区别的。 + +# 底层逻辑对比 + +EdgeOne这个项目,特别是Page,在24年就已经初具雏形并且能够像那些大厂如Cloudflare Page,Github Page,Vercel等静态托管平台一样使用了,但是当时一是腾讯是悄咪咪上的,二是节点实在是太烂了,只有海外新加坡节点,也不支持国内节点。 + +而ESA大概率是从老的DCDN和云函数FC改过来的,控制台就已经露出鸡脚了。 + +![](../assets/images/eovsesa-1.png) + +# 规则引擎与WAF + +ESA的很多东西直接是照抄Cloudflare的,比如: + +![](../assets/images/eovsesa-3.png) +![](../assets/images/eovsesa-2.png) + +并且还将每条规则(嵌套子规则也算一条)全部砍了一刀,免费套餐仅支持5条规则。 + +![](../assets/images/eovsesa-4.png) + +## EdgeOne 的优势 + +反观EdgeOne,它没有照抄Cloudflare,而是自己写了一套规则引擎,所有类型的规则都在一处地方配置,并且可以互相联动。 + +![](../assets/images/eovsesa-5.png) +![](../assets/images/eovsesa-6.png) + +甚至你还可以对不合法请求在L7给空。 + +![](../assets/images/eovsesa-7.png) +![](../assets/images/eovsesa-8.png) + +### 优先级陷阱 + +并且要注意一点,虽然你可以在规则引擎里伪装一个WAF拦截,但是在EdgeOne中,流量会先经由规则引擎,再经过WAF,也就是如果你在WAF写了个非CN拦截,然后在规则引擎里写个非CN给空,海外IP访问只能看到空响应,看不到拦截页面,流量也照记(难绷)。 + +![](../assets/images/eovsesa-9.png) + +## ESA 的策略 + +而ESA这边,WAF的优先级始终是最高的,流量会先被WAF网关审查,通过后才应用规则,但是免费套餐不支持在WAF中设置地域级别的拦截(难绷)。 + +![](../assets/images/eovsesa-10.png) + +### 曲线救国方案 + +但是有个曲线救国的方案,就是先写个规则将流量全拦截,然后再写个白名单规则,将可信流量绕过该规则。 + +![](../assets/images/eovsesa-11.png) +![](../assets/images/eovsesa-12.png) + +# 回源配置 + +再接着就是因为ESA照抄Cloudflare,所以创建加速站点的时候默认是HTTP走80,HTTPS走443回源,如果你要更改回源的端口,还需要浪费一个回源规则。 + +![](../assets/images/eovsesa-13.png) + +而EdgeOne可以在创建站点的时候直接就设置回源端口以及回源Host。 + +![](../assets/images/eovsesa-14.png) + +# SSL 证书签发 + +再到SSL签发,首先两家都支持默认的CNAME签发,也就是你把域名解析到我这,我帮你签SSL,但是EdgeOne的CNAME签发是每一个站点单独签一次。 + +![](../assets/images/eovsesa-15.png) + +而ESA是统一管理,你给我个DCV,我直接给你签一个泛域名,之后你就用去吧。 + +![](../assets/images/eovsesa-16.png) + +# 规则隔离与互通 + +然后就是最重磅的,EdgeOne独属的左右脑互搏时刻。 + +在EdgeOne CDN和EdgeOne Page中,他俩的规则竟然不是互通的,CDN业务走CDN的规则,Page的规则走Page的规则,也行吧,他想做干湿分离,我配两套没问题。 + +## 功能阉割 + +但是!阉割是什么意思,为什么CDN可以写地域判断,Page就只能写IP? + +![](../assets/images/eovsesa-17.png) +![](../assets/images/eovsesa-18.png) + +那么也没有什么让Page吃上CDN规则的方法呢?有的,兄弟有的(但是这样会在控制台看到双倍流量,如果你的Page纯静态,可以写个全缓存缓解一下)。 + +![](../assets/images/eovsesa-19.png) + +# Page 服务对比 + +接着到Page部分。 + +EdgeOne的Page你可以直接看作是Cloudflare Page的本地化,甚至突破了核心代码,直接可以在Page里面跑Nodejs服务,要知道,Cloudflare Page也只有一个V8环境(Umami也可以!SSR函数小于等于128MB即可)并且可以托管海量大和多的文件。 + +![](../assets/images/eovsesa-20.png) + +而ESA Page非常像云函数FC改过来的,虽然也支持函数吧,但没有完整的Nodejs环境,甚至最近WebSocket也被砍了(关闭后就打不开了),并且托管的文件数以及单文件大小如下限制。 + +![](../assets/images/eovsesa-21.png) + +# 速度与限速 + +最后就是速度相关,根据多方数据以及自测,两个CDN都会在长时间的单IP上下行请求逐渐将速率削减至大约 500KB/s,但如果只是正常业务使用,短时间的突发速率都可以飙到50MB/s左右(但不能长期),所以这俩CDN都不适合反向代理对象存储以及大文件分发,如果有类似业务需求还是老实用Cloudflare,CF是不限速的。 \ No newline at end of file diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro index 84dea773f..427c9b9c0 100644 --- a/src/layouts/Layout.astro +++ b/src/layouts/Layout.astro @@ -227,11 +227,15 @@ const bannerOffset = background-size: var(--bg-size); background-repeat: var(--bg-repeat); background-attachment: var(--bg-attachment); - opacity: var(--bg-opacity); + opacity: 0; pointer-events: none; z-index: -1; - transition: opacity 0.3s ease-in-out; + transition: opacity 0.5s ease-in-out; } + + .bg-loaded #bg-box { + opacity: var(--bg-opacity); + } /* #bg-box.loaded { opacity: calc(var(--bg-opacity) * var(--bg-enable));