fasthttp + `page partial gziped cache`: 页面输出服务性能提升20%

这篇具有很好参考价值的文章主要介绍了fasthttp + `page partial gziped cache`: 页面输出服务性能提升20%。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!

  • cnblogs博客
  • zhihu
  • Github
  • 公众号:一本正经的瞎扯
    fasthttp + `page partial gziped cache`: 页面输出服务性能提升20%

接上一篇:http 中使用 gzip 输出内容时,如何预先压缩前一半页面?

经过实测,对线上一个输出 html 的服务进行了改造,通过预先压缩页面前半部分的方法,此接口的性能提升了 20%.

对比项 无 gzip 压缩 gzip 压缩+前半部分预压缩
输出字节数 4399 2246
每核 qps 14052.63 16924.75

具体的写法如下:
1.获取改造后的库

go get github.com/ahfuzhang/compress@v1.17.2

2.在 go.mod 中修改:

replace (
	github.com/klauspost/compress => github.com/ahfuzhang/compress v1.17.2
)

require (
	github.com/klauspost/compress v1.16.3
    github.com/valyala/bytebufferpool v1.0.0
	github.com/valyala/fasthttp v1.50.0
)

3.代码:

package main

import (
	"bytes"
	_ "embed"
	"fmt"
	"log"
	"os"

	"github.com/klauspost/compress/gzip"
	"github.com/valyala/bytebufferpool"
	"github.com/valyala/fasthttp"
)

//go:embed raw.html
var html string

//go:embed raw.js
var js string


func testGzipedHttp() {
    topHalf, digest := gzip.GetGzipedData([]byte(html))  // cache 页面的前一半, digest 是这些内容的 crc32 的校验和
	requestHandler := func(ctx *fasthttp.RequestCtx) {
		ctx.Response.Header.Add("Content-Type", "text/plain")
		ctx.Response.Header.Add("Content-Encoding", "gzip")

		switch string(ctx.Request.URI().RequestURI()) {
		case "/1":   // direct output
			w, _ := gzip.NewWriterLevel(ctx, gzip.BestCompression)
			w.Write([]byte(html))
			w.Write([]byte(js))
			w.Close()
		case "/2":
			w := gzip.GetWriter(ctx)  // 使用对象池
		    w.WriteHeader()  // 写 gzip 的头部信息,10 字节
            w.WriteGzipedData([]byte(html), topHalf, digest)  
            // 当这个缓存是第一次输出的时候,可以传入 digest 值,这样可以少算一次  crc32
            // 当不是第一次输出的时候, 第三个参数 digest 填  0

            w.Write([]byte(js))
            gzip.PutWriter(w)  // 必须调用,写入尾部信息,并放回对象池
		}
	}

	s := &fasthttp.Server{
		Handler: requestHandler,
	}
	if err := s.ListenAndServe(":8080"); err != nil {
		log.Fatalf("error in ListenAndServe: %v", err)
	}
}

func main() {
	testGzipedHttp()
}

希望对你有用 😃


这个 case 已经分享到 fasthttp github, 希望未来能够集成这个能力进去:https://github.com/valyala/fasthttp/issues/1631文章来源地址https://www.toymoban.com/news/detail-710778.html

到了这里,关于fasthttp + `page partial gziped cache`: 页面输出服务性能提升20%的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序设计之页面文件pages

    首先,下载微信小程序开发工具,具体下载方式可以参考文章《微信小程序开发者工具下载》。 然后,注册小程序账号,具体注册方法,可以参考文章《微信小程序个人账号申请和配置详细教程》。 在得到了测试号的账号信息之后,可以在开发者工具中使用此账号信息创建

    2024年02月06日
    浏览(43)
  • 几个影响 cpu cache 性能因素及 cache 测试工具介绍

    1 cache 性能及影响因素 1.1 内存访问和性能比较 有如下测试代码: 该测试代码预先分配大量内存,并与一个数组指针管理,使其可以通过数组索引访问该片申请内存,接着对该内存域进行预读写,使其在测试中不受 pagefault 影响测试结果。 该测试主要的测试点: 第一个循环按

    2024年02月14日
    浏览(45)
  • 二、nginx错误页面[error_page]

    解释:其原理是响应到错误代码后,导向 指定的路由 ,然后再由 指定的路由 处理,如下当错误代码是404时,相当于访问 http://localhost:80/50x.html ,正好被内部传送给 location = /50x.html 让其来进行处理(需要注意必须有 50x.html 这个页面) 解释:其原理是响应到错误代码后,30

    2024年02月16日
    浏览(41)
  • WordPress判断页面函数is_page()怎么使用?

    平时我们在折腾 WordPress 的时候,经常需要用到 is_page()函数来判断是否属于页面,是否属于指定页面等。那么对于这个判断页面函数 is_page()应该怎么使用呢? 其中$page(int | string | array) (可选),可以是页面 ID,标题,或其数组,默认值:”。 比如在 header.php 文件判断是

    2024年01月21日
    浏览(39)
  • Selenium page_load_strategy设置页面加载策略

    pageLoadStrategy  支持以下值: normal 这种状态导致Selenium等待整个页面加载(下载并解析了html内容和子资源)。 eager 这种状态导致Selenium等待DOMContentLoaded事件(仅下载和解析html内容)。 none 此策略使Selenium在完全接收初始页面内容(下载html内容)后立即返回。即正常情况下,

    2024年02月13日
    浏览(44)
  • vue3+vite静态页面部署到gitee pages

    随着vue3的成熟,vue2将在2023.12.31停止维护,所以有必要搞一下vue3项目静态页面怎么部署到gitee中了 如果还有想部署vue2静态页面到gitee中的话,访问https://blog.csdn.net/qq_45952585/article/details/122514028?spm=1001.2014.3001.5502 vue3+vite+ts脚手架创建就不写了,随便搜一搜,一大把,直接上重点

    2024年02月03日
    浏览(56)
  • Spring Cache:提高应用性能的策略和技巧

    🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页 ——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍专栏》 🐾 学会IDEA常用操作,工作效率翻倍~💐 🌊 《100天精通Golang(基础

    2024年02月09日
    浏览(48)
  • 大模型推理性能优化之KV Cache解读

    做大模型性能优化的一定对KV Cache不陌生,那么我们对这个技术了解到什么程度呢?请尝试回答如下问题: KV Cache节省了Self-Attention层中哪部分的计算? KV Cache对MLP层的计算量有影响吗? KV Cache对block间的数据传输量有影响吗?本文打算剖析该技术并给出上面问题的答案。 大模

    2024年02月16日
    浏览(164)
  • SQL Server的页面(pages )和盘区(extents)体系结构

    页面是 SQL Server 中数据存储的基本单元。范围是八个物理上连续页面的集合。盘区有助于有效地管理页面。了解页面和盘区的体系结构对于设计和开发高效执行的数据库非常重要。 SQL Server 中数据存储的基本单位是页面。分配给数据库中数据文件(.mdf 或 .ndf)的磁盘空间在逻

    2023年04月09日
    浏览(43)
  • 实验4 Cache性能分析【计算机系统结构】

    2023-6-16 21:19:13 以下内容源自《【计算机系统结构】》 仅供学习交流使用 实验3 Tomasulo算法【计算机系统结构】 (1)加深对Cache的基本概念、基本组织结构以及基本工作原理的理解。 (2)掌握Cache容量、相联度、块大小对Cache性能的影响。 (3)掌握降低Cache不命中率的各种方法。 采用

    2024年02月09日
    浏览(79)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包