全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 717|回复: 1

写了一个小框架和next.js、nuxt.js进行简单测试

[复制链接]
发表于 2023-11-15 12:33:56 | 显示全部楼层 |阅读模式
分为本地、线上测试,所有框架均用默认配置

本地测试环境: MacOS 12.7
测试样本 并发数300 持续10秒 每个框架执行3次,取平均值
测试命令 bombardier -c 300 -d 10s http://127.0.0.1:3000/

本地helloworld(删除多余的代码,只响应返回helloworld文本)

自己写的框架
==============>
Statistics        Avg      Stdev        Max
  Reqs/sec     80010.09    4575.56   89098.13
  Latency        3.82ms   372.66us    43.54ms
  HTTP codes:
    1xx - 0, 2xx - 795573, 3xx - 0, 4xx - 0, 5xx - 0
    others - 0
  Throughput:    17.16MB/s


next.js框架
==============>
Statistics        Avg      Stdev        Max
  Reqs/sec      3755.82     515.57    5050.54
  Latency       89.26ms   734.71ms     16.04s
  HTTP codes:
    1xx - 0, 2xx - 37618, 3xx - 0, 4xx - 0, 5xx - 0
    others - 275
  Errors:
    dial tcp 127.0.0.1:3002: connect: connection reset by peer - 158
    the server closed connection before returning the first response byte. Make sure the server returns 'Connection: close' response header before closing the connection - 74
       timeout - 42
    write tcp 127.0.0.1:57438->127.0.0.1:3002: write: broken pipe - 1
  Throughput:     8.97MB/s


nuxt.js框架
==============>
Statistics        Avg      Stdev        Max
  Reqs/sec      2181.77    1577.13    5278.16
  Latency      158.78ms      1.11s     16.24s
  HTTP codes:
    1xx - 0, 2xx - 21373, 3xx - 0, 4xx - 0, 5xx - 0
    others - 322
  Errors:
    dial tcp 127.0.0.1:3001: connect: connection reset by peer - 195
    the server closed connection before returning the first response byte. Make sure the server returns 'Connection: close' response header before closing the connection - 95
       timeout - 29
    write tcp 127.0.0.1:53730->127.0.0.1:3001: write: broken pipe - 1
    write tcp 127.0.0.1:53728->127.0.0.1:3001: write: broken pipe - 1
    write tcp 127.0.0.1:54196->127.0.0.1:3001: write: broken pipe - 1
  Throughput:     1.46MB/s

--------------------------
--------------------------
本地真实网站,需要读取数据库,构建页面

自己写的框架
==============>
Statistics        Avg      Stdev        Max
  Reqs/sec      1082.09    1980.78   10934.21
  Latency      271.90ms    27.26ms   465.08ms
  HTTP codes:
    1xx - 0, 2xx - 11111, 3xx - 0, 4xx - 0, 5xx - 0
    others - 0
  Throughput:    15.63MB/s


next.js
==============>
Statistics        Avg      Stdev        Max
  Reqs/sec       849.89     377.48    4222.65
  Latency      889.52ms      3.79s     30.91s
  HTTP codes:
    1xx - 0, 2xx - 8524, 3xx - 0, 4xx - 0, 5xx - 0
    others - 274
  Errors:
    dial tcp 127.0.0.1:45454: connect: operation timed out - 129
    the server closed connection before returning the first response byte. Make sure the server returns 'Connection: close' response header before closing the connection - 109
    dial tcp 127.0.0.1:45454: connect: connection reset by peer - 30
       timeout - 5
    write tcp 127.0.0.1:53003->127.0.0.1:45454: write: broken pipe - 1
  Throughput:     7.05MB/s

以前用nuxt.js写的网站换了新的数据库,所以不测试

--------------------------
--------------------------
线上测试环境: CPU 1H(i9-11900K)1G的美国小鸡
线上测试helloworld

自己写的框架 cpu占用率最高4% 平均3.2%
==============>
Statistics        Avg      Stdev        Max
  Reqs/sec      1142.57    2227.97   15024.57
  Latency      256.43ms    60.41ms   557.79ms
  HTTP codes:
    1xx - 0, 2xx - 11666, 3xx - 0, 4xx - 0, 5xx - 0
    others - 0
  Throughput:   260.31KB/s


next.js框架 cpu占用率最高48%,平均35%
==============>
Statistics        Avg      Stdev        Max
  Reqs/sec      1098.43     857.13   10456.58
  Latency      269.57ms   124.37ms      2.47s
  HTTP codes:
    1xx - 0, 2xx - 11268, 3xx - 0, 4xx - 0, 5xx - 0
    others - 0
  Throughput:     4.15MB/s


nuxt.js框架 cpu占用率最高76%,平均68%
==============>
Statistics        Avg      Stdev        Max
  Reqs/sec      1097.11     852.92    8386.19
  Latency      269.70ms    83.80ms      0.86s
  HTTP codes:
    1xx - 0, 2xx - 11250, 3xx - 0, 4xx - 0, 5xx - 0
    others - 0
  Throughput:     1.20MB/s


--------
----------------
----------------------

线上测试的请求性能接近(1.1w,这是cpu的瓶颈),不过cpu占用率差异很大。

以前用nuxt.js、next.js来开发一个网站。
后来一些原因想仿写一个:
1. 网站运行期间莫名错误不知道哪来
2. 页面加载会有很多额外文件,臃肿
3. 页面上有nuxt或next的文字,不舒服
4. 类名太长,没有压缩
5. 构建时间太久
6. 对于简单网站大材小用了

于是写了一个简单的ssr框架,模仿了nuxt和next的文件目录结构,很好处理了上面的问题,相当于就是字符串拼接
性能高的原因是bun这个js运行时,内置web服务器是uwebsockets,性能非常的高。在techempower网站中js语言排名最高
不过bun发展没有很久,避免不了一些bug,遇到一个比较严重bug,挺不可思议,当使用Bun.listen返回大于130kb的数据,pc端能够正常接受,但是移动端就卡住,无响应。但是使用Bun.serve就没有这个问题。
当时反馈过,然后怀疑我有隐藏的换行符,我还没来得及解释就关闭了

关于原因第四点,我没测试之前认为类名压缩了能很好降低文件体积,诸如.main-left-content-a => .a 、.video-content-div => .b
不过还是想多了,顶多降低1~2kb大小,没我预期的多,看来gzip压缩比我想象中要牛逼
不过类名压缩能够隐藏原有类名的含义,还是有点保护性的
发表于 2023-11-15 13:15:03 | 显示全部楼层
本帖最后由 你是人 于 2023-11-15 13:19 编辑

其实框架现在比得不是性能,这些都是锦上添花,最重要的生态,开发便利性,你如果要说性能,我感觉大多数情况下,原生性能是最好的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2024-11-26 10:51 , Processed in 0.064428 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表