暮山紫 發表於 2026-1-18 13:55:00

Python、CSharp、Go、Nextjs,不同框架的性能到底差多少?

<h2 id="前言">前言</h2>
<p>不知不觉居然12月了,最近琐事太多,产出并不高,继续整理一下近期的一些笔记吧。</p>
<p>上次我对部署 Django 框架时用的不同服务器进行对比测试,详见:不同Django服务器和部署方式的性能调研</p>
<p>在探索的过程中,我还对不同语言的框架进行了测试对比。</p>
<h2 id="django测试补充">Django测试补充</h2>
<p>对于上次的 Django 性能测试,还有一些补充的结论:</p>
<ul>
<li>drf 和 ninja 性能差别不大</li>
<li>在 2C2G 服务器上,workers=4 比 workers=2 的性能好,具体好多少,我只测试了 uwsgi 服务器,大概是 33% 的差距</li>
</ul>
<h2 id="本次测试">本次测试</h2>
<p>本次测试的语言和框架:</p>
<ul>
<li>aspnetcore 8.0 (starblog 项目)</li>
<li>aspnetcore webapi(controller) 9.0 (ayaka-chats 项目)</li>
<li>go + gin (ebook-forge 项目)</li>
<li>Next.js (iothub dashboard 项目)</li>
</ul>
<p>为了确保变量控制,我把这些项目都部署了一份在腾讯云 2C2G 的小水管服务器上,统一进行测试。</p>
<p>测试命令统一使用:</p>
<pre><code class="language-bash">wrk -t4 -c200 -d30s &lt;url&gt;
</code></pre>
<p>测试目标都是各项目中的轻量 API(返回短字符串或简单 JSON),侧重框架本身吞吐与延迟表现,而不是业务代码复杂度。</p>
<h2 id="测试结论">测试结论</h2>
<p>结果挺有意思,也和我长期使用这些框架的感受基本吻合。</p>
<h3 id="总览">总览</h3>
<p>对了,之前测的 Django 最好成绩是 1200RPS 左右。回顾:不同Django服务器和部署方式的性能调研</p>
<table>
<thead>
<tr>
<th>项目 / 技术栈</th>
<th>Requests/sec</th>
<th>内存占用</th>
<th>CPU占用</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>AspNetCore 8 (老架构 MVC)</strong></td>
<td>5,960</td>
<td><strong>560MB</strong></td>
<td>100%</td>
<td>架构臃肿,内存偏高;吞吐反而一般</td>
</tr>
<tr>
<td><strong>AspNetCore 9 (WebAPI)</strong></td>
<td><strong>15,031</strong></td>
<td>80MB</td>
<td>95%</td>
<td>新生代架构非常轻,性能极强</td>
</tr>
<tr>
<td><strong>Go + Gin</strong></td>
<td>6,145</td>
<td><strong>35MB</strong></td>
<td>70%</td>
<td>内存省、吞吐中规中矩</td>
</tr>
<tr>
<td><strong>Next.js (Edge API / App Router)</strong></td>
<td>405</td>
<td>135MB</td>
<td>50%</td>
<td>Node.js 在高并发 API 上天生不占优势</td>
</tr>
</tbody>
</table>
<h3 id="结论">结论</h3>
<h4 id="1-综合性能冠军aspnetcore-9">1. <strong>综合性能冠军:AspNetCore 9</strong></h4>
<p>吞吐最高、内存中等、生态强,适合未来的大项目(比如编辑器 Clipify、AI 服务、Chat API)。</p>
<h4 id="2-轻量冠军go--gin">2. <strong>轻量冠军:Go + Gin</strong></h4>
<p>内存最省,部署和扩容成本最低,适合独立组件或内部服务。</p>
<h4 id="3-传统-web-项目的现实aspnetcore-mvc-太重">3. <strong>传统 Web 项目的现实:AspNetCore MVC 太重</strong></h4>
<p>老项目迁移成本高,但新项目真的不推荐继续 MVC 了。</p>
<h4 id="4-nodejsnextjs-不适合做高并发-api">4. <strong>Node.js/Next.js 不适合做高并发 API</strong></h4>
<p>适合前端页面和简单后端逻辑,但不适合作为性能核心。</p>
<h2 id="逐项分析">逐项分析</h2>
<h3 id="aspnetcore-80-mvcstarblog">AspNetCore 8.0 MVC(StarBlog)</h3>
<blockquote>
<p>“老项目拖后腿,性能扣分主要在架构而不是 .NET 本身。”</p>
</blockquote>
<p>内存直接飙到 560MB,说明:</p>
<ul>
<li>各种 IOC + MVC + 中间件拉满</li>
<li>项目结构本身臃肿</li>
<li>吞吐不到 6k RPS</li>
</ul>
<h3 id="aspnetcore-90-webapiayaka-chats">AspNetCore 9.0 WebAPI(Ayaka Chats)</h3>
<blockquote>
<p>“这是微软真正的力量展示。”</p>
</blockquote>
<ul>
<li>内存仅 80M,非常干净利落。</li>
<li>15k RPS 是这里的冠军。</li>
<li>CPU能吃满,说明框架没有瓶颈,能把机器压榨完。</li>
</ul>
<p>✔ 适合高性能微服务、AI 中转服务</p>
<p>✔ 适合做 AI SaaS、个人工具 API 的场景</p>
<p>⚠ 写的人要懂 C#</p>
<h3 id="go--ginebook-forge">Go + Gin(Ebook Forge)</h3>
<blockquote>
<p>“极致轻量,但吞吐这次反而没那么亮眼。”</p>
</blockquote>
<ul>
<li>内存只有 35M,轻得离谱。</li>
<li>吞吐 6k RPS,比我预期的稍低,但也稳定。</li>
<li>CPU占用只有 70%,表明 Go 调度器稳,但 Gin 本身未完全吃满 CPU。</li>
</ul>
<p>✔ 特别适合后台队列、消息处理、轻量服务</p>
<p>✔ 适合部署成本敏感场景(小内存机器)</p>
<p>✘ 对偏全栈 + AI 的开发者来说,生态相对弱一些</p>
<h3 id="nextjsiothub-dashboard">Next.js(iothub dashboard)</h3>
<blockquote>
<p>“Node 跑 API:能跑,但别期待高并发。”</p>
</blockquote>
<ul>
<li>400 RPS → 不算 API 性能框架(期望是 Express/fastify 的千级)</li>
<li>延迟 200ms+ → 再次印证了 Node.js 单线程 + V8 的特性</li>
<li>适合 SSR/前端 BFF,不适合做主要 API</li>
</ul>
<p>✔ 如果是页面渲染、前端服务,中规中矩</p>
<p>✘ 如果是 API 主战场,还是别为难它</p>
<h2 id="测试数据">测试数据</h2>
<h3 id="aspnetcore-80-starblog-项目">aspnetcore 8.0 (starblog 项目)</h3>
<p>测试时内存峰值占用560M左右,CPU占用100%;<br>
这个项目因为是 AspNetCore MVC 加上架构比较老,太臃肿,导致内存占用很多,而且性能也比较差。</p>
<pre><code>$ wrk -t4 -c200 -d30s http://127.0.0.1:9874/Api/DataWrapperTest/StringResult
Running 30s test @ http://127.0.0.1:9874/Api/DataWrapperTest/StringResult
4 threads and 200 connections
Thread Stats   Avg      Stdev   Max   +/- Stdev
    Latency    44.04ms   44.20ms 304.43ms   88.08%
    Req/Sec   1.59k   559.31   2.42k    75.64%
179013 requests in 30.03s, 44.22MB read
Requests/sec:   5960.51
Transfer/sec:      1.47MB
</code></pre>
<h3 id="aspnetcore-webapicontroller-90-ayaka-chats-项目">aspnetcore webapi(controller) 9.0 (ayaka-chats 项目)</h3>
<p>测试时内存峰值占用80M左右,CPU占用95%</p>
<pre><code>$ wrk -t4 -c200 -d30s http://127.0.0.1:16080/api/auth/csrf
Running 30s test @ http://127.0.0.1:16080/api/auth/csrf
4 threads and 200 connections
Thread Stats   Avg      Stdev   Max   +/- Stdev
    Latency    13.94ms    8.17ms 111.67ms   83.87%
    Req/Sec   3.78k   1.06k    5.68k    72.92%
451205 requests in 30.02s, 99.40MB read
Requests/sec:15031.56
Transfer/sec:      3.31MB
</code></pre>
<h3 id="go--gin-ebook-forge-项目">go + gin (ebook-forge 项目)</h3>
<p>测试时内存峰值占用35M左右,CPU占用70%</p>
<pre><code>$ wrk -t4 -c200 -d30s http://127.0.0.1:8080/health
Running 30s test @ http://127.0.0.1:8080/health
4 threads and 200 connections
Thread Stats   Avg      Stdev   Max   +/- Stdev
    Latency    37.13ms   33.65ms 499.93ms   82.09%
    Req/Sec   1.55k   328.35   2.86k    74.04%
184447 requests in 30.02s, 114.86MB read
Requests/sec:   6145.14
Transfer/sec:      3.83MB
</code></pre>
<h3 id="nextjs-iothub-dashboard-项目">Next.js (iothub dashboard 项目)</h3>
<p>测试时内存峰值占用135M左右,CPU占用50%</p>
<pre><code>$ wrk -t4 -c200 -d30s http://127.0.0.1:3000/api/health
Running 30s test @ http://127.0.0.1:3000/api/health
4 threads and 200 connections
Thread Stats   Avg      Stdev   Max   +/- Stdev
    Latency   251.98ms110.23ms   1.95s    68.01%
    Req/Sec   112.01   89.28   515.00   61.88%
12192 requests in 30.03s, 4.45MB read
Socket errors: connect 0, read 0, write 0, timeout 118
Requests/sec:    405.96
Transfer/sec:    151.80KB
</code></pre>
<h2 id="小结">小结</h2>
<p>对于个人开发者和轻量 SaaS 而言:</p>
<p>想要“爽”和“稳”,首选 AspNetCore 9;</p>
<p>想要“省”和“快上手”,Go + Gin 很好;</p>
<p>Django / Python 生态强但性能不是主要卖点,需要依赖 ASGI 服务器选择;</p>
<p>Node.js 适合做 BFF,不适合承担高吞吐 API。</p>


</div>
<div id="MySignature" role="contentinfo">
    微信公众号:「程序设计实验室」
专注于互联网热门新技术探索与团队敏捷开发实践,包括架构设计、机器学习与数据分析算法、移动端开发、Linux、Web前后端开发等,欢迎一起探讨技术,分享学习实践经验。<br><br>
来源:https://www.cnblogs.com/deali/p/19498429
頁: [1]
查看完整版本: Python、CSharp、Go、Nextjs,不同框架的性能到底差多少?