Skip to content

Conversation

@grivera64
Copy link
Member

@grivera64 grivera64 commented Jun 21, 2025

Description

This PR proposes to refactor the DefaultReq and DefaultRes structs into a view-like structs onto the Ctx interface. This should improve DX when adding new Ctx methods, as we currently have to manually write new function code in both ctx.go and either req.go or res.go.

DefaultReq contains most implementations of Request-related features, while DefaultRes contains most implementations of Response-related features. There are a few exceptions where DefaultCtx fields cannot be accessed by an auxiliary method. (We can make new auxiliary methods if we want to move the few remaining methods into req.go and res.go.)

This PR also introduces new GetHeaders() methods for Req and Res interfaces to avoid duplicate Req and Resp in the function names.

Fixes #3347

Changes introduced

  • Documentation Update: Detail the updates made to the documentation and links to the changed files.
  • Changelog/What's New: Include a summary of the additions for the upcoming release notes.
  • API Longevity: Discuss the steps taken to ensure that the new or updated APIs are consistent and not prone to breaking changes.
    • This change will improve DX by writing new function code in a single location (req.go or res.go and it will be promoted to ctx.go automatically) just by running make generate.
  • Examples: Provide examples demonstrating the new features or changes in action.

Type of change

  • Enhancement (improvement to existing features and functionality)
  • Documentation update (changes to documentation)
  • Code consistency (non-breaking change which improves code reliability and robustness)

Checklist

Before you submit your pull request, please make sure you meet these requirements:

  • Followed the inspiration of the Express.js framework for new functionalities, making them similar in usage.
  • Conducted a self-review of the code and provided comments for complex or critical parts.
  • Updated the documentation in the /docs/ directory for Fiber's documentation.
  • Added or updated unit tests to validate the effectiveness of the changes or new features.
  • Ensured that new and existing unit tests pass locally with the changes.
  • Verified that any new dependencies are essential and have been agreed upon by the maintainers/community.
  • Aimed for optimal performance with minimal allocations in the new code.
  • Provided benchmarks for the new code to analyze and improve upon.

Commit formatting

Please use emojis in commit messages for an easy way to identify the purpose or intention of a commit. Check out the emoji cheatsheet here: CONTRIBUTING.md

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jun 21, 2025

Walkthrough

This change refactors the core HTTP context (DefaultCtx) in the Fiber framework to embed DefaultReq and DefaultRes structs, updating method delegations accordingly. The Req, Res, and Ctx interfaces are regenerated and expanded with new methods and documentation. Numerous HTTP request and response functionalities are now implemented directly in their respective types, improving modularity and reducing code duplication. Related tests and build scripts are updated for consistency.

Changes

File(s) Change Summary
Build Configuration
Makefile, AGENTS.md
Update the installed commit hash of the ifacemaker tool for interface generation.
Context Core
ctx.go, ctx_interface.go
Refactor DefaultCtx to embed DefaultReq and DefaultRes; remove direct HTTP handling methods from DefaultCtx; update method delegations and internal structure.
Context Interface
ctx_interface_gen.go
Regenerate and reorganize the Ctx interface, removing duplicates and grouping related methods.
Request Core and Interface
req.go, req_interface_gen.go
Refactor DefaultReq to use a generic Ctx interface; implement and expand request handling methods including body decompression, IP extraction, typed parameter retrieval; regenerate and expand the Req interface with new methods and documentation.
Response Core and Interface
res.go, res_interface_gen.go
Refactor DefaultRes to use a generic Ctx interface; implement and expand response handling methods including cookie management, file serving, content negotiation, connection control; regenerate and expand the Res interface with new methods and documentation.
Context Tests
ctx_test.go
Add and adjust assertions for header and path retrieval consistency; update expected output for template rendering tests.

Sequence Diagram(s)

sequenceDiagram
    participant Client
    participant DefaultCtx
    participant DefaultReq
    participant DefaultRes
    participant fasthttp

    Client->>DefaultCtx: HTTP request received
    DefaultCtx->>DefaultReq: Delegate request-specific methods (headers, body, params)
    DefaultCtx->>DefaultRes: Delegate response-specific methods (headers, cookies, send)
    DefaultReq->>fasthttp: Access request data
    DefaultRes->>fasthttp: Manipulate response data
    DefaultCtx->>fasthttp: Reset or release context as needed
    DefaultRes->>Client: Send HTTP response
Loading

Estimated code review effort

🎯 5 (Critical) | ⏱️ ~150+ minutes

Assessment against linked issues

Objective Addressed Explanation
Refactor Req and Res structs into interfaces and embed them in Ctx for improved DX (#3347)
Use ifacemaker to generate Ctx, Req, and Res interfaces for the same DefaultCtx struct
Update c.Req() and c.Res() to return interfaces typecasted from Ctx
Ensure Req and Res methods call underlying Ctx methods

Assessment against linked issues: Out-of-scope changes

No out-of-scope changes detected related to the linked issue #3347.

Possibly related PRs

Suggested reviewers

  • sixcolors
  • gaby
  • ReneWerner87
  • efectn

Poem

In the warren of code, a refactor took flight,
Splitting context in two—request, response, now right!
Interfaces blossomed, methods found their new home,
With headers and cookies no longer alone.
The tests all rejoiced, the rabbits did cheer—
For Fiber’s new context is modular here!
🐇✨

Note

⚡️ Unit Test Generation is now available in beta!

Learn more here, or try it out under "Finishing Touches" below.

✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai generate unit tests to generate unit tests for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Summary of Changes

Hello @grivera64, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request introduces a significant refactoring to the core context handling by embedding DefaultReq and DefaultRes structs directly into the Ctx interface. The primary goal is to enhance developer experience and code maintainability by allowing request and response-specific methods to be defined in their respective files, which are then automatically promoted to the main context interface. This change reduces boilerplate and simplifies future API extensions.

Highlights

  • Core Refactoring: The DefaultReq and DefaultRes structs are now directly embedded into the DefaultCtx struct, simplifying the Ctx structure and promoting a more cohesive design. This removes the need for explicit req and res pointer fields within DefaultCtx.
  • Method Relocation: Numerous request-related methods (e.g., Accepts, Body, Cookies, FormFile, Get, Host, IP, Params, Query, Range, Subdomains, XHR, IsProxyTrusted, IsFromLocal) and response-related methods (e.g., Append, Attachment, ClearCookie, Cookie, Download, Format, GetRespHeader, GetRespHeaders, JSON, CBOR, JSONP, XML, Links, Location, Render, Send, SendFile, SendStatus, SendString, SendStream, SendStreamWriter, Set, Status, Type, Vary, Write, Writef, WriteString, Drop, End) have been moved from ctx.go to their respective req.go and res.go files.
  • Automated Interface Generation: The go:generate ifacemaker command in ctx.go has been updated to include req.go and res.go as source files, along with the --promoted flag. This ensures that methods defined on the embedded DefaultReq and DefaultRes structs are automatically promoted and included in the Ctx interface, maintaining a consistent public API.
  • Improved Developer Experience: This refactoring centralizes the implementation of request and response functionalities within their dedicated files. This makes it significantly easier to add or modify methods without needing to duplicate code across ctx.go, thereby enhancing maintainability and streamlining the developer workflow.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in issue comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist is currently in preview and may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments to provide feedback.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request refactors the DefaultReq and DefaultRes structs into view-like structs onto the Ctx interface, aiming to improve DX when adding new Ctx methods. The changes involve modifying the DefaultCtx struct to embed DefaultReq and DefaultRes, updating the ifacemaker command, and adjusting method calls to use the embedded structs. The code review identified areas where documentation and comments should be updated to reflect the changes, and where potential side effects of modifying the request context should be considered.

@codecov
Copy link

codecov bot commented Jun 21, 2025

Codecov Report

❌ Patch coverage is 94.61806% with 62 lines in your changes missing coverage. Please review.
✅ Project coverage is 91.89%. Comparing base (deabee4) to head (30ca89d).
⚠️ Report is 1 commits behind head on main.

Files with missing lines Patch % Lines
res.go 92.64% 31 Missing and 11 partials ⚠️
req.go 96.62% 13 Missing and 4 partials ⚠️
ctx.go 96.00% 2 Missing and 1 partial ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #3533      +/-   ##
==========================================
+ Coverage   91.12%   91.89%   +0.77%     
==========================================
  Files         113      113              
  Lines       11388    11348      -40     
==========================================
+ Hits        10377    10428      +51     
+ Misses        752      662      -90     
+ Partials      259      258       -1     
Flag Coverage Δ
unittests 91.89% <94.61%> (+0.77%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@grivera64
Copy link
Member Author

Warning

I updated the Test_Ctx_RenderWithoutLocals test case. According to my experiments, html/template, the
new expected output should have been expected, but I don't think this failed before.
If the old expected output should remain the same, I will revert commit 108a6c1.

@gaby gaby added this to v3 Jun 21, 2025
@gaby gaby added this to the v3 milestone Jun 21, 2025
@gaby
Copy link
Member

gaby commented Jun 21, 2025

@grivera64 Since res.go and req.go are generated, should we remove those from the coverage reports?

@grivera64
Copy link
Member Author

@grivera64 Since res.go and req.go are generated, should we remove those from the coverage reports?

@gaby Do you mean to only check coverage for the c.XXX() counterpart? (Since they call the c.Req().XXX() or c.Res().XXX() anyway?) Since Ctx has promoted methods from Req and Res, it should refer to the same code.

There is an exception for overridden methods (like c.Get() vs c.Req().Get() vs c.Res().Get()), but I think it will be covered if we fully test the Ctx interface (like we already do).

@ReneWerner87
Copy link
Member

@coderabbitai full review

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jun 24, 2025

✅ Actions performed

Full review triggered.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

♻️ Duplicate comments (2)
req_interface_gen.go (1)

29-30: Internal methods should not be part of the public interface.

Similar to the Res interface, the Req interface exposes internal implementation methods like tryDecodeBodyInOrder(), release(), extractIPsFromHeader(), extractIPFromHeader(), and getBody(). These should be kept unexported.

Also applies to: 50-51, 90-97, 174-175

res.go (1)

117-124: This method doesn't belong in the response struct.

Reading cookies from the request is a request operation, not a response operation. This method should be in DefaultReq instead of DefaultRes. The Cookie method (singular) for setting cookies makes sense here, but Cookies (plural) for reading doesn't.

🧹 Nitpick comments (2)
res_interface_gen.go (1)

64-65: Consider keeping internal methods unexported in the interface.

The interface exposes internal methods like release(), setCanonical(), and renderExtensions() which appear to be implementation details. This could lead to API stability issues if these methods need to change.

Consider using a separate internal interface or keeping these methods unexported to maintain a cleaner public API surface.

Also applies to: 117-118, 138-139

ctx_interface_gen.go (1)

124-145: Large interface with exposed internals needs refinement.

The Ctx interface has become quite large and exposes many internal methods that should remain unexported:

  • Configuration methods: configDependentPaths()
  • Internal state accessors: getMethodInt(), setMethodInt(), getIndexRoute(), etc.
  • Implementation details: tryDecodeBodyInOrder(), setCanonical(), keepOriginalPath()

Consider:

  1. Using composition with smaller, focused interfaces
  2. Keeping internal methods unexported
  3. Using an internal interface for framework-specific operations

Also applies to: 229-229, 247-247, 267-267

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e1a7c11 and 108a6c1.

📒 Files selected for processing (10)
  • Makefile (1 hunks)
  • app_test.go (1 hunks)
  • ctx.go (9 hunks)
  • ctx_interface.go (1 hunks)
  • ctx_interface_gen.go (4 hunks)
  • ctx_test.go (1 hunks)
  • req.go (1 hunks)
  • req_interface_gen.go (1 hunks)
  • res.go (1 hunks)
  • res_interface_gen.go (1 hunks)
🧰 Additional context used
🪛 GitHub Check: codecov/patch
ctx.go

[warning] 341-341: ctx.go#L341
Added line #L341 was not covered by tests


[warning] 603-604: ctx.go#L603-L604
Added lines #L603 - L604 were not covered by tests


[warning] 634-635: ctx.go#L634-L635
Added lines #L634 - L635 were not covered by tests

req.go

[warning] 48-48: req.go#L48
Added line #L48 was not covered by tests


[warning] 130-131: req.go#L130-L131
Added lines #L130 - L131 were not covered by tests


[warning] 316-316: req.go#L316
Added line #L316 was not covered by tests


[warning] 415-415: req.go#L415
Added line #L415 was not covered by tests


[warning] 504-504: req.go#L504
Added line #L504 was not covered by tests


[warning] 517-517: req.go#L517
Added line #L517 was not covered by tests


[warning] 718-719: req.go#L718-L719
Added lines #L718 - L719 were not covered by tests


[warning] 796-797: req.go#L796-L797
Added lines #L796 - L797 were not covered by tests

res.go

[warning] 122-123: res.go#L122-L123
Added lines #L122 - L123 were not covered by tests


[warning] 155-157: res.go#L155-L157
Added lines #L155 - L157 were not covered by tests


[warning] 188-188: res.go#L188
Added line #L188 was not covered by tests


[warning] 278-279: res.go#L278-L279
Added lines #L278 - L279 were not covered by tests


[warning] 289-290: res.go#L289-L290
Added lines #L289 - L290 were not covered by tests


[warning] 415-416: res.go#L415-L416
Added lines #L415 - L416 were not covered by tests


[warning] 421-422: res.go#L421-L422
Added lines #L421 - L422 were not covered by tests


[warning] 477-478: res.go#L477-L478
Added lines #L477 - L478 were not covered by tests


[warning] 590-591: res.go#L590-L591
Added lines #L590 - L591 were not covered by tests


[warning] 593-594: res.go#L593-L594
Added lines #L593 - L594 were not covered by tests


[warning] 641-641: res.go#L641
Added line #L641 was not covered by tests


[warning] 748-749: res.go#L748-L749
Added lines #L748 - L749 were not covered by tests


[warning] 758-759: res.go#L758-L759
Added lines #L758 - L759 were not covered by tests

🔇 Additional comments (8)
Makefile (1)

64-64: Verify the ifacemaker tool commit hash and compatibility.

The commit hash has been updated to support the new interface generation requirements. Please verify that this specific commit exists and is compatible with the current codebase requirements.

#!/bin/bash
# Description: Verify the ifacemaker commit exists and check for any breaking changes

# Check if the new commit hash exists in the repository
echo "Checking if commit c0371201a75b1c79e69cda79a6f90b8ae5799b37 exists..."
git ls-remote https://github.com/vburenin/ifacemaker.git c0371201a75b1c79e69cda79a6f90b8ae5799b37

# Get commit information
echo "Getting commit details..."
curl -s https://api.github.com/repos/vburenin/ifacemaker/commits/c0371201a75b1c79e69cda79a6f90b8ae5799b37 | jq '.commit.message, .commit.author.date'

# Check if there are any breaking changes between the old and new commits
echo "Checking commits between old and new versions..."
curl -s "https://api.github.com/repos/vburenin/ifacemaker/compare/975a95966976eeb2d4365a7fb236e274c54da64c...c0371201a75b1c79e69cda79a6f90b8ae5799b37" | jq '.commits[].commit.message'
app_test.go (1)

318-322: Verify that removing the govet nolint comment doesn't introduce warnings.

The //nolint:govet comment was removed from the struct definition. Please ensure this doesn't introduce any govet warnings or errors during the build process.

#!/bin/bash
# Description: Check if removing the nolint comment introduces govet issues

# Run go vet specifically on this test file to check for issues
echo "Running go vet on app_test.go..."
go vet ./app_test.go

# Run go vet on the entire package to check for broader issues
echo "Running go vet on the entire package..."
go vet .

# Check if there are any specific struct alignment or field issues
echo "Checking for struct field issues..."
go run golang.org/x/tools/go/analysis/passes/fieldalignment/cmd/fieldalignment@latest .
ctx_test.go (1)

4062-4062: [web_search]

What is the default missing key behavior for Go's html/template package? Does it render missing variables as "<no value>" or empty string?
ctx_interface.go (1)

39-40: LGTM! Proper initialization of embedded structs.

The direct assignment of context references to the embedded DefaultReq and DefaultRes structs is the correct approach for this refactoring pattern.

ctx.go (4)

49-50: Good architectural choice with struct embedding.

The direct embedding of DefaultReq and DefaultRes aligns well with the Koa-style architecture and simplifies the API by promoting methods to the parent type.


407-414: Good use of lazy initialization for Redirect.

The lazy initialization pattern for the Redirect object is efficient, only allocating when needed.


336-346: Add test coverage for custom context in RestartRouting.

The RestartRouting method lacks test coverage for the custom context path (line 341). This functionality should be tested to ensure it works correctly with custom context implementations.

#!/bin/bash
# Description: Check if there are any tests for RestartRouting with custom contexts

# Search for RestartRouting tests
rg -A 10 "TestCtx.*RestartRouting|Test.*RestartRouting" --type go

# Search for tests that use newCtxFunc
rg -A 10 "newCtxFunc.*test|test.*newCtxFunc" --type go

634-636: ```shell
#!/bin/bash

List all Go test files in the repository

rg --files --glob "*_test.go"

Search for direct tests of the unexported setter

rg "setMethodInt" -g "*_test.go"

Search for tests of the public method that should call setMethodInt

rg "SetMethod" -g "_test.go"
rg "WithMethod" -g "
_test.go"


</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->

Comment on lines +597 to +610
func (c *DefaultCtx) renderExtensions(bind any) {
if bindMap, ok := bind.(Map); ok {
// Bind view map
c.viewBindMap.Range(func(key, value any) bool {
keyValue, ok := key.(string)
if !ok {
return true
}
if _, ok := bindMap[keyValue]; !ok {
bindMap[keyValue] = value
}
return true
})

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

❓ Verification inconclusive

Add test coverage and handle type assertion failure.

The renderExtensions method has uncovered lines (603-604) in the type assertion failure path. Additionally, the method silently continues when type assertion fails, which might hide issues.

Consider logging or handling the type assertion failure:

-			keyValue, ok := key.(string)
-			if !ok {
-				return true
-			}
+			keyValue, ok := key.(string)
+			if !ok {
+				// Log the issue or handle it appropriately
+				if c.app.config.EnableDebug {
+					log.Printf("renderExtensions: non-string key in viewBindMap: %T", key)
+				}
+				return true
+			}

Add test coverage and handle type assertion failure.

The renderExtensions method has uncovered lines (603-604) in the type assertion failure path. Additionally, the method silently continues when type assertion fails, which might hide issues.

Consider logging or handling the type assertion failure:

-			keyValue, ok := key.(string)
-			if !ok {
-				return true
-			}
+			keyValue, ok := key.(string)
+			if !ok {
+				// Log the issue or handle it appropriately
+				if c.app.config.EnableDebug {
+					log.Printf("renderExtensions: non-string key in viewBindMap: %T", key)
+				}
+				return true
+			}
🧰 Tools
🪛 GitHub Check: codecov/patch

[warning] 603-604: ctx.go#L603-L604
Added lines #L603 - L604 were not covered by tests

🤖 Prompt for AI Agents
In ctx.go around lines 597 to 610, the renderExtensions method does not handle
the case when the type assertion of bind to Map fails, and this path is not
covered by tests. Add handling for the type assertion failure by logging a
warning or error message to indicate the failure, and add test coverage to
verify this behavior. This will ensure that type assertion failures are visible
and tested.

Comment on lines +313 to 319
func (r *DefaultReq) Port() string {
tcpaddr, ok := r.RequestCtx().RemoteAddr().(*net.TCPAddr)
if !ok {
panic(errors.New("failed to type-assert to *net.TCPAddr"))
}
return strconv.Itoa(tcpaddr.Port)
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Avoid panic - handle non-TCP addresses gracefully

The type assertion failure will panic if the connection is not TCP (e.g., Unix sockets). This should return an empty string or a default value instead of crashing the application.

Apply this diff to handle the error gracefully:

 func (r *DefaultReq) Port() string {
 	tcpaddr, ok := r.RequestCtx().RemoteAddr().(*net.TCPAddr)
 	if !ok {
-		panic(errors.New("failed to type-assert to *net.TCPAddr"))
+		return ""
 	}
 	return strconv.Itoa(tcpaddr.Port)
 }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
func (r *DefaultReq) Port() string {
tcpaddr, ok := r.RequestCtx().RemoteAddr().(*net.TCPAddr)
if !ok {
panic(errors.New("failed to type-assert to *net.TCPAddr"))
}
return strconv.Itoa(tcpaddr.Port)
}
func (r *DefaultReq) Port() string {
tcpaddr, ok := r.RequestCtx().RemoteAddr().(*net.TCPAddr)
if !ok {
return ""
}
return strconv.Itoa(tcpaddr.Port)
}
🧰 Tools
🪛 GitHub Check: codecov/patch

[warning] 316-316: req.go#L316
Added line #L316 was not covered by tests

🤖 Prompt for AI Agents
In req.go around lines 313 to 319, the Port() method panics if the RemoteAddr is
not a *net.TCPAddr, which can happen with non-TCP connections like Unix sockets.
Modify the code to check the type assertion and if it fails, return an empty
string instead of panicking, ensuring the application does not crash on non-TCP
addresses.

@efectn efectn moved this to In Progress in v3 Jun 25, 2025
@gaby gaby changed the title ♻️ Refactor: Use Embedded Koa-Style Req and Res structs 🔥 feat: Add support for embedded Koa-Style Req and Res structs Jul 23, 2025
@gemini-code-assist
Copy link
Contributor

Summary of Changes

This pull request significantly refactors the core Ctx interface in the Fiber web framework by embedding dedicated DefaultReq and DefaultRes structs. The primary goal is to enhance developer experience and code modularity by centralizing request and response functionalities. This change streamlines the process of extending Ctx methods, as new features can now be implemented in a single location and automatically promoted, leading to a cleaner and more maintainable codebase.

Highlights

  • Core Refactoring: The DefaultCtx struct now directly embeds DefaultReq and DefaultRes structs, centralizing request and response logic within their respective types. This is a significant architectural shift towards a Koa-style context.
  • Method Reorganization: Numerous request-related methods (e.g., Body, Cookies, IP, Params, Query) and response-related methods (e.g., Append, Cookie, Send, Set) have been moved from ctx.go to req.go and res.go respectively. The Ctx interface now promotes these methods from the embedded structs.
  • Improved Developer Experience (DX): This refactoring simplifies the addition of new Ctx methods. Developers can now implement new functionalities directly within req.go or res.go, and they will be automatically promoted to the Ctx interface upon running make generate.
  • New GetHeaders() Methods: New GetHeaders() methods have been introduced for both the Req and Res interfaces, providing a consistent and clear way to retrieve all request or response headers.
  • Build Tooling Updates: The ifacemaker tool version in AGENTS.md and Makefile has been updated, along with the go generate commands, to support the new embedding and method promotion logic.
Changelog
  • AGENTS.md
    • Updated the installed commit hash for the ifacemaker tool.
  • Makefile
    • Updated the ifacemaker tool version and the go generate command.
  • ctx.go
    • Removed many direct imports as methods were relocated.
    • Embedded DefaultReq and DefaultRes structs directly into DefaultCtx.
    • Updated the go:generate command to include req.go and res.go with the --promoted flag.
    • Delegated calls for Get, GetHeaders, GetReqHeaders, GetRespHeader, and GetRespHeaders to the newly embedded DefaultReq and DefaultRes.
    • Modified Req() and Res() methods to return pointers to the embedded structs.
    • Adjusted Reset and release methods to correctly handle the lifecycle of the embedded structs.
    • Moved renderExtensions and Bind() methods to appropriate locations within the file.
    • Added keepOriginalPath() and getPathOriginal() helper methods.
  • ctx_interface.go
    • Modified NewDefaultCtx to directly initialize the c field within the embedded DefaultReq and DefaultRes structs.
  • ctx_interface_gen.go
    • Streamlined the Ctx interface by removing methods now handled by Req or Res.
    • Added GetHeaders() to the Ctx interface.
    • Re-added promoted methods from Req and Res to the Ctx interface.
    • Included internal helper methods (e.g., getMethodInt, release) in the Ctx interface (noted as a potential issue in reviews).
  • ctx_test.go
    • Updated existing tests for Format, Path, GetRespHeaders, and GetReqHeaders to align with the new structure and delegated calls.
    • Adjusted the expected output for RenderWithoutLocals tests.
  • req.go
    • Introduced Range and RangeSet structs.
    • Changed DefaultReq to hold a Ctx interface instead of a concrete *DefaultCtx.
    • Moved numerous request-specific methods (e.g., Accepts, Body, Cookies, Fresh, IP, Params, Query) from ctx.go.
    • Implemented GetHeaders() for retrieving request headers.
    • Added internal helper methods such as tryDecodeBodyInOrder, extractIPsFromHeader, extractIPFromHeader, getBody, and release.
  • req_interface_gen.go
    • Updated the Req interface to expose all request-related methods, including the new GetHeaders().
  • res.go
    • Introduced SendFile, sendFileStore, Cookie, and ResFmt structs.
    • Changed DefaultRes to hold a Ctx interface instead of a concrete *DefaultCtx.
    • Moved numerous response-specific methods (e.g., Append, Attachment, Cookie, Download, Format, JSON, Links, Location, Render, Send, Set, Type, Write) from ctx.go.
    • Implemented GetHeaders() for retrieving response headers.
    • Added internal helper methods such as compareConfig, setCanonical, and release.
  • res_interface_gen.go
    • Updated the Res interface to expose all response-related methods, including the new GetHeaders().
Activity
  • The coderabbitai[bot] provided an initial walkthrough, summarizing the changes, including a sequence diagram, estimated review effort, related PRs, and a poem.
  • The codecov[bot] reported patch coverage at 94.16591%, highlighting 64 lines missing coverage, primarily in res.go and req.go.
  • The author, grivera64, noted an update to Test_Ctx_RenderWithoutLocals and a potential revert.
  • gaby inquired about excluding generated res.go and req.go from coverage reports, to which grivera64 responded that Ctx interface promotion should cover most cases.
  • ReneWerner87 requested a full review from coderabbitai[bot] and later asked grivera64 to update the branch with master and apply AI hints.
  • grivera64 confirmed the branch update, mentioning the addition of unit tests based on AI hints, and inquired about applying further AI hints regarding hidden methods, Body() error handling, and size limits.
  • gaby confirmed the PR was ready for review.
  • Automated review comments from gemini-code-assist[bot] and Copilot highlighted several areas for improvement, including DefaultCtx struct field reordering, delegation patterns, Path function side effects, and Route function fallback behavior.
  • nickajacks1 questioned the placement of Drop() and End() methods in res.go, which grivera64 addressed by moving them or delegating their calls.
  • coderabbitai[bot] suggested adding test coverage for renderExtensions type assertion failure and DefaultCtx.GetHeaders.
  • coderabbitai[bot] identified a misplaced getPathOriginal method in res.go (with DefaultReq receiver), which grivera64 moved to ctx.go.
  • coderabbitai[bot] flagged the Port() method for panicking on non-TCP addresses, suggesting graceful handling.
  • coderabbitai[bot] noted Fresh() and Stale() methods in req.go having an incorrect *DefaultCtx receiver, which grivera64 fixed.
  • Copilot pointed out duplicated method declarations in generated interfaces and suggested clarifying encodingOrder initialization and a literal \n in a doc comment.
  • coderabbitai[bot] suggested improving End() method error handling by wrapping errors.
  • coderabbitai[bot] recommended refactoring Range method's complex parsing logic and separating response modification.
  • coderabbitai[bot] raised concerns about tryDecodeBodyInOrder's complexity, in-place modification, and lack of size limits.
  • coderabbitai[bot] suggested Body() method should not modify response status on error.
  • coderabbitai[bot] recommended making several internal methods (release(), getBody(), tryDecodeBodyInOrder, extractIPsFromHeader, extractIPFromHeader, setCanonical) private in the generated interfaces.
  • Copilot suggested that the Locals generic function, currently in req.go, conceptually belongs to general context operations and could be moved.

Copy link
Member

@gaby gaby left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (2)
res_interface_gen.go (1)

129-129: Internal methods should be private

The setCanonical and release() methods appear to be internal implementation details that shouldn't be part of the public Res interface contract.

Also applies to: 145-145

res.go (1)

936-950: Improve error handling in End() method

The End() method should wrap errors to provide better context about where failures occur, as suggested in previous reviews.

🧹 Nitpick comments (1)
res_interface_gen.go (1)

108-108: Consider making renderExtensions private

The renderExtensions method appears to be an internal helper method without documentation comments, suggesting it's not intended for public use. Consider whether this should be part of the public interface.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e3b1b6e and 6f494bf.

📒 Files selected for processing (4)
  • ctx_interface_gen.go (3 hunks)
  • ctx_test.go (7 hunks)
  • res.go (1 hunks)
  • res_interface_gen.go (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • ctx_test.go
  • ctx_interface_gen.go
🧰 Additional context used
🧠 Learnings (3)
📓 Common learnings
Learnt from: gaby
PR: gofiber/fiber#3193
File: middleware/cache/cache_test.go:897-897
Timestamp: 2024-11-08T04:10:42.990Z
Learning: In the Fiber framework, `Context()` is being renamed to `RequestCtx()`, and `UserContext()` to `Context()` to improve clarity and align with Go's context conventions.
Learnt from: gaby
PR: gofiber/fiber#3193
File: middleware/adaptor/adaptor.go:111-111
Timestamp: 2024-11-10T23:44:13.704Z
Learning: In the `middleware/adaptor/adaptor.go` file of the Fiber framework, when updating context handling, replacing `c.Context()` with `c.RequestCtx()` is appropriate to access the `fasthttp.RequestCtx`.
Learnt from: ReneWerner87
PR: gofiber/fiber#3161
File: app.go:923-932
Timestamp: 2024-11-15T07:56:21.623Z
Learning: In the Fiber framework, breaking changes are acceptable when moving from version 2 to version 3, including modifications to method signatures such as in the `Test` method in `app.go`.
Learnt from: sixcolors
PR: gofiber/fiber#3016
File: middleware/csrf/csrf_test.go:188-193
Timestamp: 2024-09-25T15:57:10.221Z
Learning: In the Fiber framework tests, using `ctx.Response.Header.Cookie` may not be suitable for parsing cookies from the response header, as it requires a `*Cookie` and fills it rather than returning a string value; thus, manual parsing of the `Set-Cookie` header may be necessary.
Learnt from: sixcolors
PR: gofiber/fiber#3016
File: middleware/csrf/csrf_test.go:188-193
Timestamp: 2024-10-08T19:06:06.583Z
Learning: In the Fiber framework tests, using `ctx.Response.Header.Cookie` may not be suitable for parsing cookies from the response header, as it requires a `*Cookie` and fills it rather than returning a string value; thus, manual parsing of the `Set-Cookie` header may be necessary.
Learnt from: sixcolors
PR: gofiber/fiber#3016
File: middleware/session/config.go:122-122
Timestamp: 2024-10-08T19:06:06.583Z
Learning: In `DefaultErrorHandler(c *fiber.Ctx, err error)`, since `c` is a pointer to an interface, we need to dereference `*c` when calling interface methods like `SendStatus`.
Learnt from: sixcolors
PR: gofiber/fiber#3016
File: middleware/session/config.go:122-122
Timestamp: 2024-09-25T16:18:34.719Z
Learning: In `DefaultErrorHandler(c *fiber.Ctx, err error)`, since `c` is a pointer to an interface, we need to dereference `*c` when calling interface methods like `SendStatus`.
res_interface_gen.go (7)

Learnt from: ReneWerner87
PR: #3161
File: app.go:923-932
Timestamp: 2024-11-15T07:56:21.623Z
Learning: In the Fiber framework, breaking changes are acceptable when moving from version 2 to version 3, including modifications to method signatures such as in the Test method in app.go.

Learnt from: gaby
PR: #3193
File: middleware/adaptor/adaptor.go:111-111
Timestamp: 2024-11-10T23:44:13.704Z
Learning: In the middleware/adaptor/adaptor.go file of the Fiber framework, when updating context handling, replacing c.Context() with c.RequestCtx() is appropriate to access the fasthttp.RequestCtx.

Learnt from: gaby
PR: #3193
File: middleware/cache/cache_test.go:897-897
Timestamp: 2024-11-08T04:10:42.990Z
Learning: In the Fiber framework, Context() is being renamed to RequestCtx(), and UserContext() to Context() to improve clarity and align with Go's context conventions.

Learnt from: sixcolors
PR: #3016
File: middleware/csrf/csrf_test.go:188-193
Timestamp: 2024-10-08T19:06:06.583Z
Learning: In the Fiber framework tests, using ctx.Response.Header.Cookie may not be suitable for parsing cookies from the response header, as it requires a *Cookie and fills it rather than returning a string value; thus, manual parsing of the Set-Cookie header may be necessary.

Learnt from: sixcolors
PR: #3016
File: middleware/csrf/csrf_test.go:188-193
Timestamp: 2024-09-25T15:57:10.221Z
Learning: In the Fiber framework tests, using ctx.Response.Header.Cookie may not be suitable for parsing cookies from the response header, as it requires a *Cookie and fills it rather than returning a string value; thus, manual parsing of the Set-Cookie header may be necessary.

Learnt from: sixcolors
PR: #3016
File: middleware/session/config.go:122-122
Timestamp: 2024-10-08T19:06:06.583Z
Learning: In DefaultErrorHandler(c *fiber.Ctx, err error), since c is a pointer to an interface, we need to dereference *c when calling interface methods like SendStatus.

Learnt from: sixcolors
PR: #3016
File: middleware/session/config.go:122-122
Timestamp: 2024-09-25T16:18:34.719Z
Learning: In DefaultErrorHandler(c *fiber.Ctx, err error), since c is a pointer to an interface, we need to dereference *c when calling interface methods like SendStatus.

res.go (8)

Learnt from: gaby
PR: #3193
File: middleware/adaptor/adaptor.go:111-111
Timestamp: 2024-11-10T23:44:13.704Z
Learning: In the middleware/adaptor/adaptor.go file of the Fiber framework, when updating context handling, replacing c.Context() with c.RequestCtx() is appropriate to access the fasthttp.RequestCtx.

Learnt from: gaby
PR: #3193
File: middleware/cache/cache_test.go:897-897
Timestamp: 2024-11-08T04:10:42.990Z
Learning: In the Fiber framework, Context() is being renamed to RequestCtx(), and UserContext() to Context() to improve clarity and align with Go's context conventions.

Learnt from: sixcolors
PR: #3016
File: middleware/session/config.go:122-122
Timestamp: 2024-10-08T19:06:06.583Z
Learning: In DefaultErrorHandler(c *fiber.Ctx, err error), since c is a pointer to an interface, we need to dereference *c when calling interface methods like SendStatus.

Learnt from: sixcolors
PR: #3016
File: middleware/session/config.go:122-122
Timestamp: 2024-09-25T16:18:34.719Z
Learning: In DefaultErrorHandler(c *fiber.Ctx, err error), since c is a pointer to an interface, we need to dereference *c when calling interface methods like SendStatus.

Learnt from: sixcolors
PR: #3016
File: middleware/csrf/csrf_test.go:188-193
Timestamp: 2024-10-08T19:06:06.583Z
Learning: In the Fiber framework tests, using ctx.Response.Header.Cookie may not be suitable for parsing cookies from the response header, as it requires a *Cookie and fills it rather than returning a string value; thus, manual parsing of the Set-Cookie header may be necessary.

Learnt from: sixcolors
PR: #3016
File: middleware/csrf/csrf_test.go:188-193
Timestamp: 2024-09-25T15:57:10.221Z
Learning: In the Fiber framework tests, using ctx.Response.Header.Cookie may not be suitable for parsing cookies from the response header, as it requires a *Cookie and fills it rather than returning a string value; thus, manual parsing of the Set-Cookie header may be necessary.

Learnt from: efectn
PR: #3162
File: app_test.go:893-895
Timestamp: 2024-11-29T12:37:27.581Z
Learning: In the Test_App_ShutdownWithContext function in app_test.go, the clientDone channel is used to synchronize the client's request completion before proceeding, eliminating the need for additional time.Sleep calls.

Learnt from: ReneWerner87
PR: #3161
File: app.go:923-932
Timestamp: 2024-11-15T07:56:21.623Z
Learning: In the Fiber framework, breaking changes are acceptable when moving from version 2 to version 3, including modifications to method signatures such as in the Test method in app.go.

🧬 Code Graph Analysis (1)
res_interface_gen.go (5)
res.go (3)
  • Cookie (101-113)
  • ResFmt (116-119)
  • SendFile (23-59)
redirect.go (1)
  • Redirect (62-66)
app.go (1)
  • Map (41-41)
router.go (1)
  • Route (43-62)
ctx_interface_gen.go (1)
  • Ctx (17-401)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: Compare
  • GitHub Check: unit (1.24.x, windows-latest)
  • GitHub Check: lint
  • GitHub Check: repeated
🔇 Additional comments (11)
res_interface_gen.go (1)

1-152: Generated interface looks comprehensive

The interface definition is well-documented with detailed method comments and covers all necessary response-related functionality. The expansion of methods aligns well with the refactoring objectives.

res.go (10)

121-124: Well-designed struct embedding

The DefaultRes struct with generic Ctx interface embedding is well-designed and supports the refactoring objectives by allowing direct access to context methods while maintaining loose coupling.


22-99: Comprehensive SendFile configuration

The SendFile struct and supporting functionality provide comprehensive file serving options with proper caching, compression, and byte-range support. The manual config comparison in compareConfig is a good performance optimization.


194-271: Robust cookie handling with validation

The Cookie method implements proper validation using net/http.Cookie.Valid() and handles all cookie attributes correctly, including SameSite modes and partitioned cookies. The fallback to ignoring invalid cookies matches net/http behavior.


132-150: Efficient header appending logic

The Append method correctly handles header deduplication and formatting. The string checking logic prevents duplicate values while maintaining proper comma separation.


311-353: Well-implemented content negotiation

The Format method properly implements content negotiation with Accept header handling, default handler support, and appropriate error responses. The stack allocation optimization for the types slice is a nice touch.


586-646: Sophisticated template rendering

The Render method handles multiple mounted apps correctly and includes fallback to raw template parsing when no engine is configured. The buffer management is efficient.


664-801: Complex but correct file serving

The SendFile implementation handles multiple configuration options, caching, path normalization, and status code management correctly. The mutex-protected cache of handlers is well-designed.


875-896: Smart charset handling

The shouldIncludeCharset helper function implements intelligent charset detection for MIME types, properly handling text types and JSON/XML variants.


847-849: Internal method correctly implemented

The setCanonical method is properly implemented for internal use, though it should ideally be private as noted in the interface review.


923-925: Simple and correct cleanup

The release method correctly resets the context reference for object pooling.

Comment on lines +101 to +102
// getLocationFromRoute get URL location from route using parameters
getLocationFromRoute(route Route, params Map) (string, error)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Clarify visibility of getLocationFromRoute method

This method is lowercase (suggesting private) but is part of the public interface. If it's intended to be private, it should be removed from the interface. If public, consider adding proper documentation.

🤖 Prompt for AI Agents
In res_interface_gen.go around lines 101 to 102, the getLocationFromRoute method
is defined with a lowercase first letter, indicating it is private, yet it is
included in a public interface. Decide if this method should be public or
private: if public, rename it to start with an uppercase letter and add proper
documentation; if private, remove it from the public interface to maintain
correct visibility and interface design.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

♻️ Duplicate comments (9)
ctx.go (3)

166-171: Add test coverage for GetHeaders method.

The new GetHeaders() method lacks test coverage. Please add unit tests covering:

  • No headers (expect empty map)
  • Single header key/value
  • Multiple values for the same header key

237-251: Verify path override behavior with request context modification.

The path override logic directly modifies the request context which could have side effects if other parts of the application rely on the original path.


459-472: Add test coverage and handle type assertion failure.

The renderExtensions method has uncovered lines in the type assertion failure path. Additionally, the method silently continues when type assertion fails, which might hide issues.

Consider logging or handling the type assertion failure:

-			keyValue, ok := key.(string)
-			if !ok {
-				return true
-			}
+			keyValue, ok := key.(string)
+			if !ok {
+				// Log the issue or handle it appropriately
+				if c.app.config.EnableDebug {
+					log.Printf("renderExtensions: non-string key in viewBindMap: %T", key)
+				}
+				return true
+			}
res.go (1)

958-973: Improve error handling to avoid masking connection errors.

The End() method should wrap errors to provide better context about where failures occur.

	bw := bufio.NewWriter(conn)
	if err := ctx.Response.Write(bw); err != nil {
-		return err
+		return fmt.Errorf("failed to write response: %w", err)
	}

	if err := bw.Flush(); err != nil {
-		return err //nolint:wrapcheck // unnecessary to wrap it
+		return fmt.Errorf("failed to flush response: %w", err)
	}

-	return conn.Close() //nolint:wrapcheck // unnecessary to wrap it
+	if err := conn.Close(); err != nil {
+		return fmt.Errorf("failed to close connection: %w", err)
+	}
+	return nil
req.go (5)

75-122: Add safeguards for body decompression to prevent resource exhaustion.

The tryDecodeBodyInOrder method modifies the request body in-place and lacks size limits, which could cause issues if called multiple times or with large bodies.

Consider adding these safeguards:

func (r *DefaultReq) tryDecodeBodyInOrder(
	originalBody *[]byte,
	encodings []string,
) ([]byte, uint8, error) {
+	// Add size limit check
+	if len(r.Request().Body()) > r.App().config.BodyLimit {
+		return nil, 0, ErrRequestEntityTooLarge
+	}
+	
	var (
		err             error
		body            []byte
		decodesRealized uint8
	)
	// ... rest of implementation
}

129-178: Remove automatic response status setting from Body() method.

The Body() method directly modifies the response status code when decompression fails, which violates separation of concerns and could interfere with other handlers.

Apply this diff to let the caller handle errors appropriately:

	if err != nil {
-		switch {
-		case errors.Is(err, ErrUnsupportedMediaType):
-			_ = r.c.SendStatus(StatusUnsupportedMediaType) //nolint:errcheck // It is fine to ignore the error
-		case errors.Is(err, ErrNotImplemented):
-			_ = r.c.SendStatus(StatusNotImplemented) //nolint:errcheck // It is fine to ignore the error
-		}
		return []byte(err.Error())
	}

336-342: Handle non-TCP addresses gracefully to avoid panic.

The type assertion failure will panic if the connection is not TCP (e.g., Unix sockets). This should return an empty string instead of crashing the application.

Apply this diff to handle the error gracefully:

func (r *DefaultReq) Port() string {
	tcpaddr, ok := r.RequestCtx().RemoteAddr().(*net.TCPAddr)
	if !ok {
-		panic(errors.New("failed to type-assert to *net.TCPAddr"))
+		return ""
	}
	return strconv.Itoa(tcpaddr.Port)
}

514-526: Consider relocating generic Locals function.

The generic Locals function conceptually belongs to general context operations rather than request-specific operations. Consider moving this to a more appropriate location or the main context file.


728-800: Separate parsing logic from response modification in Range method.

The Range method contains complex parsing logic and modifies the response, which violates separation of concerns. The response modification should be handled by the caller.

Consider refactoring to separate parsing from response modification:

func (r *DefaultReq) Range(size int) (Range, error) {
	var rangeData Range
	
	// Parse the range header
	err := r.parseRangeHeader(size, &rangeData)
	if err != nil {
		return rangeData, err
	}
	
	if len(rangeData.Ranges) < 1 {
-		r.c.Status(StatusRequestedRangeNotSatisfiable)
-		r.c.Set(HeaderContentRange, "bytes */"+strconv.Itoa(size))
		return rangeData, ErrRequestedRangeNotSatisfiable
	}
	
	return rangeData, nil
}
🧹 Nitpick comments (2)
res.go (2)

679-824: Comprehensive SendFile implementation with proper caching.

The SendFile method provides a feature-rich implementation with:

  • Thread-safe handler caching for performance
  • Proper path handling across different OS
  • Good error handling and status code preservation
  • Support for compression, byte ranges, and cache control

Consider adding documentation about the caching behavior for maintainability.


600-665: Complex but necessary template rendering implementation.

The Render method handles multiple scenarios including mounted apps, layouts, and fallback rendering. The implementation is correct but complex.

Consider adding detailed documentation about the rendering order and app selection logic for future maintainability.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 15a6158 and 30ca89d.

📒 Files selected for processing (3)
  • ctx.go (6 hunks)
  • req.go (1 hunks)
  • res.go (1 hunks)
🧰 Additional context used
🧠 Learnings (4)
📓 Common learnings
Learnt from: gaby
PR: gofiber/fiber#3193
File: middleware/cache/cache_test.go:897-897
Timestamp: 2024-11-08T04:10:42.990Z
Learning: In the Fiber framework, `Context()` is being renamed to `RequestCtx()`, and `UserContext()` to `Context()` to improve clarity and align with Go's context conventions.
Learnt from: gaby
PR: gofiber/fiber#3193
File: middleware/adaptor/adaptor.go:111-111
Timestamp: 2024-11-10T23:44:13.704Z
Learning: In the `middleware/adaptor/adaptor.go` file of the Fiber framework, when updating context handling, replacing `c.Context()` with `c.RequestCtx()` is appropriate to access the `fasthttp.RequestCtx`.
Learnt from: ReneWerner87
PR: gofiber/fiber#3161
File: app.go:923-932
Timestamp: 2024-11-15T07:56:21.623Z
Learning: In the Fiber framework, breaking changes are acceptable when moving from version 2 to version 3, including modifications to method signatures such as in the `Test` method in `app.go`.
Learnt from: sixcolors
PR: gofiber/fiber#3016
File: middleware/csrf/csrf_test.go:188-193
Timestamp: 2024-10-08T19:06:06.583Z
Learning: In the Fiber framework tests, using `ctx.Response.Header.Cookie` may not be suitable for parsing cookies from the response header, as it requires a `*Cookie` and fills it rather than returning a string value; thus, manual parsing of the `Set-Cookie` header may be necessary.
Learnt from: sixcolors
PR: gofiber/fiber#3016
File: middleware/csrf/csrf_test.go:188-193
Timestamp: 2024-09-25T15:57:10.221Z
Learning: In the Fiber framework tests, using `ctx.Response.Header.Cookie` may not be suitable for parsing cookies from the response header, as it requires a `*Cookie` and fills it rather than returning a string value; thus, manual parsing of the `Set-Cookie` header may be necessary.
Learnt from: sixcolors
PR: gofiber/fiber#3016
File: middleware/session/config.go:122-122
Timestamp: 2024-10-08T19:06:06.583Z
Learning: In `DefaultErrorHandler(c *fiber.Ctx, err error)`, since `c` is a pointer to an interface, we need to dereference `*c` when calling interface methods like `SendStatus`.
Learnt from: sixcolors
PR: gofiber/fiber#3016
File: middleware/session/config.go:122-122
Timestamp: 2024-09-25T16:18:34.719Z
Learning: In `DefaultErrorHandler(c *fiber.Ctx, err error)`, since `c` is a pointer to an interface, we need to dereference `*c` when calling interface methods like `SendStatus`.
ctx.go (17)

Learnt from: gaby
PR: #3193
File: middleware/adaptor/adaptor.go:111-111
Timestamp: 2024-11-10T23:44:13.704Z
Learning: In the middleware/adaptor/adaptor.go file of the Fiber framework, when updating context handling, replacing c.Context() with c.RequestCtx() is appropriate to access the fasthttp.RequestCtx.

Learnt from: gaby
PR: #3193
File: middleware/cache/cache_test.go:897-897
Timestamp: 2024-11-08T04:10:42.990Z
Learning: In the Fiber framework, Context() is being renamed to RequestCtx(), and UserContext() to Context() to improve clarity and align with Go's context conventions.

Learnt from: sixcolors
PR: #3016
File: middleware/session/config.go:122-122
Timestamp: 2024-10-08T19:06:06.583Z
Learning: In DefaultErrorHandler(c *fiber.Ctx, err error), since c is a pointer to an interface, we need to dereference *c when calling interface methods like SendStatus.

Learnt from: sixcolors
PR: #3016
File: middleware/session/config.go:122-122
Timestamp: 2024-09-25T16:18:34.719Z
Learning: In DefaultErrorHandler(c *fiber.Ctx, err error), since c is a pointer to an interface, we need to dereference *c when calling interface methods like SendStatus.

Learnt from: ReneWerner87
PR: #3161
File: app.go:923-932
Timestamp: 2024-11-15T07:56:21.623Z
Learning: In the Fiber framework, breaking changes are acceptable when moving from version 2 to version 3, including modifications to method signatures such as in the Test method in app.go.

Learnt from: sixcolors
PR: #3016
File: middleware/csrf/csrf_test.go:188-193
Timestamp: 2024-09-25T15:57:10.221Z
Learning: In the Fiber framework tests, using ctx.Response.Header.Cookie may not be suitable for parsing cookies from the response header, as it requires a *Cookie and fills it rather than returning a string value; thus, manual parsing of the Set-Cookie header may be necessary.

Learnt from: sixcolors
PR: #3016
File: middleware/csrf/csrf_test.go:188-193
Timestamp: 2024-10-08T19:06:06.583Z
Learning: In the Fiber framework tests, using ctx.Response.Header.Cookie may not be suitable for parsing cookies from the response header, as it requires a *Cookie and fills it rather than returning a string value; thus, manual parsing of the Set-Cookie header may be necessary.

Learnt from: ckoch786
PR: #3230
File: docs/whats_new.md:944-951
Timestamp: 2024-12-15T19:56:45.935Z
Learning: Detailed usage examples and explanations for new methods like RemoveRoute and RemoveRouteByName are documented in docs/api/app.md, so it's unnecessary to duplicate them in docs/whats_new.md.

Learnt from: sixcolors
PR: #3625
File: middleware/session/config.go:57-58
Timestamp: 2025-07-27T17:28:53.403Z
Learning: In the session middleware Config struct, the Extractor field uses function closures (like FromCookie(key)), making it impossible to introspect extractor parameters at runtime for validation purposes without complex reflection techniques.

Learnt from: mdelapenya
PR: #3434
File: docs/api/services.md:39-43
Timestamp: 2025-05-07T13:07:33.899Z
Learning: When documenting Go interface methods in the Fiber project, avoid showing method signatures with the interface type as the receiver (e.g., func (d *Service) Method()) since interfaces cannot be used as receivers in Go. Instead, show just the method signature without a receiver or use a placeholder implementation name.

Learnt from: mdelapenya
PR: #3434
File: app.go:623-636
Timestamp: 2025-05-08T08:14:37.302Z
Learning: In the gofiber/fiber framework, service startup failures should panic rather than allowing the application to continue running with degraded functionality, as this is the agreed-upon design decision.

Learnt from: ReneWerner87
PR: gofiber/fiber#0
File: :0-0
Timestamp: 2024-12-01T10:28:36.011Z
Learning: Fiber currently supports square bracket notation in form data with 'application/x-www-form-urlencoded' content type, but this feature is not available for multipart form data. The implementation for form-urlencoded is in ctx.go (BodyParser method), while multipart form data handling needs enhancement to support this feature.

Learnt from: sixcolors
PR: #3446
File: docs/middleware/logger.md:44-44
Timestamp: 2025-05-13T00:19:16.407Z
Learning: In documentation files for the Fiber framework, code examples are often partial and don't repeat import statements that were shown in earlier examples, focusing instead on demonstrating specific usage patterns.

Learnt from: ReneWerner87
PR: #3564
File: client/cookiejar.go:128-130
Timestamp: 2025-07-17T11:39:38.265Z
Learning: In the fasthttp library, the Cookie.CopyTo(src *Cookie) method copies the source cookie (parameter) to the receiver cookie, so nc.CopyTo(c) copies cookie c into cookie nc.

Learnt from: sigmundxia
PR: #3151
File: middleware/adaptor/adaptor_test.go:226-230
Timestamp: 2024-09-26T03:08:50.917Z
Learning: In Fiber, the c.Set method does not return an error.

Learnt from: sigmundxia
PR: #3151
File: middleware/adaptor/adaptor_test.go:226-230
Timestamp: 2024-10-08T19:06:06.583Z
Learning: In Fiber, the c.Set method does not return an error.

Learnt from: gaby
PR: #3170
File: ctx.go:1825-1826
Timestamp: 2024-10-16T14:00:50.724Z
Learning: In the Fiber framework, the IsProxyTrusted() function returns true when TrustProxy is false, maintaining compatibility with version 2 behavior.

req.go (9)

Learnt from: gaby
PR: #3193
File: middleware/adaptor/adaptor.go:111-111
Timestamp: 2024-11-10T23:44:13.704Z
Learning: In the middleware/adaptor/adaptor.go file of the Fiber framework, when updating context handling, replacing c.Context() with c.RequestCtx() is appropriate to access the fasthttp.RequestCtx.

Learnt from: gaby
PR: #3193
File: middleware/cache/cache_test.go:897-897
Timestamp: 2024-11-08T04:10:42.990Z
Learning: In the Fiber framework, Context() is being renamed to RequestCtx(), and UserContext() to Context() to improve clarity and align with Go's context conventions.

Learnt from: ReneWerner87
PR: #3161
File: app.go:923-932
Timestamp: 2024-11-15T07:56:21.623Z
Learning: In the Fiber framework, breaking changes are acceptable when moving from version 2 to version 3, including modifications to method signatures such as in the Test method in app.go.

Learnt from: sixcolors
PR: #3016
File: middleware/session/config.go:122-122
Timestamp: 2024-09-25T16:18:34.719Z
Learning: In DefaultErrorHandler(c *fiber.Ctx, err error), since c is a pointer to an interface, we need to dereference *c when calling interface methods like SendStatus.

Learnt from: sixcolors
PR: #3016
File: middleware/session/config.go:122-122
Timestamp: 2024-10-08T19:06:06.583Z
Learning: In DefaultErrorHandler(c *fiber.Ctx, err error), since c is a pointer to an interface, we need to dereference *c when calling interface methods like SendStatus.

Learnt from: sixcolors
PR: #3016
File: middleware/csrf/csrf_test.go:188-193
Timestamp: 2024-10-08T19:06:06.583Z
Learning: In the Fiber framework tests, using ctx.Response.Header.Cookie may not be suitable for parsing cookies from the response header, as it requires a *Cookie and fills it rather than returning a string value; thus, manual parsing of the Set-Cookie header may be necessary.

Learnt from: sixcolors
PR: #3016
File: middleware/csrf/csrf_test.go:188-193
Timestamp: 2024-09-25T15:57:10.221Z
Learning: In the Fiber framework tests, using ctx.Response.Header.Cookie may not be suitable for parsing cookies from the response header, as it requires a *Cookie and fills it rather than returning a string value; thus, manual parsing of the Set-Cookie header may be necessary.

Learnt from: sixcolors
PR: #3016
File: middleware/session/store.go:257-331
Timestamp: 2024-10-02T22:57:30.345Z
Learning: In the GetByID method, when handling a decode error, use decodeErr in the error message to accurately report the decoding failure.

Learnt from: sixcolors
PR: #3016
File: middleware/session/store.go:257-331
Timestamp: 2024-10-08T19:06:06.583Z
Learning: In the GetByID method, when handling a decode error, use decodeErr in the error message to accurately report the decoding failure.

res.go (8)

Learnt from: gaby
PR: #3193
File: middleware/adaptor/adaptor.go:111-111
Timestamp: 2024-11-10T23:44:13.704Z
Learning: In the middleware/adaptor/adaptor.go file of the Fiber framework, when updating context handling, replacing c.Context() with c.RequestCtx() is appropriate to access the fasthttp.RequestCtx.

Learnt from: gaby
PR: #3193
File: middleware/cache/cache_test.go:897-897
Timestamp: 2024-11-08T04:10:42.990Z
Learning: In the Fiber framework, Context() is being renamed to RequestCtx(), and UserContext() to Context() to improve clarity and align with Go's context conventions.

Learnt from: sixcolors
PR: #3016
File: middleware/session/config.go:122-122
Timestamp: 2024-10-08T19:06:06.583Z
Learning: In DefaultErrorHandler(c *fiber.Ctx, err error), since c is a pointer to an interface, we need to dereference *c when calling interface methods like SendStatus.

Learnt from: sixcolors
PR: #3016
File: middleware/session/config.go:122-122
Timestamp: 2024-09-25T16:18:34.719Z
Learning: In DefaultErrorHandler(c *fiber.Ctx, err error), since c is a pointer to an interface, we need to dereference *c when calling interface methods like SendStatus.

Learnt from: sixcolors
PR: #3016
File: middleware/csrf/csrf_test.go:188-193
Timestamp: 2024-10-08T19:06:06.583Z
Learning: In the Fiber framework tests, using ctx.Response.Header.Cookie may not be suitable for parsing cookies from the response header, as it requires a *Cookie and fills it rather than returning a string value; thus, manual parsing of the Set-Cookie header may be necessary.

Learnt from: sixcolors
PR: #3016
File: middleware/csrf/csrf_test.go:188-193
Timestamp: 2024-09-25T15:57:10.221Z
Learning: In the Fiber framework tests, using ctx.Response.Header.Cookie may not be suitable for parsing cookies from the response header, as it requires a *Cookie and fills it rather than returning a string value; thus, manual parsing of the Set-Cookie header may be necessary.

Learnt from: efectn
PR: #3162
File: app_test.go:893-895
Timestamp: 2024-11-29T12:37:27.581Z
Learning: In the Test_App_ShutdownWithContext function in app_test.go, the clientDone channel is used to synchronize the client's request completion before proceeding, eliminating the need for additional time.Sleep calls.

Learnt from: ReneWerner87
PR: #3161
File: app.go:923-932
Timestamp: 2024-11-15T07:56:21.623Z
Learning: In the Fiber framework, breaking changes are acceptable when moving from version 2 to version 3, including modifications to method signatures such as in the Test method in app.go.

🧬 Code Graph Analysis (2)
ctx.go (4)
req.go (1)
  • DefaultReq (30-32)
res.go (1)
  • DefaultRes (122-124)
redirect.go (2)
  • Redirect (62-66)
  • AcquireRedirect (77-84)
bind.go (1)
  • Bind (24-27)
req.go (6)
ctx_interface_gen.go (1)
  • Ctx (17-401)
constants.go (19)
  • ErrNotImplemented (149-149)
  • ErrUnsupportedMediaType (133-133)
  • StatusUnsupportedMediaType (88-88)
  • StatusNotImplemented (104-104)
  • HeaderIfModifiedSince (183-183)
  • HeaderIfNoneMatch (184-184)
  • HeaderCacheControl (168-168)
  • HeaderETag (181-181)
  • HeaderLastModified (186-186)
  • HeaderXForwardedHost (220-220)
  • HeaderXForwardedFor (219-219)
  • HeaderXForwardedProto (221-221)
  • HeaderXForwardedProtocol (222-222)
  • HeaderXForwardedSsl (223-223)
  • HeaderXUrlScheme (224-224)
  • HeaderRange (236-236)
  • StatusRequestedRangeNotSatisfiable (89-89)
  • HeaderContentRange (234-234)
  • ErrRequestedRangeNotSatisfiable (134-134)
helpers.go (1)
  • GenericType (921-923)
router.go (1)
  • Route (43-62)
error.go (1)
  • ErrRangeMalformed (30-30)
app.go (1)
  • TrustProxyConfig (422-446)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (5)
  • GitHub Check: lint
  • GitHub Check: repeated
  • GitHub Check: unit (1.24.x, macos-13)
  • GitHub Check: Compare
  • GitHub Check: unit (1.24.x, windows-latest)
🔇 Additional comments (18)
ctx.go (4)

43-49: Good architectural choice with embedded structs.

Embedding DefaultReq and DefaultRes directly instead of using pointer fields reduces indirection and enables automatic method promotion. The generation tool comment is helpful for maintaining consistency.


180-193: Clean delegation for response header methods.

The response header methods properly delegate to DefaultRes and maintain clear naming conventions to distinguish from request headers.


439-442: Correct initialization of embedded struct references.

Setting the c field in embedded structs during Reset is essential for maintaining the delegation pattern.


491-502: Well-implemented lazy initialization for Bind.

The Bind() method follows the same lazy initialization pattern as Redirect(), maintaining consistency across the codebase.

res.go (7)

22-98: Well-designed SendFile configuration with performance optimization.

The SendFile struct provides comprehensive configuration options with clear documentation. The manual comparison in compareConfig is a good performance optimization over reflect.DeepEqual.


100-124: Comprehensive Cookie struct with modern attributes.

The Cookie struct includes all standard attributes including modern ones like Partitioned for privacy sandbox support. The DefaultRes structure follows the established pattern.


196-276: Robust cookie implementation with proper validation.

The cookie implementation properly:

  • Validates cookies using net/http standards
  • Enforces security requirements (Secure=true for SameSite=None)
  • Handles all cookie attributes including modern ones
  • Properly releases resources

826-863: Clean implementation of response body methods.

The response sending methods are straightforward and properly utilize fasthttp's response methods.


881-919: Excellent automatic charset handling for content types.

The Type method intelligently adds UTF-8 charset for text-based MIME types, improving developer experience by handling this automatically for common cases like JSON, XML, and text types.


419-518: Secure and consistent content encoding methods.

The content encoding methods (JSON, MsgPack, CBOR, XML, JSONP) are well-implemented with:

  • Consistent use of app-configured encoders
  • Proper content-type headers
  • Security header for JSONP (X-Content-Type-Options: nosniff)

311-396: Well-implemented content negotiation methods.

Format and AutoFormat provide flexible content negotiation with:

  • Proper Accept header handling and Vary header setting
  • Support for custom handlers and default fallbacks
  • Convenient AutoFormat for common content types
req.go (7)

3-32: LGTM! Well-structured imports and type definitions.

The imports are appropriate for the enhanced functionality, and the Range/RangeSet types follow HTTP standards for range request handling. The refactor from concrete DefaultCtx to embedded Ctx interface improves modularity.


356-469: LGTM! Efficient IP extraction with proper validation.

The IP extraction methods are well-implemented with:

  • Manual string parsing to avoid allocations
  • Proper IPv4/IPv6 validation when enabled
  • Efficient handling of comma-separated IP lists
  • Appropriate fallback to RemoteIP when no valid IPs found

The implementation correctly handles edge cases and performance considerations.


810-858: LGTM! Comprehensive subdomain parsing with proper edge case handling.

The Subdomains method correctly handles:

  • Negative offsets and boundary conditions
  • Punycode decoding for internationalized domains
  • IP address detection to return empty slice
  • Fully-qualified domain normalization
  • Proper host normalization according to RFC 3986

The implementation is robust and follows web standards.


865-898: LGTM! Robust proxy trust validation with comprehensive IP checking.

The proxy trust implementation correctly handles:

  • Configuration-based trust settings
  • Loopback, private, and link-local IP ranges
  • Individual IP and CIDR range validation
  • Proper security defaults

The IsFromLocal method provides a clean abstraction for loopback detection.


34-56: LGTM! Consistent content negotiation implementation.

The Accept* methods (Accepts, AcceptsCharsets, AcceptsEncodings, AcceptsLanguages) follow a consistent pattern and properly delegate to the appropriate offer handlers.


604-726: LGTM! Well-designed generic parameter and query functions.

The generic Params and Query functions provide excellent type safety with proper error handling and default value support. The implementation correctly handles type parsing and fallback behavior.


531-546: LGTM! Proper HTTP method override with validation.

The Method function correctly handles method override with validation, ensuring only valid HTTP methods are accepted and maintaining the current method when invalid overrides are provided.

@ReneWerner87 ReneWerner87 merged commit 2a01f97 into gofiber:main Jul 29, 2025
20 of 25 checks passed
@github-project-automation github-project-automation bot moved this from In Progress to Done in v3 Jul 29, 2025
@ReneWerner87
Copy link
Member

Benchstat
goos: darwin
goarch: arm64
pkg: github.com/gofiber/fiber/v3
cpu: Apple M2 Pro
                                                                    │ rawFiber/old.txt │          grivera64/fiber/new.txt          │
                                                                    │      sec/op      │    sec/op      vs base                    │
_NewError-12                                                              15.65n ± ∞ ¹    16.20n ± ∞ ¹         ~ (p=0.486 n=4)
_Communication_Flow-12                                                    36.89n ± ∞ ¹    37.41n ± ∞ ¹    +1.38% (p=0.029 n=4)
_Ctx_AcquireReleaseFlow/withoutRequestCtx-12                              21.47n ± ∞ ¹    22.53n ± ∞ ¹    +4.91% (p=0.029 n=4)
_Ctx_AcquireReleaseFlow/withRequestCtx-12                                 291.2n ± ∞ ¹    290.8n ± ∞ ¹         ~ (p=0.886 n=4)
_Bind_Query-12                                                            1.513µ ± ∞ ¹    1.568µ ± ∞ ¹    +3.67% (p=0.029 n=4)
_Bind_Query_Default-12                                                    707.2n ± ∞ ¹    687.9n ± ∞ ¹         ~ (p=0.286 n=4)
_Bind_Query_Map-12                                                        272.5n ± ∞ ¹    267.1n ± ∞ ¹         ~ (p=0.343 n=4)
_Bind_Query_WithParseParam-12                                             1.286µ ± ∞ ¹    1.306µ ± ∞ ¹         ~ (p=0.343 n=4)
_Bind_Query_Comma-12                                                      1.563µ ± ∞ ¹    1.598µ ± ∞ ¹         ~ (p=0.200 n=4)
_Bind_Header-12                                                           1.456µ ± ∞ ¹    1.413µ ± ∞ ¹         ~ (p=0.429 n=4)
_Bind_Header_Map-12                                                       207.8n ± ∞ ¹    203.5n ± ∞ ¹         ~ (p=1.000 n=4)
_Bind_RespHeader-12                                                       1.497µ ± ∞ ¹    1.521µ ± ∞ ¹         ~ (p=0.229 n=4)
_Bind_RespHeader_Map-12                                                   258.2n ± ∞ ¹    248.6n ± ∞ ¹         ~ (p=0.486 n=4)
_Bind_Body_JSON-12                                                        307.1n ± ∞ ¹    314.6n ± ∞ ¹         ~ (p=0.114 n=4)
_Bind_Body_MsgPack-12                                                     118.1n ± ∞ ¹    130.3n ± ∞ ¹   +10.33% (p=0.029 n=4)
_Bind_Body_XML-12                                                         1.019µ ± ∞ ¹    1.017µ ± ∞ ¹         ~ (p=0.686 n=4)
_Bind_Body_CBOR-12                                                        155.8n ± ∞ ¹    161.2n ± ∞ ¹    +3.53% (p=0.029 n=4)
_Bind_Body_Form-12                                                        650.4n ± ∞ ¹    664.6n ± ∞ ¹         ~ (p=0.343 n=4)
_Bind_Body_MultipartForm-12                                               737.6n ± ∞ ¹    739.7n ± ∞ ¹         ~ (p=0.886 n=4)
_Bind_Body_MultipartForm_Nested-12                                        2.876µ ± ∞ ¹    2.857µ ± ∞ ¹         ~ (p=0.686 n=4)
_Bind_Body_Form_Map-12                                                    171.2n ± ∞ ¹    182.2n ± ∞ ¹    +6.49% (p=0.029 n=4)
_Bind_URI-12                                                              1.801µ ± ∞ ¹    1.769µ ± ∞ ¹         ~ (p=0.486 n=4)
_Bind_URI_Map-12                                                          276.1n ± ∞ ¹    275.9n ± ∞ ¹         ~ (p=1.000 n=4)
_Bind_Cookie-12                                                           1.454µ ± ∞ ¹    1.417µ ± ∞ ¹         ~ (p=0.486 n=4)
_Bind_Cookie_Map-12                                                       204.4n ± ∞ ¹    204.2n ± ∞ ¹         ~ (p=0.800 n=4)
Bind_All-12                                                               5.764µ ± ∞ ¹    5.614µ ± ∞ ¹         ~ (p=0.114 n=4)
_Ctx_Accepts/run-[]string{".xml"}-12                                      185.0n ± ∞ ¹    188.8n ± ∞ ¹         ~ (p=0.057 n=4)
_Ctx_Accepts/run-[]string{"json",_"xml"}-12                               277.2n ± ∞ ¹    275.2n ± ∞ ¹         ~ (p=0.486 n=4)
_Ctx_Accepts/run-[]string{"application/json",_"application/xml"}-12       222.2n ± ∞ ¹    221.8n ± ∞ ¹         ~ (p=0.743 n=4)
_Ctx_AcceptsCharsets-12                                                   95.02n ± ∞ ¹    93.93n ± ∞ ¹         ~ (p=0.486 n=4)
_Ctx_AcceptsEncodings-12                                                  140.9n ± ∞ ¹    139.4n ± ∞ ¹         ~ (p=0.343 n=4)
_Ctx_AcceptsLanguages-12                                                  230.2n ± ∞ ¹    233.0n ± ∞ ¹         ~ (p=0.486 n=4)
_Ctx_Append-12                                                            129.8n ± ∞ ¹    135.8n ± ∞ ¹         ~ (p=0.343 n=4)
_Ctx_Attachment-12                                                        209.3n ± ∞ ¹    220.7n ± ∞ ¹    +5.40% (p=0.029 n=4)
_Ctx_BaseURL-12                                                           1.924n ± ∞ ¹    1.968n ± ∞ ¹    +2.29% (p=0.029 n=4)
_Ctx_Body-12                                                              5.944n ± ∞ ¹    7.835n ± ∞ ¹   +31.82% (p=0.029 n=4)
_Ctx_BodyRaw-12                                                           2.993n ± ∞ ¹    4.286n ± ∞ ¹   +43.22% (p=0.029 n=4)
_Ctx_BodyRaw_Immutable-12                                                 10.73n ± ∞ ¹    11.94n ± ∞ ¹   +11.28% (p=0.029 n=4)
_Ctx_Body_Immutable-12                                                    13.82n ± ∞ ¹    15.53n ± ∞ ¹   +12.41% (p=0.029 n=4)
_Ctx_Body_With_Compression/gzip-12                                        337.7n ± ∞ ¹    341.5n ± ∞ ¹         ~ (p=0.343 n=4)
_Ctx_Body_With_Compression/gzip,invalid-12                                59.35n ± ∞ ¹    73.94n ± ∞ ¹   +24.60% (p=0.029 n=4)
_Ctx_Body_With_Compression/deflate-12                                     266.8n ± ∞ ¹    273.8n ± ∞ ¹         ~ (p=0.200 n=4)
_Ctx_Body_With_Compression/gzip,deflate-12                                163.2n ± ∞ ¹    183.6n ± ∞ ¹   +12.57% (p=0.029 n=4)
_Ctx_Body_With_Compression_Immutable/gzip-12                              348.7n ± ∞ ¹    345.0n ± ∞ ¹         ~ (p=1.000 n=4)
_Ctx_Body_With_Compression_Immutable/gzip,invalid-12                      58.33n ± ∞ ¹    75.39n ± ∞ ¹   +29.24% (p=0.029 n=4)
_Ctx_Body_With_Compression_Immutable/deflate-12                           273.9n ± ∞ ¹    283.5n ± ∞ ¹    +3.50% (p=0.029 n=4)
_Ctx_Body_With_Compression_Immutable/gzip,deflate-12                      171.1n ± ∞ ¹    183.5n ± ∞ ¹    +7.28% (p=0.029 n=4)
_Ctx_Cookie-12                                                            76.07n ± ∞ ¹    76.70n ± ∞ ¹         ~ (p=0.886 n=4)
_Ctx_Format/with_arg_allocation-12                                        450.6n ± ∞ ¹    500.6n ± ∞ ¹   +11.10% (p=0.029 n=4)
_Ctx_Format/pre-allocated_args-12                                         414.8n ± ∞ ¹    467.6n ± ∞ ¹   +12.73% (p=0.029 n=4)
_Ctx_Format/text/plain-12                                                 117.8n ± ∞ ¹    161.2n ± ∞ ¹   +36.80% (p=0.029 n=4)
_Ctx_Format/json-12                                                       162.2n ± ∞ ¹    198.6n ± ∞ ¹   +22.40% (p=0.029 n=4)
_Ctx_Format/msgpack-12                                                    169.3n ± ∞ ¹    215.9n ± ∞ ¹   +27.49% (p=0.029 n=4)
_Ctx_AutoFormat-12                                                        154.6n ± ∞ ¹    180.4n ± ∞ ¹   +16.73% (p=0.029 n=4)
_Ctx_AutoFormat_HTML-12                                                   110.6n ± ∞ ¹    140.5n ± ∞ ¹   +26.99% (p=0.029 n=4)
_Ctx_AutoFormat_JSON-12                                                   198.6n ± ∞ ¹    221.9n ± ∞ ¹   +11.73% (p=0.029 n=4)
_Ctx_AutoFormat_MsgPack-12                                                250.9n ± ∞ ¹    277.5n ± ∞ ¹   +10.58% (p=0.029 n=4)
_Ctx_AutoFormat_XML-12                                                    1.407µ ± ∞ ¹    1.422µ ± ∞ ¹         ~ (p=0.686 n=4)
_Ctx_Fresh_StaleEtag-12                                                   314.0n ± ∞ ¹    322.6n ± ∞ ¹         ~ (p=0.200 n=4)
_Ctx_Fresh_WithNoCache-12                                                 78.82n ± ∞ ¹    79.55n ± ∞ ¹         ~ (p=0.200 n=4)
_Ctx_Fresh_LastModified-12                                                68.83n ± ∞ ¹    70.16n ± ∞ ¹         ~ (p=0.343 n=4)
_Ctx_Host-12                                                              24.21n ± ∞ ¹    32.66n ± ∞ ¹   +34.88% (p=0.029 n=4)
_Ctx_Hostname-12                                                          33.37n ± ∞ ¹    41.15n ± ∞ ¹   +23.32% (p=0.029 n=4)
_Ctx_IPs-12                                                               76.03n ± ∞ ¹    76.15n ± ∞ ¹         ~ (p=0.686 n=4)
_Ctx_IPs_v6-12                                                            134.1n ± ∞ ¹    137.0n ± ∞ ¹    +2.16% (p=0.029 n=4)
_Ctx_IPs_With_IP_Validation-12                                            107.8n ± ∞ ¹    106.0n ± ∞ ¹         ~ (p=0.343 n=4)
_Ctx_IPs_v6_With_IP_Validation-12                                         226.8n ± ∞ ¹    230.9n ± ∞ ¹         ~ (p=0.686 n=4)
_Ctx_IP_With_ProxyHeader-12                                               24.32n ± ∞ ¹    32.87n ± ∞ ¹   +35.11% (p=0.029 n=4)
_Ctx_IP_With_ProxyHeader_and_IP_Validation-12                             49.38n ± ∞ ¹    56.51n ± ∞ ¹   +14.46% (p=0.029 n=4)
_Ctx_IP-12                                                                26.54n ± ∞ ¹    33.63n ± ∞ ¹   +26.73% (p=0.029 n=4)
_Ctx_Is-12                                                                40.65n ± ∞ ¹    43.09n ± ∞ ¹    +6.02% (p=0.029 n=4)
_Ctx_MultipartForm-12                                                     264.1n ± ∞ ¹    269.3n ± ∞ ¹         ~ (p=0.486 n=4)
_Ctx_Params-12                                                            40.43n ± ∞ ¹    44.63n ± ∞ ¹   +10.39% (p=0.029 n=4)
_Ctx_Protocol-12                                                          1.948n ± ∞ ¹    2.082n ± ∞ ¹    +6.85% (p=0.029 n=4)
_Ctx_Scheme-12                                                            8.339n ± ∞ ¹   16.675n ± ∞ ¹   +99.95% (p=0.029 n=4)
_Ctx_Query-12                                                             9.941n ± ∞ ¹   10.465n ± ∞ ¹    +5.28% (p=0.029 n=4)
_Ctx_Range/bytes=-700-12                                                  66.23n ± ∞ ¹    68.31n ± ∞ ¹    +3.15% (p=0.029 n=4)
_Ctx_Range/bytes=500--12                                                  65.31n ± ∞ ¹    67.23n ± ∞ ¹         ~ (p=0.343 n=4)
_Ctx_Range/bytes=500-1000-12                                              71.02n ± ∞ ¹    73.77n ± ∞ ¹    +3.87% (p=0.029 n=4)
_Ctx_Range/bytes=0-700,800-1000-12                                        119.0n ± ∞ ¹    120.4n ± ∞ ¹    +1.22% (p=0.029 n=4)
_Ctx_Subdomains-12                                                        108.2n ± ∞ ¹    129.7n ± ∞ ¹   +19.87% (p=0.029 n=4)
_Ctx_SendFile-12                                                          2.585µ ± ∞ ¹    2.711µ ± ∞ ¹    +4.88% (p=0.029 n=4)
_Ctx_JSON-12                                                              112.1n ± ∞ ¹    118.5n ± ∞ ¹    +5.71% (p=0.029 n=4)
_Ctx_MsgPack-12                                                           130.2n ± ∞ ¹    131.2n ± ∞ ¹         ~ (p=0.429 n=4)
_Ctx_CBOR-12                                                              105.5n ± ∞ ¹    109.2n ± ∞ ¹         ~ (p=0.114 n=4)
_Ctx_JSON_Ctype-12                                                        116.1n ± ∞ ¹    116.3n ± ∞ ¹         ~ (p=1.000 n=4)
_Ctx_JSONP-12                                                             148.3n ± ∞ ¹    151.4n ± ∞ ¹         ~ (p=0.343 n=4)
_Ctx_XML-12                                                               1.436µ ± ∞ ¹    1.422µ ± ∞ ¹         ~ (p=0.743 n=4)
_Ctx_Links-12                                                             68.65n ± ∞ ¹    70.16n ± ∞ ¹    +2.20% (p=0.029 n=4)
_Ctx_RenderWithLocalsAndViewBind-12                                       557.9n ± ∞ ¹    549.0n ± ∞ ¹         ~ (p=0.486 n=4)
_Ctx_RenderLocals-12                                                      399.9n ± ∞ ¹    393.8n ± ∞ ¹         ~ (p=0.343 n=4)
_Ctx_RenderViewBind-12                                                    405.3n ± ∞ ¹    396.1n ± ∞ ¹         ~ (p=0.343 n=4)
_Ctx_Render_Engine-12                                                     398.8n ± ∞ ¹    387.6n ± ∞ ¹    -2.83% (p=0.029 n=4)
_Ctx_Get_Location_From_Route-12                                           97.81n ± ∞ ¹    98.45n ± ∞ ¹         ~ (p=1.000 n=4)
_Ctx_Send-12                                                              3.939n ± ∞ ¹    4.328n ± ∞ ¹    +9.90% (p=0.029 n=4)
_Ctx_Set-12                                                               27.81n ± ∞ ¹    29.30n ± ∞ ¹    +5.36% (p=0.029 n=4)
_Ctx_Type-12                                                              48.77n ± ∞ ¹    51.60n ± ∞ ¹    +5.80% (p=0.029 n=4)
_Ctx_Type_Charset-12                                                      50.04n ± ∞ ¹    53.26n ± ∞ ¹    +6.44% (p=0.029 n=4)
_Ctx_Vary-12                                                              62.65n ± ∞ ¹    64.84n ± ∞ ¹    +3.48% (p=0.029 n=4)
_Ctx_Write-12                                                             10.15n ± ∞ ¹    12.12n ± ∞ ¹         ~ (p=0.343 n=4)
_Ctx_Writef-12                                                            47.00n ± ∞ ¹    49.87n ± ∞ ¹         ~ (p=0.343 n=4)
_Ctx_XHR-12                                                               29.54n ± ∞ ¹    29.83n ± ∞ ¹         ~ (p=0.114 n=4)
_Ctx_SendString_B-12                                                      5.059n ± ∞ ¹    6.003n ± ∞ ¹   +18.67% (p=0.029 n=4)
_Ctx_Queries-12                                                           197.6n ± ∞ ¹    194.2n ± ∞ ¹    -1.75% (p=0.029 n=4)
_Ctx_BodyStreamWriter-12                                                  694.6n ± ∞ ¹    707.6n ± ∞ ¹         ~ (p=0.686 n=4)
_Ctx_String-12                                                            196.1n ± ∞ ¹    195.6n ± ∞ ¹         ~ (p=0.686 n=4)
_Ctx_GetRespHeaders-12                                                    256.0n ± ∞ ¹    244.8n ± ∞ ¹    -4.37% (p=0.029 n=4)
_Ctx_GetReqHeaders-12                                                     259.9n ± ∞ ¹    246.5n ± ∞ ¹    -5.14% (p=0.029 n=4)
_Ctx_IsProxyTrusted/NoProxyCheck-12                                       1.931n ± ∞ ¹   11.845n ± ∞ ¹  +513.25% (p=0.029 n=4)
_Ctx_IsProxyTrusted/NoProxyCheckParallel-12                              0.2403n ± ∞ ¹   1.4500n ± ∞ ¹  +503.41% (p=0.029 n=4)
_Ctx_IsProxyTrusted/WithProxyCheckSimple-12                               29.22n ± ∞ ¹    35.60n ± ∞ ¹   +21.85% (p=0.029 n=4)
_Ctx_IsProxyTrusted/WithProxyCheckSimpleParallel-12                       6.636n ± ∞ ¹    6.787n ± ∞ ¹         ~ (p=0.686 n=4)
_Ctx_IsProxyTrusted/WithProxyCheck-12                                     34.10n ± ∞ ¹    42.70n ± ∞ ¹   +25.19% (p=0.029 n=4)
_Ctx_IsProxyTrusted/WithProxyCheckParallel-12                             6.599n ± ∞ ¹    7.683n ± ∞ ¹   +16.44% (p=0.029 n=4)
_Ctx_IsProxyTrusted/WithProxyCheckAllowPrivate-12                         36.50n ± ∞ ¹    42.72n ± ∞ ¹   +17.07% (p=0.029 n=4)
_Ctx_IsProxyTrusted/WithProxyCheckAllowPrivateParallel-12                 6.943n ± ∞ ¹    8.276n ± ∞ ¹         ~ (p=0.057 n=4)
_Ctx_IsProxyTrusted/WithProxyCheckAllowPrivateAsSubnets-12                65.34n ± ∞ ¹    74.28n ± ∞ ¹   +13.68% (p=0.029 n=4)
_Ctx_IsProxyTrusted/WithProxyCheckAllowPrivateAsSubnetsParallel-12        10.10n ± ∞ ¹    12.81n ± ∞ ¹         ~ (p=0.200 n=4)
_Ctx_IsProxyTrusted/WithProxyCheckAllowAll-12                             46.89n ± ∞ ¹    53.30n ± ∞ ¹   +13.68% (p=0.029 n=4)
_Ctx_IsProxyTrusted/WithProxyCheckAllowAllParallel-12                     8.697n ± ∞ ¹    8.679n ± ∞ ¹         ~ (p=1.000 n=4)
_Ctx_IsProxyTrusted/WithProxyCheckAllowAllowAllAsSubnets-12               105.5n ± ∞ ¹    115.2n ± ∞ ¹    +9.15% (p=0.029 n=4)
_Ctx_IsProxyTrusted/WithProxyCheckAllowAllowAllAsSubnetsParallel-12       14.78n ± ∞ ¹    15.15n ± ∞ ¹         ~ (p=0.314 n=4)
_Ctx_IsProxyTrusted/WithProxyCheckSubnet-12                               40.79n ± ∞ ¹    47.61n ± ∞ ¹   +16.73% (p=0.029 n=4)
_Ctx_IsProxyTrusted/WithProxyCheckParallelSubnet-12                       7.836n ± ∞ ¹    8.873n ± ∞ ¹         ~ (p=0.200 n=4)
_Ctx_IsProxyTrusted/WithProxyCheckMultipleSubnet-12                       61.39n ± ∞ ¹    67.48n ± ∞ ¹    +9.91% (p=0.029 n=4)
_Ctx_IsProxyTrusted/WithProxyCheckParallelMultipleSubnet-12               10.87n ± ∞ ¹    12.38n ± ∞ ¹         ~ (p=0.343 n=4)
_Ctx_IsProxyTrusted/WithProxyCheckAllSubnets-12                           116.9n ± ∞ ¹    127.1n ± ∞ ¹    +8.68% (p=0.029 n=4)
_Ctx_IsProxyTrusted/WithProxyCheckParallelAllSubnets-12                   16.46n ± ∞ ¹    17.01n ± ∞ ¹         ~ (p=0.486 n=4)
_Ctx_IsFromLocalhost/Non_Localhost-12                                     7.141n ± ∞ ¹    8.137n ± ∞ ¹   +13.96% (p=0.029 n=4)
_Ctx_IsFromLocalhost/Non_Localhost_Parallel-12                           0.8752n ± ∞ ¹   0.9619n ± ∞ ¹         ~ (p=0.343 n=4)
_Ctx_IsFromLocalhost/Localhost-12                                         7.157n ± ∞ ¹    8.132n ± ∞ ¹   +13.62% (p=0.029 n=4)
_Ctx_IsFromLocalhost/Localhost_Parallel-12                                1.022n ± ∞ ¹    1.011n ± ∞ ¹         ~ (p=1.000 n=4)
_Utils_GetOffer/simple-12                                                 37.09n ± ∞ ¹    38.86n ± ∞ ¹         ~ (p=0.057 n=4+3)
_Utils_GetOffer/6_offers-12                                               101.4n ± ∞ ¹
geomean                                                                   84.46n          92.97n         +10.22%                 ²
¹ need >= 6 samples for confidence interval at level 0.95
² benchmark set differs from baseline; geomeans may not be comparable

                                                                    │ rawFiber/old.txt │           grivera64/fiber/new.txt           │
                                                                    │       B/op       │     B/op       vs base                      │
_NewError-12                                                               24.00 ± ∞ ¹     24.00 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Communication_Flow-12                                                     0.000 ± ∞ ¹     0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_AcquireReleaseFlow/withoutRequestCtx-12                               0.000 ± ∞ ¹     0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_AcquireReleaseFlow/withRequestCtx-12                                1.524Ki ± ∞ ¹   1.524Ki ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Bind_Query-12                                                             881.0 ± ∞ ¹     881.0 ± ∞ ¹         ~ (p=1.000 n=4)
_Bind_Query_Default-12                                                     392.0 ± ∞ ¹     392.0 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Bind_Query_Map-12                                                         80.00 ± ∞ ¹     80.00 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Bind_Query_WithParseParam-12                                              769.0 ± ∞ ¹     769.0 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Bind_Query_Comma-12                                                       897.0 ± ∞ ¹     897.0 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Bind_Header-12                                                            768.0 ± ∞ ¹     768.0 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Bind_Header_Map-12                                                        48.00 ± ∞ ¹     48.00 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Bind_RespHeader-12                                                        800.0 ± ∞ ¹     800.0 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Bind_RespHeader_Map-12                                                    64.00 ± ∞ ¹     64.00 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Bind_Body_JSON-12                                                         224.0 ± ∞ ¹     224.0 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Bind_Body_MsgPack-12                                                      36.00 ± ∞ ¹     36.00 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Bind_Body_XML-12                                                        1.117Ki ± ∞ ¹   1.117Ki ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Bind_Body_CBOR-12                                                         4.000 ± ∞ ¹     4.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Bind_Body_Form-12                                                         352.0 ± ∞ ¹     352.0 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Bind_Body_MultipartForm-12                                                352.0 ± ∞ ¹     352.0 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Bind_Body_MultipartForm_Nested-12                                       1.439Ki ± ∞ ¹   1.439Ki ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Bind_Body_Form_Map-12                                                     16.00 ± ∞ ¹     16.00 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Bind_URI-12                                                               832.0 ± ∞ ¹     832.0 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Bind_URI_Map-12                                                           64.00 ± ∞ ¹     64.00 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Bind_Cookie-12                                                            768.0 ± ∞ ¹     768.0 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Bind_Cookie_Map-12                                                        48.00 ± ∞ ¹     48.00 ± ∞ ¹         ~ (p=1.000 n=4)   ²
Bind_All-12                                                              2.390Ki ± ∞ ¹   2.390Ki ± ∞ ¹         ~ (p=1.000 n=4)
_Ctx_Accepts/run-[]string{".xml"}-12                                       0.000 ± ∞ ¹     0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Accepts/run-[]string{"json",_"xml"}-12                                0.000 ± ∞ ¹     0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Accepts/run-[]string{"application/json",_"application/xml"}-12        0.000 ± ∞ ¹     0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_AcceptsCharsets-12                                                    0.000 ± ∞ ¹     0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_AcceptsEncodings-12                                                   0.000 ± ∞ ¹     0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_AcceptsLanguages-12                                                   0.000 ± ∞ ¹     0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Append-12                                                             0.000 ± ∞ ¹     0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Attachment-12                                                         104.0 ± ∞ ¹     104.0 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_BaseURL-12                                                            0.000 ± ∞ ¹     0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Body-12                                                               0.000 ± ∞ ¹     0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_BodyRaw-12                                                            0.000 ± ∞ ¹     0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_BodyRaw_Immutable-12                                                  8.000 ± ∞ ¹     8.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Body_Immutable-12                                                     8.000 ± ∞ ¹     8.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Body_With_Compression/gzip-12                                         129.0 ± ∞ ¹     128.5 ± ∞ ¹         ~ (p=1.000 n=4)
_Ctx_Body_With_Compression/gzip,invalid-12                                 24.00 ± ∞ ¹     24.00 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Body_With_Compression/deflate-12                                      116.0 ± ∞ ¹     116.5 ± ∞ ¹         ~ (p=1.000 n=4)
_Ctx_Body_With_Compression/gzip,deflate-12                                 152.0 ± ∞ ¹     152.0 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Body_With_Compression_Immutable/gzip-12                               137.0 ± ∞ ¹     137.0 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Body_With_Compression_Immutable/gzip,invalid-12                       24.00 ± ∞ ¹     24.00 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Body_With_Compression_Immutable/deflate-12                            129.0 ± ∞ ¹     129.0 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Body_With_Compression_Immutable/gzip,deflate-12                       152.0 ± ∞ ¹     152.0 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Cookie-12                                                             0.000 ± ∞ ¹     0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Format/with_arg_allocation-12                                         96.00 ± ∞ ¹    224.00 ± ∞ ¹  +133.33% (p=0.029 n=4)
_Ctx_Format/pre-allocated_args-12                                            0.0 ± ∞ ¹     128.0 ± ∞ ¹         ? (p=0.029 n=4)
_Ctx_Format/text/plain-12                                                    0.0 ± ∞ ¹     128.0 ± ∞ ¹         ? (p=0.029 n=4)
_Ctx_Format/json-12                                                          0.0 ± ∞ ¹     128.0 ± ∞ ¹         ? (p=0.029 n=4)
_Ctx_Format/msgpack-12                                                       0.0 ± ∞ ¹     128.0 ± ∞ ¹         ? (p=0.029 n=4)
_Ctx_AutoFormat-12                                                          0.00 ± ∞ ¹     80.00 ± ∞ ¹         ? (p=0.029 n=4)
_Ctx_AutoFormat_HTML-12                                                     0.00 ± ∞ ¹     80.00 ± ∞ ¹         ? (p=0.029 n=4)
_Ctx_AutoFormat_JSON-12                                                    16.00 ± ∞ ¹     96.00 ± ∞ ¹  +500.00% (p=0.029 n=4)
_Ctx_AutoFormat_MsgPack-12                                                 64.00 ± ∞ ¹    144.00 ± ∞ ¹  +125.00% (p=0.029 n=4)
_Ctx_AutoFormat_XML-12                                                   4.375Ki ± ∞ ¹   4.453Ki ± ∞ ¹    +1.79% (p=0.029 n=4)
_Ctx_Fresh_StaleEtag-12                                                    0.000 ± ∞ ¹     0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Fresh_WithNoCache-12                                                  0.000 ± ∞ ¹     0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Fresh_LastModified-12                                                 0.000 ± ∞ ¹     0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Host-12                                                               0.000 ± ∞ ¹     0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Hostname-12                                                           0.000 ± ∞ ¹     0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IPs-12                                                                48.00 ± ∞ ¹     48.00 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IPs_v6-12                                                             128.0 ± ∞ ¹     128.0 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IPs_With_IP_Validation-12                                             48.00 ± ∞ ¹     48.00 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IPs_v6_With_IP_Validation-12                                          128.0 ± ∞ ¹     128.0 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IP_With_ProxyHeader-12                                                0.000 ± ∞ ¹     0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IP_With_ProxyHeader_and_IP_Validation-12                              0.000 ± ∞ ¹     0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IP-12                                                                 8.000 ± ∞ ¹     8.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Is-12                                                                 0.000 ± ∞ ¹     0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_MultipartForm-12                                                      48.00 ± ∞ ¹     48.00 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Params-12                                                             0.000 ± ∞ ¹     0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Protocol-12                                                           0.000 ± ∞ ¹     0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Scheme-12                                                             0.000 ± ∞ ¹     0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Query-12                                                              0.000 ± ∞ ¹     0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Range/bytes=-700-12                                                   16.00 ± ∞ ¹     16.00 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Range/bytes=500--12                                                   16.00 ± ∞ ¹     16.00 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Range/bytes=500-1000-12                                               16.00 ± ∞ ¹     16.00 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Range/bytes=0-700,800-1000-12                                         48.00 ± ∞ ¹     48.00 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Subdomains-12                                                         64.00 ± ∞ ¹     64.00 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_SendFile-12                                                           610.0 ± ∞ ¹     626.0 ± ∞ ¹    +2.62% (p=0.029 n=4)
_Ctx_JSON-12                                                               56.00 ± ∞ ¹     56.00 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_MsgPack-12                                                            96.00 ± ∞ ¹     96.00 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_CBOR-12                                                               48.00 ± ∞ ¹     48.00 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_JSON_Ctype-12                                                         56.00 ± ∞ ¹     56.00 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_JSONP-12                                                              56.00 ± ∞ ¹     56.00 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_XML-12                                                              4.492Ki ± ∞ ¹   4.492Ki ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Links-12                                                              0.000 ± ∞ ¹     0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_RenderWithLocalsAndViewBind-12                                        528.0 ± ∞ ¹     528.0 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_RenderLocals-12                                                       496.0 ± ∞ ¹     496.0 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_RenderViewBind-12                                                     496.0 ± ∞ ¹     496.0 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Render_Engine-12                                                      496.0 ± ∞ ¹     496.0 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Get_Location_From_Route-12                                            16.00 ± ∞ ¹     16.00 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Send-12                                                               0.000 ± ∞ ¹     0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Set-12                                                                0.000 ± ∞ ¹     0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Type-12                                                               0.000 ± ∞ ¹     0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Type_Charset-12                                                       0.000 ± ∞ ¹     0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Vary-12                                                               0.000 ± ∞ ¹     0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Write-12                                                              71.00 ± ∞ ¹     76.50 ± ∞ ¹         ~ (p=0.371 n=4)
_Ctx_Writef-12                                                             95.00 ± ∞ ¹     89.50 ± ∞ ¹         ~ (p=0.629 n=4)
_Ctx_XHR-12                                                                0.000 ± ∞ ¹     0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_SendString_B-12                                                       0.000 ± ∞ ¹     0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Queries-12                                                            336.0 ± ∞ ¹     336.0 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_BodyStreamWriter-12                                                   851.5 ± ∞ ¹     854.0 ± ∞ ¹    +0.29% (p=0.029 n=4)
_Ctx_String-12                                                             96.00 ± ∞ ¹     96.00 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_GetRespHeaders-12                                                     448.0 ± ∞ ¹     448.0 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_GetReqHeaders-12                                                      448.0 ± ∞ ¹     448.0 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsProxyTrusted/NoProxyCheck-12                                        0.000 ± ∞ ¹     0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsProxyTrusted/NoProxyCheckParallel-12                                0.000 ± ∞ ¹     0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsProxyTrusted/WithProxyCheckSimple-12                                8.000 ± ∞ ¹     8.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsProxyTrusted/WithProxyCheckSimpleParallel-12                        8.000 ± ∞ ¹     8.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsProxyTrusted/WithProxyCheck-12                                      8.000 ± ∞ ¹     8.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsProxyTrusted/WithProxyCheckParallel-12                              8.000 ± ∞ ¹     8.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsProxyTrusted/WithProxyCheckAllowPrivate-12                          8.000 ± ∞ ¹     8.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsProxyTrusted/WithProxyCheckAllowPrivateParallel-12                  8.000 ± ∞ ¹     8.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsProxyTrusted/WithProxyCheckAllowPrivateAsSubnets-12                 8.000 ± ∞ ¹     8.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsProxyTrusted/WithProxyCheckAllowPrivateAsSubnetsParallel-12         8.000 ± ∞ ¹     8.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsProxyTrusted/WithProxyCheckAllowAll-12                              8.000 ± ∞ ¹     8.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsProxyTrusted/WithProxyCheckAllowAllParallel-12                      8.000 ± ∞ ¹     8.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsProxyTrusted/WithProxyCheckAllowAllowAllAsSubnets-12                8.000 ± ∞ ¹     8.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsProxyTrusted/WithProxyCheckAllowAllowAllAsSubnetsParallel-12        8.000 ± ∞ ¹     8.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsProxyTrusted/WithProxyCheckSubnet-12                                8.000 ± ∞ ¹     8.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsProxyTrusted/WithProxyCheckParallelSubnet-12                        8.000 ± ∞ ¹     8.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsProxyTrusted/WithProxyCheckMultipleSubnet-12                        8.000 ± ∞ ¹     8.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsProxyTrusted/WithProxyCheckParallelMultipleSubnet-12                8.000 ± ∞ ¹     8.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsProxyTrusted/WithProxyCheckAllSubnets-12                            8.000 ± ∞ ¹     8.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsProxyTrusted/WithProxyCheckParallelAllSubnets-12                    8.000 ± ∞ ¹     8.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsFromLocalhost/Non_Localhost-12                                      0.000 ± ∞ ¹     0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsFromLocalhost/Non_Localhost_Parallel-12                             0.000 ± ∞ ¹     0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsFromLocalhost/Localhost-12                                          0.000 ± ∞ ¹     0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsFromLocalhost/Localhost_Parallel-12                                 0.000 ± ∞ ¹     0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Utils_GetOffer/simple-12                                                  0.000 ± ∞ ¹     0.000 ± ∞ ¹         ~ (p=1.000 n=4+3) ²
_Utils_GetOffer/6_offers-12                                                0.000 ± ∞ ¹
geomean                                                                              ³                  ?                        ⁴ ³
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal
³ summaries must be >0 to compute geomean
⁴ benchmark set differs from baseline; geomeans may not be comparable

                                                                    │ rawFiber/old.txt │          grivera64/fiber/new.txt          │
                                                                    │    allocs/op     │  allocs/op   vs base                      │
_NewError-12                                                               1.000 ± ∞ ¹   1.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Communication_Flow-12                                                     0.000 ± ∞ ¹   0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_AcquireReleaseFlow/withoutRequestCtx-12                               0.000 ± ∞ ¹   0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_AcquireReleaseFlow/withRequestCtx-12                                  4.000 ± ∞ ¹   4.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Bind_Query-12                                                             36.00 ± ∞ ¹   36.00 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Bind_Query_Default-12                                                     13.00 ± ∞ ¹   13.00 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Bind_Query_Map-12                                                         4.000 ± ∞ ¹   4.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Bind_Query_WithParseParam-12                                              26.00 ± ∞ ¹   26.00 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Bind_Query_Comma-12                                                       36.00 ± ∞ ¹   36.00 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Bind_Header-12                                                            33.00 ± ∞ ¹   33.00 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Bind_Header_Map-12                                                        3.000 ± ∞ ¹   3.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Bind_RespHeader-12                                                        35.00 ± ∞ ¹   35.00 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Bind_RespHeader_Map-12                                                    4.000 ± ∞ ¹   4.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Bind_Body_JSON-12                                                         5.000 ± ∞ ¹   5.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Bind_Body_MsgPack-12                                                      2.000 ± ∞ ¹   2.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Bind_Body_XML-12                                                          23.00 ± ∞ ¹   23.00 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Bind_Body_CBOR-12                                                         1.000 ± ∞ ¹   1.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Bind_Body_Form-12                                                         12.00 ± ∞ ¹   12.00 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Bind_Body_MultipartForm-12                                                12.00 ± ∞ ¹   12.00 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Bind_Body_MultipartForm_Nested-12                                         54.00 ± ∞ ¹   54.00 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Bind_Body_Form_Map-12                                                     1.000 ± ∞ ¹   1.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Bind_URI-12                                                               36.00 ± ∞ ¹   36.00 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Bind_URI_Map-12                                                           4.000 ± ∞ ¹   4.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Bind_Cookie-12                                                            33.00 ± ∞ ¹   33.00 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Bind_Cookie_Map-12                                                        3.000 ± ∞ ¹   3.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
Bind_All-12                                                                89.00 ± ∞ ¹   89.00 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Accepts/run-[]string{".xml"}-12                                       0.000 ± ∞ ¹   0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Accepts/run-[]string{"json",_"xml"}-12                                0.000 ± ∞ ¹   0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Accepts/run-[]string{"application/json",_"application/xml"}-12        0.000 ± ∞ ¹   0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_AcceptsCharsets-12                                                    0.000 ± ∞ ¹   0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_AcceptsEncodings-12                                                   0.000 ± ∞ ¹   0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_AcceptsLanguages-12                                                   0.000 ± ∞ ¹   0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Append-12                                                             0.000 ± ∞ ¹   0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Attachment-12                                                         2.000 ± ∞ ¹   2.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_BaseURL-12                                                            0.000 ± ∞ ¹   0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Body-12                                                               0.000 ± ∞ ¹   0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_BodyRaw-12                                                            0.000 ± ∞ ¹   0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_BodyRaw_Immutable-12                                                  1.000 ± ∞ ¹   1.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Body_Immutable-12                                                     1.000 ± ∞ ¹   1.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Body_With_Compression/gzip-12                                         6.000 ± ∞ ¹   6.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Body_With_Compression/gzip,invalid-12                                 1.000 ± ∞ ¹   1.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Body_With_Compression/deflate-12                                      4.000 ± ∞ ¹   4.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Body_With_Compression/gzip,deflate-12                                 4.000 ± ∞ ¹   4.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Body_With_Compression_Immutable/gzip-12                               7.000 ± ∞ ¹   7.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Body_With_Compression_Immutable/gzip,invalid-12                       1.000 ± ∞ ¹   1.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Body_With_Compression_Immutable/deflate-12                            5.000 ± ∞ ¹   5.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Body_With_Compression_Immutable/gzip,deflate-12                       4.000 ± ∞ ¹   4.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Cookie-12                                                             0.000 ± ∞ ¹   0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Format/with_arg_allocation-12                                         1.000 ± ∞ ¹   2.000 ± ∞ ¹  +100.00% (p=0.029 n=4)
_Ctx_Format/pre-allocated_args-12                                          0.000 ± ∞ ¹   1.000 ± ∞ ¹         ? (p=0.029 n=4)
_Ctx_Format/text/plain-12                                                  0.000 ± ∞ ¹   1.000 ± ∞ ¹         ? (p=0.029 n=4)
_Ctx_Format/json-12                                                        0.000 ± ∞ ¹   1.000 ± ∞ ¹         ? (p=0.029 n=4)
_Ctx_Format/msgpack-12                                                     0.000 ± ∞ ¹   1.000 ± ∞ ¹         ? (p=0.029 n=4)
_Ctx_AutoFormat-12                                                         0.000 ± ∞ ¹   1.000 ± ∞ ¹         ? (p=0.029 n=4)
_Ctx_AutoFormat_HTML-12                                                    0.000 ± ∞ ¹   1.000 ± ∞ ¹         ? (p=0.029 n=4)
_Ctx_AutoFormat_JSON-12                                                    1.000 ± ∞ ¹   2.000 ± ∞ ¹  +100.00% (p=0.029 n=4)
_Ctx_AutoFormat_MsgPack-12                                                 2.000 ± ∞ ¹   3.000 ± ∞ ¹   +50.00% (p=0.029 n=4)
_Ctx_AutoFormat_XML-12                                                     7.000 ± ∞ ¹   8.000 ± ∞ ¹   +14.29% (p=0.029 n=4)
_Ctx_Fresh_StaleEtag-12                                                    0.000 ± ∞ ¹   0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Fresh_WithNoCache-12                                                  0.000 ± ∞ ¹   0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Fresh_LastModified-12                                                 0.000 ± ∞ ¹   0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Host-12                                                               0.000 ± ∞ ¹   0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Hostname-12                                                           0.000 ± ∞ ¹   0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IPs-12                                                                1.000 ± ∞ ¹   1.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IPs_v6-12                                                             1.000 ± ∞ ¹   1.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IPs_With_IP_Validation-12                                             1.000 ± ∞ ¹   1.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IPs_v6_With_IP_Validation-12                                          1.000 ± ∞ ¹   1.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IP_With_ProxyHeader-12                                                0.000 ± ∞ ¹   0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IP_With_ProxyHeader_and_IP_Validation-12                              0.000 ± ∞ ¹   0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IP-12                                                                 1.000 ± ∞ ¹   1.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Is-12                                                                 0.000 ± ∞ ¹   0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_MultipartForm-12                                                      3.000 ± ∞ ¹   3.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Params-12                                                             0.000 ± ∞ ¹   0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Protocol-12                                                           0.000 ± ∞ ¹   0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Scheme-12                                                             0.000 ± ∞ ¹   0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Query-12                                                              0.000 ± ∞ ¹   0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Range/bytes=-700-12                                                   1.000 ± ∞ ¹   1.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Range/bytes=500--12                                                   1.000 ± ∞ ¹   1.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Range/bytes=500-1000-12                                               1.000 ± ∞ ¹   1.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Range/bytes=0-700,800-1000-12                                         2.000 ± ∞ ¹   2.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Subdomains-12                                                         1.000 ± ∞ ¹   1.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_SendFile-12                                                           7.000 ± ∞ ¹   7.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_JSON-12                                                               2.000 ± ∞ ¹   2.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_MsgPack-12                                                            3.000 ± ∞ ¹   3.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_CBOR-12                                                               2.000 ± ∞ ¹   2.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_JSON_Ctype-12                                                         2.000 ± ∞ ¹   2.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_JSONP-12                                                              2.000 ± ∞ ¹   2.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_XML-12                                                                10.00 ± ∞ ¹   10.00 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Links-12                                                              0.000 ± ∞ ¹   0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_RenderWithLocalsAndViewBind-12                                        8.000 ± ∞ ¹   8.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_RenderLocals-12                                                       6.000 ± ∞ ¹   6.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_RenderViewBind-12                                                     6.000 ± ∞ ¹   6.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Render_Engine-12                                                      6.000 ± ∞ ¹   6.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Get_Location_From_Route-12                                            1.000 ± ∞ ¹   1.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Send-12                                                               0.000 ± ∞ ¹   0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Set-12                                                                0.000 ± ∞ ¹   0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Type-12                                                               0.000 ± ∞ ¹   0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Type_Charset-12                                                       0.000 ± ∞ ¹   0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Vary-12                                                               0.000 ± ∞ ¹   0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Write-12                                                              0.000 ± ∞ ¹   0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Writef-12                                                             1.000 ± ∞ ¹   1.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_XHR-12                                                                0.000 ± ∞ ¹   0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_SendString_B-12                                                       0.000 ± ∞ ¹   0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_Queries-12                                                            2.000 ± ∞ ¹   2.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_BodyStreamWriter-12                                                   8.000 ± ∞ ¹   8.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_String-12                                                             5.000 ± ∞ ¹   5.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_GetRespHeaders-12                                                     5.000 ± ∞ ¹   5.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_GetReqHeaders-12                                                      5.000 ± ∞ ¹   5.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsProxyTrusted/NoProxyCheck-12                                        0.000 ± ∞ ¹   0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsProxyTrusted/NoProxyCheckParallel-12                                0.000 ± ∞ ¹   0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsProxyTrusted/WithProxyCheckSimple-12                                1.000 ± ∞ ¹   1.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsProxyTrusted/WithProxyCheckSimpleParallel-12                        1.000 ± ∞ ¹   1.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsProxyTrusted/WithProxyCheck-12                                      1.000 ± ∞ ¹   1.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsProxyTrusted/WithProxyCheckParallel-12                              1.000 ± ∞ ¹   1.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsProxyTrusted/WithProxyCheckAllowPrivate-12                          1.000 ± ∞ ¹   1.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsProxyTrusted/WithProxyCheckAllowPrivateParallel-12                  1.000 ± ∞ ¹   1.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsProxyTrusted/WithProxyCheckAllowPrivateAsSubnets-12                 1.000 ± ∞ ¹   1.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsProxyTrusted/WithProxyCheckAllowPrivateAsSubnetsParallel-12         1.000 ± ∞ ¹   1.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsProxyTrusted/WithProxyCheckAllowAll-12                              1.000 ± ∞ ¹   1.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsProxyTrusted/WithProxyCheckAllowAllParallel-12                      1.000 ± ∞ ¹   1.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsProxyTrusted/WithProxyCheckAllowAllowAllAsSubnets-12                1.000 ± ∞ ¹   1.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsProxyTrusted/WithProxyCheckAllowAllowAllAsSubnetsParallel-12        1.000 ± ∞ ¹   1.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsProxyTrusted/WithProxyCheckSubnet-12                                1.000 ± ∞ ¹   1.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsProxyTrusted/WithProxyCheckParallelSubnet-12                        1.000 ± ∞ ¹   1.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsProxyTrusted/WithProxyCheckMultipleSubnet-12                        1.000 ± ∞ ¹   1.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsProxyTrusted/WithProxyCheckParallelMultipleSubnet-12                1.000 ± ∞ ¹   1.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsProxyTrusted/WithProxyCheckAllSubnets-12                            1.000 ± ∞ ¹   1.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsProxyTrusted/WithProxyCheckParallelAllSubnets-12                    1.000 ± ∞ ¹   1.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsFromLocalhost/Non_Localhost-12                                      0.000 ± ∞ ¹   0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsFromLocalhost/Non_Localhost_Parallel-12                             0.000 ± ∞ ¹   0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsFromLocalhost/Localhost-12                                          0.000 ± ∞ ¹   0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Ctx_IsFromLocalhost/Localhost_Parallel-12                                 0.000 ± ∞ ¹   0.000 ± ∞ ¹         ~ (p=1.000 n=4)   ²
_Utils_GetOffer/simple-12                                                  0.000 ± ∞ ¹   0.000 ± ∞ ¹         ~ (p=1.000 n=4+3) ²
_Utils_GetOffer/6_offers-12                                                0.000 ± ∞ ¹
geomean                                                                              ³                ?                        ⁴ ³
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal
³ summaries must be >0 to compute geomean
⁴ benchmark set differs from baseline; geomeans may not be comparable

pkg: github.com/gofiber/fiber/v3/binder
                             │ rawFiber/old.txt │      grivera64/fiber/new.txt       │
                             │      sec/op      │    sec/op     vs base              │
_CBORBinder_Bind-12                146.7n ± ∞ ¹   146.8n ± ∞ ¹       ~ (p=0.886 n=4)
_CookieBinder_Bind-12              1.663µ ± ∞ ¹   1.645µ ± ∞ ¹       ~ (p=0.686 n=4)
_FormBinder_Bind-12                1.701µ ± ∞ ¹   1.729µ ± ∞ ¹       ~ (p=0.200 n=4)
_FormBinder_BindMultipart-12       1.769µ ± ∞ ¹   1.743µ ± ∞ ¹       ~ (p=0.486 n=4)
_HeaderBinder_Bind-12              1.660µ ± ∞ ¹   1.668µ ± ∞ ¹       ~ (p=0.343 n=4)
_JSON_Binding_Bind-12              721.6n ± ∞ ¹   725.0n ± ∞ ¹       ~ (p=0.886 n=4)
_equalFieldType-12                 77.23n ± ∞ ¹   76.81n ± ∞ ¹       ~ (p=1.000 n=4)
_Msgpack_Binding_Bind-12           199.1n ± ∞ ¹   203.6n ± ∞ ¹  +2.29% (p=0.029 n=4)
_QueryBinder_Bind-12               1.677µ ± ∞ ¹   1.647µ ± ∞ ¹       ~ (p=0.486 n=4)
_RespHeaderBinder_Bind-12          1.767µ ± ∞ ¹   1.762µ ± ∞ ¹       ~ (p=0.829 n=4)
_URIBinding_Bind-12                1.424µ ± ∞ ¹   1.419µ ± ∞ ¹       ~ (p=0.800 n=4)
_XMLBinding_Bind-12                5.512µ ± ∞ ¹   5.531µ ± ∞ ¹       ~ (p=0.686 n=4)
geomean                            908.0n         907.8n        -0.03%
¹ need >= 6 samples for confidence interval at level 0.95

                             │ rawFiber/old.txt │        grivera64/fiber/new.txt        │
                             │       B/op       │     B/op       vs base                │
_CBORBinder_Bind-12                 4.000 ± ∞ ¹     4.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_CookieBinder_Bind-12             1.031Ki ± ∞ ¹   1.031Ki ± ∞ ¹       ~ (p=1.000 n=4) ²
_FormBinder_Bind-12               1.031Ki ± ∞ ¹   1.031Ki ± ∞ ¹       ~ (p=1.000 n=4) ²
_FormBinder_BindMultipart-12      1.047Ki ± ∞ ¹   1.047Ki ± ∞ ¹       ~ (p=1.000 n=4) ²
_HeaderBinder_Bind-12             1.039Ki ± ∞ ¹   1.039Ki ± ∞ ¹       ~ (p=1.000 n=4) ²
_JSON_Binding_Bind-12               320.0 ± ∞ ¹     320.0 ± ∞ ¹       ~ (p=1.000 n=4) ²
_equalFieldType-12                  0.000 ± ∞ ¹     0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Msgpack_Binding_Bind-12            176.0 ± ∞ ¹     176.0 ± ∞ ¹       ~ (p=1.000 n=4) ²
_QueryBinder_Bind-12              1.031Ki ± ∞ ¹   1.031Ki ± ∞ ¹       ~ (p=1.000 n=4) ²
_RespHeaderBinder_Bind-12         1.070Ki ± ∞ ¹   1.070Ki ± ∞ ¹       ~ (p=1.000 n=4) ²
_URIBinding_Bind-12                 768.0 ± ∞ ¹     768.0 ± ∞ ¹       ~ (p=1.000 n=4) ²
_XMLBinding_Bind-12               4.205Ki ± ∞ ¹   4.208Ki ± ∞ ¹       ~ (p=0.743 n=4)
geomean                                       ³                  +0.01%               ³
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal
³ summaries must be >0 to compute geomean

                             │ rawFiber/old.txt │       grivera64/fiber/new.txt       │
                             │    allocs/op     │  allocs/op   vs base                │
_CBORBinder_Bind-12                 1.000 ± ∞ ¹   1.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_CookieBinder_Bind-12               38.00 ± ∞ ¹   38.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_FormBinder_Bind-12                 38.00 ± ∞ ¹   38.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_FormBinder_BindMultipart-12        39.00 ± ∞ ¹   39.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_HeaderBinder_Bind-12               39.00 ± ∞ ¹   39.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_JSON_Binding_Bind-12               10.00 ± ∞ ¹   10.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_equalFieldType-12                  0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Msgpack_Binding_Bind-12            8.000 ± ∞ ¹   8.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_QueryBinder_Bind-12                38.00 ± ∞ ¹   38.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_RespHeaderBinder_Bind-12           41.00 ± ∞ ¹   41.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_URIBinding_Bind-12                 33.00 ± ∞ ¹   33.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_XMLBinding_Bind-12                 101.0 ± ∞ ¹   101.0 ± ∞ ¹       ~ (p=1.000 n=4) ²
geomean                                       ³                +0.00%               ³
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal
³ summaries must be >0 to compute geomean

pkg: github.com/gofiber/fiber/v3/client
                                                               │ rawFiber/old.txt │      grivera64/fiber/new.txt       │
                                                               │      sec/op      │    sec/op     vs base              │
_Client_Request-12                                                   5.473µ ± ∞ ¹   5.431µ ± ∞ ¹       ~ (p=0.686 n=4)
_Client_Request_Parallel-12                                          2.997µ ± ∞ ¹   2.999µ ± ∞ ¹       ~ (p=1.000 n=4)
_Request_Headers-12                                                  216.1n ± ∞ ¹   217.4n ± ∞ ¹       ~ (p=0.114 n=4)
_Request_Params-12                                                   152.2n ± ∞ ¹   154.6n ± ∞ ¹       ~ (p=0.114 n=4)
_Request_Cookies-12                                                  79.31n ± ∞ ¹   80.13n ± ∞ ¹       ~ (p=0.343 n=4)
_Request_PathParams-12                                               79.52n ± ∞ ¹   79.16n ± ∞ ¹       ~ (p=0.486 n=4)
_Request_Files-12                                                    2.668n ± ∞ ¹   2.704n ± ∞ ¹       ~ (p=0.314 n=4)
_Request_AllFormData-12                                              145.3n ± ∞ ¹   145.9n ± ∞ ¹       ~ (p=0.743 n=4)
_SetValWithStruct/the_struct_should_be_applied-12                    856.6n ± ∞ ¹   855.7n ± ∞ ¹       ~ (p=0.800 n=4)
_SetValWithStruct/the_pointer_of_a_struct_should_be_applied-12       792.5n ± ∞ ¹   807.9n ± ∞ ¹       ~ (p=0.343 n=4)
_SetValWithStruct/error_type_should_ignore-12                        3.869n ± ∞ ¹   3.877n ± ∞ ¹       ~ (p=0.486 n=4)
_Headers-12                                                          432.3n ± ∞ ¹   426.3n ± ∞ ¹       ~ (p=0.886 n=4)
geomean                                                              183.9n         184.6n        +0.36%
¹ need >= 6 samples for confidence interval at level 0.95

                                                               │ rawFiber/old.txt │       grivera64/fiber/new.txt       │
                                                               │       B/op       │    B/op      vs base                │
_Client_Request-12                                                    215.0 ± ∞ ¹   215.0 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Client_Request_Parallel-12                                           221.0 ± ∞ ¹   222.0 ± ∞ ¹       ~ (p=0.800 n=4)
_Request_Headers-12                                                   200.0 ± ∞ ¹   200.0 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Request_Params-12                                                    184.0 ± ∞ ¹   184.0 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Request_Cookies-12                                                   48.00 ± ∞ ¹   48.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Request_PathParams-12                                                48.00 ± ∞ ¹   48.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Request_Files-12                                                     0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Request_AllFormData-12                                               184.0 ± ∞ ¹   184.0 ± ∞ ¹       ~ (p=1.000 n=4) ²
_SetValWithStruct/the_struct_should_be_applied-12                     266.0 ± ∞ ¹   266.0 ± ∞ ¹       ~ (p=1.000 n=4) ²
_SetValWithStruct/the_pointer_of_a_struct_should_be_applied-12        258.0 ± ∞ ¹   258.0 ± ∞ ¹       ~ (p=1.000 n=4) ²
_SetValWithStruct/error_type_should_ignore-12                         0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Headers-12                                                           296.0 ± ∞ ¹   296.0 ± ∞ ¹       ~ (p=1.000 n=4) ²
geomean                                                                         ³                +0.04%               ³
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal
³ summaries must be >0 to compute geomean

                                                               │ rawFiber/old.txt │       grivera64/fiber/new.txt       │
                                                               │    allocs/op     │  allocs/op   vs base                │
_Client_Request-12                                                    8.000 ± ∞ ¹   8.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Client_Request_Parallel-12                                           8.000 ± ∞ ¹   8.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Request_Headers-12                                                   7.000 ± ∞ ¹   7.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Request_Params-12                                                    6.000 ± ∞ ¹   6.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Request_Cookies-12                                                   3.000 ± ∞ ¹   3.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Request_PathParams-12                                                3.000 ± ∞ ¹   3.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Request_Files-12                                                     0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Request_AllFormData-12                                               6.000 ± ∞ ¹   6.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_SetValWithStruct/the_struct_should_be_applied-12                     8.000 ± ∞ ¹   8.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_SetValWithStruct/the_pointer_of_a_struct_should_be_applied-12        8.000 ± ∞ ¹   8.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_SetValWithStruct/error_type_should_ignore-12                         0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Headers-12                                                           9.000 ± ∞ ¹   9.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
geomean                                                                         ³                +0.00%               ³
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal
³ summaries must be >0 to compute geomean

pkg: github.com/gofiber/fiber/v3/internal/memory
                        │ rawFiber/old.txt │       grivera64/fiber/new.txt       │
                        │      sec/op      │    sec/op      vs base              │
_Memory/fiber_memory-12       99.60µ ± ∞ ¹   103.02µ ± ∞ ¹  +3.44% (p=0.029 n=4)
¹ need >= 6 samples for confidence interval at level 0.95

                        │ rawFiber/old.txt │       grivera64/fiber/new.txt       │
                        │       B/op       │     B/op       vs base              │
_Memory/fiber_memory-12      23.50Ki ± ∞ ¹   23.51Ki ± ∞ ¹  +0.05% (p=0.029 n=4)
¹ need >= 6 samples for confidence interval at level 0.95

                        │ rawFiber/old.txt │     grivera64/fiber/new.txt     │
                        │    allocs/op     │  allocs/op    vs base           │
_Memory/fiber_memory-12       1.000k ± ∞ ¹   1.000k ± ∞ ¹  ~ (p=1.000 n=4) ²
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal

pkg: github.com/gofiber/fiber/v3/internal/storage/memory
                                          │ rawFiber/old.txt │      grivera64/fiber/new.txt       │
                                          │      sec/op      │    sec/op     vs base              │
_Memory_Set-12                                  29.70n ± ∞ ¹   29.40n ± ∞ ¹       ~ (p=0.486 n=4)
_Memory_Set_Parallel-12                         110.6n ± ∞ ¹   110.6n ± ∞ ¹       ~ (p=0.886 n=4)
_Memory_Set_Asserted-12                         132.9n ± ∞ ¹   129.7n ± ∞ ¹       ~ (p=0.200 n=4)
_Memory_Set_Asserted_Parallel-12                346.2n ± ∞ ¹   343.0n ± ∞ ¹       ~ (p=0.343 n=4)
_Memory_Get-12                                  11.54n ± ∞ ¹   11.45n ± ∞ ¹       ~ (p=0.686 n=4)
_Memory_Get_Parallel-12                         157.7n ± ∞ ¹   150.0n ± ∞ ¹       ~ (p=0.486 n=4)
_Memory_Get_Asserted-12                         112.6n ± ∞ ¹   112.8n ± ∞ ¹       ~ (p=0.629 n=4)
_Memory_Get_Asserted_Parallel-12                280.1n ± ∞ ¹   276.9n ± ∞ ¹       ~ (p=0.486 n=4)
_Memory_SetAndDelete-12                         60.19n ± ∞ ¹   61.67n ± ∞ ¹       ~ (p=0.200 n=4)
_Memory_SetAndDelete_Parallel-12                219.7n ± ∞ ¹   218.7n ± ∞ ¹       ~ (p=1.000 n=4)
_Memory_SetAndDelete_Asserted-12                266.6n ± ∞ ¹   269.2n ± ∞ ¹       ~ (p=1.000 n=4)
_Memory_SetAndDelete_Asserted_Parallel-12       677.3n ± ∞ ¹   664.9n ± ∞ ¹       ~ (p=0.486 n=4)
geomean                                         128.7n         127.6n        -0.85%
¹ need >= 6 samples for confidence interval at level 0.95

                                          │ rawFiber/old.txt │       grivera64/fiber/new.txt       │
                                          │       B/op       │    B/op      vs base                │
_Memory_Set-12                                   3.000 ± ∞ ¹   3.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Memory_Set_Parallel-12                          3.000 ± ∞ ¹   3.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Memory_Set_Asserted-12                          3.000 ± ∞ ¹   3.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Memory_Set_Asserted_Parallel-12                 3.000 ± ∞ ¹   3.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Memory_Get-12                                   0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Memory_Get_Parallel-12                          0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Memory_Get_Asserted-12                          0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Memory_Get_Asserted_Parallel-12                 0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Memory_SetAndDelete-12                          3.000 ± ∞ ¹   3.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Memory_SetAndDelete_Parallel-12                 3.000 ± ∞ ¹   3.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Memory_SetAndDelete_Asserted-12                 3.000 ± ∞ ¹   3.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Memory_SetAndDelete_Asserted_Parallel-12        3.000 ± ∞ ¹   3.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
geomean                                                    ³                +0.00%               ³
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal
³ summaries must be >0 to compute geomean

                                          │ rawFiber/old.txt │       grivera64/fiber/new.txt       │
                                          │    allocs/op     │  allocs/op   vs base                │
_Memory_Set-12                                   1.000 ± ∞ ¹   1.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Memory_Set_Parallel-12                          1.000 ± ∞ ¹   1.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Memory_Set_Asserted-12                          1.000 ± ∞ ¹   1.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Memory_Set_Asserted_Parallel-12                 1.000 ± ∞ ¹   1.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Memory_Get-12                                   0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Memory_Get_Parallel-12                          0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Memory_Get_Asserted-12                          0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Memory_Get_Asserted_Parallel-12                 0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Memory_SetAndDelete-12                          1.000 ± ∞ ¹   1.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Memory_SetAndDelete_Parallel-12                 1.000 ± ∞ ¹   1.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Memory_SetAndDelete_Asserted-12                 1.000 ± ∞ ¹   1.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Memory_SetAndDelete_Asserted_Parallel-12        1.000 ± ∞ ¹   1.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
geomean                                                    ³                +0.00%               ³
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal
³ summaries must be >0 to compute geomean

pkg: github.com/gofiber/fiber/v3/log
                                                                    │ rawFiber/old.txt │       grivera64/fiber/new.txt       │
                                                                    │      sec/op      │    sec/op      vs base              │
_LogfKeyAndValues/test_logf_with_debug_level_and_key-values-12            98.35n ± ∞ ¹    97.58n ± ∞ ¹       ~ (p=0.686 n=4)
_LogfKeyAndValues/test_logf_with_info_level_and_key-values-12             111.6n ± ∞ ¹    112.8n ± ∞ ¹  +1.12% (p=0.029 n=4)
_LogfKeyAndValues/test_logf_with_warn_level_and_key-values-12             112.1n ± ∞ ¹    112.2n ± ∞ ¹       ~ (p=0.686 n=4)
_LogfKeyAndValues/test_logf_with_format_and_key-values-12                 128.3n ± ∞ ¹    126.1n ± ∞ ¹  -1.71% (p=0.029 n=4)
_LogfKeyAndValues/test_logf_with_one_key-12                               104.8n ± ∞ ¹    104.7n ± ∞ ¹       ~ (p=1.000 n=4)
_LogfKeyAndValues_Parallel/debug_level_with_key-values-12                 82.63n ± ∞ ¹    82.68n ± ∞ ¹       ~ (p=0.886 n=4)
_LogfKeyAndValues_Parallel/info_level_with_key-values-12                  82.45n ± ∞ ¹    82.45n ± ∞ ¹       ~ (p=0.686 n=4)
_LogfKeyAndValues_Parallel/warn_level_with_key-values-12                  84.44n ± ∞ ¹    82.01n ± ∞ ¹       ~ (p=0.114 n=4)
_LogfKeyAndValues_Parallel/warn_level_with_format_and_key-values-12       82.81n ± ∞ ¹    82.76n ± ∞ ¹       ~ (p=0.686 n=4)
_LogfKeyAndValues_Parallel/warn_level_with_one_key-12                     83.03n ± ∞ ¹    85.22n ± ∞ ¹       ~ (p=0.200 n=4)
_DefaultSystemLogger-12                                                   1.944n ± ∞ ¹    1.963n ± ∞ ¹  +0.93% (p=0.029 n=4)
_SetLogger-12                                                             1.937n ± ∞ ¹    1.955n ± ∞ ¹  +0.90% (p=0.029 n=4)
_Fiberlog_SetLevel/Test_case_1-12                                         1.943n ± ∞ ¹    1.934n ± ∞ ¹       ~ (p=0.200 n=4)
_Fiberlog_SetLevel/Test_case_2-12                                         1.948n ± ∞ ¹    1.925n ± ∞ ¹       ~ (p=0.343 n=4)
_Fiberlog_SetLevel/Test_case_3-12                                         1.942n ± ∞ ¹    1.941n ± ∞ ¹       ~ (p=0.886 n=4)
_Fiberlog_SetLevel/Test_case_4-12                                         1.952n ± ∞ ¹    1.934n ± ∞ ¹       ~ (p=0.314 n=4)
_Fiberlog_SetLevel/Test_case_5-12                                         1.948n ± ∞ ¹    1.948n ± ∞ ¹       ~ (p=0.886 n=4)
_DefaultSystemLogger_Parallel-12                                         0.2044n ± ∞ ¹   0.2095n ± ∞ ¹       ~ (p=0.200 n=4)
_SetLogger_Parallel-12                                                   0.2434n ± ∞ ¹   0.2456n ± ∞ ¹       ~ (p=0.343 n=4)
_Fiberlog_SetLevel_Parallel/Test_case_1_Parallel-12                      0.2584n ± ∞ ¹   0.2594n ± ∞ ¹       ~ (p=0.686 n=4)
_Fiberlog_SetLevel_Parallel/Test_case_2_Parallel-12                      0.2575n ± ∞ ¹   0.2866n ± ∞ ¹       ~ (p=0.057 n=4)
_Fiberlog_SetLevel_Parallel/Test_case_3_Parallel-12                      0.2603n ± ∞ ¹   0.2709n ± ∞ ¹       ~ (p=0.114 n=4)
_Fiberlog_SetLevel_Parallel/Test_case_4_Parallel-12                      0.2665n ± ∞ ¹   0.2615n ± ∞ ¹       ~ (p=0.200 n=4)
_Fiberlog_SetLevel_Parallel/Test_case_5_Parallel-12                      0.2598n ± ∞ ¹   0.2618n ± ∞ ¹       ~ (p=0.486 n=4)
geomean                                                                   5.419n          5.452n        +0.62%
¹ need >= 6 samples for confidence interval at level 0.95

                                                                    │ rawFiber/old.txt │       grivera64/fiber/new.txt        │
                                                                    │       B/op       │     B/op      vs base                │
_LogfKeyAndValues/test_logf_with_debug_level_and_key-values-12             86.00 ± ∞ ¹    86.50 ± ∞ ¹       ~ (p=0.571 n=4)
_LogfKeyAndValues/test_logf_with_info_level_and_key-values-12              101.0 ± ∞ ¹    101.0 ± ∞ ¹       ~ (p=0.571 n=4)
_LogfKeyAndValues/test_logf_with_warn_level_and_key-values-12              102.0 ± ∞ ¹    102.0 ± ∞ ¹       ~ (p=0.714 n=4)
_LogfKeyAndValues/test_logf_with_format_and_key-values-12                  164.5 ± ∞ ¹    163.0 ± ∞ ¹       ~ (p=0.486 n=4)
_LogfKeyAndValues/test_logf_with_one_key-12                                125.0 ± ∞ ¹    123.5 ± ∞ ¹       ~ (p=0.200 n=4)
_LogfKeyAndValues_Parallel/debug_level_with_key-values-12                  61.00 ± ∞ ¹    57.00 ± ∞ ¹       ~ (p=0.457 n=4)
_LogfKeyAndValues_Parallel/info_level_with_key-values-12                   70.00 ± ∞ ¹    66.00 ± ∞ ¹       ~ (p=0.171 n=4)
_LogfKeyAndValues_Parallel/warn_level_with_key-values-12                   98.00 ± ∞ ¹   106.00 ± ∞ ¹       ~ (p=0.057 n=4)
_LogfKeyAndValues_Parallel/warn_level_with_format_and_key-values-12        166.5 ± ∞ ¹    166.0 ± ∞ ¹       ~ (p=1.000 n=4)
_LogfKeyAndValues_Parallel/warn_level_with_one_key-12                      124.5 ± ∞ ¹    130.5 ± ∞ ¹       ~ (p=0.400 n=4)
_DefaultSystemLogger-12                                                    0.000 ± ∞ ¹    0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_SetLogger-12                                                              0.000 ± ∞ ¹    0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Fiberlog_SetLevel/Test_case_1-12                                          0.000 ± ∞ ¹    0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Fiberlog_SetLevel/Test_case_2-12                                          0.000 ± ∞ ¹    0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Fiberlog_SetLevel/Test_case_3-12                                          0.000 ± ∞ ¹    0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Fiberlog_SetLevel/Test_case_4-12                                          0.000 ± ∞ ¹    0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Fiberlog_SetLevel/Test_case_5-12                                          0.000 ± ∞ ¹    0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_DefaultSystemLogger_Parallel-12                                           0.000 ± ∞ ¹    0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_SetLogger_Parallel-12                                                     0.000 ± ∞ ¹    0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Fiberlog_SetLevel_Parallel/Test_case_1_Parallel-12                        0.000 ± ∞ ¹    0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Fiberlog_SetLevel_Parallel/Test_case_2_Parallel-12                        0.000 ± ∞ ¹    0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Fiberlog_SetLevel_Parallel/Test_case_3_Parallel-12                        0.000 ± ∞ ¹    0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Fiberlog_SetLevel_Parallel/Test_case_4_Parallel-12                        0.000 ± ∞ ¹    0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Fiberlog_SetLevel_Parallel/Test_case_5_Parallel-12                        0.000 ± ∞ ¹    0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
geomean                                                                              ³                 -0.08%               ³
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal
³ summaries must be >0 to compute geomean

                                                                    │ rawFiber/old.txt │       grivera64/fiber/new.txt       │
                                                                    │    allocs/op     │  allocs/op   vs base                │
_LogfKeyAndValues/test_logf_with_debug_level_and_key-values-12             0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_LogfKeyAndValues/test_logf_with_info_level_and_key-values-12              1.000 ± ∞ ¹   1.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_LogfKeyAndValues/test_logf_with_warn_level_and_key-values-12              1.000 ± ∞ ¹   1.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_LogfKeyAndValues/test_logf_with_format_and_key-values-12                  2.000 ± ∞ ¹   2.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_LogfKeyAndValues/test_logf_with_one_key-12                                1.000 ± ∞ ¹   1.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_LogfKeyAndValues_Parallel/debug_level_with_key-values-12                  0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_LogfKeyAndValues_Parallel/info_level_with_key-values-12                   1.000 ± ∞ ¹   1.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_LogfKeyAndValues_Parallel/warn_level_with_key-values-12                   1.000 ± ∞ ¹   1.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_LogfKeyAndValues_Parallel/warn_level_with_format_and_key-values-12        2.000 ± ∞ ¹   2.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_LogfKeyAndValues_Parallel/warn_level_with_one_key-12                      1.000 ± ∞ ¹   1.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_DefaultSystemLogger-12                                                    0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_SetLogger-12                                                              0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Fiberlog_SetLevel/Test_case_1-12                                          0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Fiberlog_SetLevel/Test_case_2-12                                          0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Fiberlog_SetLevel/Test_case_3-12                                          0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Fiberlog_SetLevel/Test_case_4-12                                          0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Fiberlog_SetLevel/Test_case_5-12                                          0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_DefaultSystemLogger_Parallel-12                                           0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_SetLogger_Parallel-12                                                     0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Fiberlog_SetLevel_Parallel/Test_case_1_Parallel-12                        0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Fiberlog_SetLevel_Parallel/Test_case_2_Parallel-12                        0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Fiberlog_SetLevel_Parallel/Test_case_3_Parallel-12                        0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Fiberlog_SetLevel_Parallel/Test_case_4_Parallel-12                        0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Fiberlog_SetLevel_Parallel/Test_case_5_Parallel-12                        0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
geomean                                                                              ³                +0.00%               ³
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal
³ summaries must be >0 to compute geomean

pkg: github.com/gofiber/fiber/v3/middleware/adaptor
                                         │ rawFiber/old.txt │      grivera64/fiber/new.txt       │
                                         │      sec/op      │    sec/op     vs base              │
_FiberHandlerFunc/No_Content-12                519.9n ± ∞ ¹   517.8n ± ∞ ¹       ~ (p=0.686 n=4)
_FiberHandlerFunc/100KB-12                     519.5n ± ∞ ¹   510.8n ± ∞ ¹  -1.67% (p=0.029 n=4)
_FiberHandlerFunc/500KB-12                     512.1n ± ∞ ¹   508.8n ± ∞ ¹       ~ (p=0.886 n=4)
_FiberHandlerFunc/1MB-12                       513.2n ± ∞ ¹   506.7n ± ∞ ¹       ~ (p=0.343 n=4)
_FiberHandlerFunc/5MB-12                       509.7n ± ∞ ¹   503.4n ± ∞ ¹       ~ (p=0.200 n=4)
_FiberHandlerFunc/10MB-12                      510.1n ± ∞ ¹   504.3n ± ∞ ¹       ~ (p=0.486 n=4)
_FiberHandlerFunc/25MB-12                      500.2n ± ∞ ¹   512.1n ± ∞ ¹       ~ (p=0.343 n=4)
_FiberHandlerFunc/50MB-12                      507.8n ± ∞ ¹   503.1n ± ∞ ¹       ~ (p=0.486 n=4)
_FiberHandlerFunc_Parallel/No_Content-12       137.5n ± ∞ ¹   137.6n ± ∞ ¹       ~ (p=1.000 n=4)
_FiberHandlerFunc_Parallel/100KB-12            141.1n ± ∞ ¹   140.3n ± ∞ ¹       ~ (p=1.000 n=4)
_FiberHandlerFunc_Parallel/500KB-12            137.6n ± ∞ ¹   151.7n ± ∞ ¹       ~ (p=0.057 n=4)
_FiberHandlerFunc_Parallel/1MB-12              140.8n ± ∞ ¹   144.7n ± ∞ ¹       ~ (p=1.000 n=4)
_FiberHandlerFunc_Parallel/5MB-12              141.1n ± ∞ ¹   132.9n ± ∞ ¹  -5.81% (p=0.029 n=4)
_FiberHandlerFunc_Parallel/10MB-12             141.4n ± ∞ ¹   145.2n ± ∞ ¹       ~ (p=0.686 n=4)
_FiberHandlerFunc_Parallel/25MB-12             146.1n ± ∞ ¹   145.1n ± ∞ ¹       ~ (p=0.514 n=4)
_FiberHandlerFunc_Parallel/50MB-12             134.8n ± ∞ ¹   145.7n ± ∞ ¹       ~ (p=0.486 n=4)
_HTTPHandler-12                                634.5n ± ∞ ¹   636.5n ± ∞ ¹       ~ (p=0.486 n=4)
geomean                                        281.6n         283.4n        +0.64%
¹ need >= 6 samples for confidence interval at level 0.95

                                         │ rawFiber/old.txt │       grivera64/fiber/new.txt       │
                                         │       B/op       │    B/op      vs base                │
_FiberHandlerFunc/No_Content-12                 314.0 ± ∞ ¹   314.0 ± ∞ ¹       ~ (p=0.971 n=4)
_FiberHandlerFunc/100KB-12                      315.5 ± ∞ ¹   312.5 ± ∞ ¹       ~ (p=0.086 n=4)
_FiberHandlerFunc/500KB-12                      314.0 ± ∞ ¹   312.5 ± ∞ ¹       ~ (p=0.429 n=4)
_FiberHandlerFunc/1MB-12                        313.5 ± ∞ ¹   313.5 ± ∞ ¹       ~ (p=1.000 n=4)
_FiberHandlerFunc/5MB-12                        318.0 ± ∞ ¹   316.0 ± ∞ ¹       ~ (p=0.057 n=4)
_FiberHandlerFunc/10MB-12                       322.5 ± ∞ ¹   321.5 ± ∞ ¹       ~ (p=0.657 n=4)
_FiberHandlerFunc/25MB-12                       334.5 ± ∞ ¹   336.5 ± ∞ ¹       ~ (p=0.200 n=4)
_FiberHandlerFunc/50MB-12                       356.5 ± ∞ ¹   354.5 ± ∞ ¹       ~ (p=0.143 n=4)
_FiberHandlerFunc_Parallel/No_Content-12        311.0 ± ∞ ¹   310.5 ± ∞ ¹       ~ (p=0.829 n=4)
_FiberHandlerFunc_Parallel/100KB-12             309.5 ± ∞ ¹   313.5 ± ∞ ¹       ~ (p=0.200 n=4)
_FiberHandlerFunc_Parallel/500KB-12             312.5 ± ∞ ¹   312.0 ± ∞ ¹       ~ (p=0.743 n=4)
_FiberHandlerFunc_Parallel/1MB-12               312.5 ± ∞ ¹   313.0 ± ∞ ¹       ~ (p=0.971 n=4)
_FiberHandlerFunc_Parallel/5MB-12               324.0 ± ∞ ¹   321.5 ± ∞ ¹       ~ (p=0.571 n=4)
_FiberHandlerFunc_Parallel/10MB-12              322.0 ± ∞ ¹   324.5 ± ∞ ¹       ~ (p=1.000 n=4)
_FiberHandlerFunc_Parallel/25MB-12              334.0 ± ∞ ¹   318.5 ± ∞ ¹       ~ (p=0.114 n=4)
_FiberHandlerFunc_Parallel/50MB-12              313.0 ± ∞ ¹   333.5 ± ∞ ¹       ~ (p=0.800 n=4)
_HTTPHandler-12                                 696.0 ± ∞ ¹   696.0 ± ∞ ¹       ~ (p=1.000 n=4) ²
geomean                                         335.2         335.3        +0.02%
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal

                                         │ rawFiber/old.txt │       grivera64/fiber/new.txt       │
                                         │    allocs/op     │  allocs/op   vs base                │
_FiberHandlerFunc/No_Content-12                 8.000 ± ∞ ¹   8.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_FiberHandlerFunc/100KB-12                      8.000 ± ∞ ¹   8.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_FiberHandlerFunc/500KB-12                      8.000 ± ∞ ¹   8.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_FiberHandlerFunc/1MB-12                        8.000 ± ∞ ¹   8.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_FiberHandlerFunc/5MB-12                        8.000 ± ∞ ¹   8.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_FiberHandlerFunc/10MB-12                       8.000 ± ∞ ¹   8.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_FiberHandlerFunc/25MB-12                       8.000 ± ∞ ¹   8.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_FiberHandlerFunc/50MB-12                       8.000 ± ∞ ¹   8.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_FiberHandlerFunc_Parallel/No_Content-12        8.000 ± ∞ ¹   8.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_FiberHandlerFunc_Parallel/100KB-12             8.000 ± ∞ ¹   8.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_FiberHandlerFunc_Parallel/500KB-12             8.000 ± ∞ ¹   8.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_FiberHandlerFunc_Parallel/1MB-12               8.000 ± ∞ ¹   8.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_FiberHandlerFunc_Parallel/5MB-12               8.000 ± ∞ ¹   8.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_FiberHandlerFunc_Parallel/10MB-12              8.000 ± ∞ ¹   8.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_FiberHandlerFunc_Parallel/25MB-12              8.000 ± ∞ ¹   8.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_FiberHandlerFunc_Parallel/50MB-12              8.000 ± ∞ ¹   8.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_HTTPHandler-12                                 10.00 ± ∞ ¹   10.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
geomean                                         8.106         8.106        +0.00%
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal

pkg: github.com/gofiber/fiber/v3/middleware/basicauth
                               │ rawFiber/old.txt │      grivera64/fiber/new.txt       │
                               │      sec/op      │    sec/op     vs base              │
_Middleware_BasicAuth-12             183.6n ± ∞ ¹   186.5n ± ∞ ¹       ~ (p=0.686 n=4)
_Middleware_BasicAuth_Upper-12       182.1n ± ∞ ¹   186.4n ± ∞ ¹       ~ (p=0.171 n=4)
geomean                              182.8n         186.5n        +2.00%
¹ need >= 6 samples for confidence interval at level 0.95

                               │ rawFiber/old.txt │       grivera64/fiber/new.txt       │
                               │       B/op       │    B/op      vs base                │
_Middleware_BasicAuth-12              80.00 ± ∞ ¹   80.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Middleware_BasicAuth_Upper-12        80.00 ± ∞ ¹   80.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
geomean                               80.00         80.00        +0.00%
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal

                               │ rawFiber/old.txt │       grivera64/fiber/new.txt       │
                               │    allocs/op     │  allocs/op   vs base                │
_Middleware_BasicAuth-12              4.000 ± ∞ ¹   4.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Middleware_BasicAuth_Upper-12        4.000 ± ∞ ¹   4.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
geomean                               4.000         4.000        +0.00%
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal

pkg: github.com/gofiber/fiber/v3/middleware/cache
                             │ rawFiber/old.txt │      grivera64/fiber/new.txt       │
                             │      sec/op      │    sec/op     vs base              │
_Cache-12                          48.92µ ± ∞ ¹   50.08µ ± ∞ ¹       ~ (p=0.114 n=4)
_Cache_Storage-12                  48.27µ ± ∞ ¹   49.36µ ± ∞ ¹       ~ (p=0.343 n=4)
_Cache_AdditionalHeaders-12        121.2µ ± ∞ ¹   120.0µ ± ∞ ¹       ~ (p=0.486 n=4)
_Cache_MaxSize/Disabled-12         334.2n ± ∞ ¹   339.1n ± ∞ ¹       ~ (p=0.200 n=4)
_Cache_MaxSize/Unlim-12            333.5n ± ∞ ¹   337.8n ± ∞ ¹       ~ (p=0.200 n=4)
_Cache_MaxSize/LowBounded-12       332.8n ± ∞ ¹   345.7n ± ∞ ¹       ~ (p=0.114 n=4)
MarshalMsgitem-12                  43.05n ± ∞ ¹   42.85n ± ∞ ¹       ~ (p=0.486 n=4)
AppendMsgitem-12                   22.64n ± ∞ ¹   23.02n ± ∞ ¹       ~ (p=0.343 n=4)
Unmarshalitem-12                   57.84n ± ∞ ¹   58.44n ± ∞ ¹       ~ (p=0.886 n=4)
Encodeitem-12                      60.55n ± ∞ ¹   64.33n ± ∞ ¹       ~ (p=0.057 n=4)
Decodeitem-12                      113.6n ± ∞ ¹   114.2n ± ∞ ¹       ~ (p=0.343 n=4)
geomean                            607.0n         617.4n        +1.73%
¹ need >= 6 samples for confidence interval at level 0.95

                             │ rawFiber/old.txt │        grivera64/fiber/new.txt        │
                             │       B/op       │     B/op       vs base                │
_Cache-12                         40.36Ki ± ∞ ¹   40.36Ki ± ∞ ¹       ~ (p=1.000 n=4)
_Cache_Storage-12                 40.36Ki ± ∞ ¹   40.36Ki ± ∞ ¹       ~ (p=1.000 n=4)
_Cache_AdditionalHeaders-12         323.5 ± ∞ ¹     332.0 ± ∞ ¹       ~ (p=0.086 n=4)
_Cache_MaxSize/Disabled-12          39.00 ± ∞ ¹     39.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Cache_MaxSize/Unlim-12             39.00 ± ∞ ¹     39.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Cache_MaxSize/LowBounded-12        39.00 ± ∞ ¹     39.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
MarshalMsgitem-12                   128.0 ± ∞ ¹     128.0 ± ∞ ¹       ~ (p=1.000 n=4) ²
AppendMsgitem-12                    0.000 ± ∞ ¹     0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
Unmarshalitem-12                    0.000 ± ∞ ¹     0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
Encodeitem-12                       0.000 ± ∞ ¹     0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
Decodeitem-12                       0.000 ± ∞ ¹     0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
geomean                                       ³                  +0.24%               ³
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal
³ summaries must be >0 to compute geomean

                             │ rawFiber/old.txt │       grivera64/fiber/new.txt       │
                             │    allocs/op     │  allocs/op   vs base                │
_Cache-12                           7.000 ± ∞ ¹   7.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Cache_Storage-12                   7.000 ± ∞ ¹   7.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Cache_AdditionalHeaders-12         4.000 ± ∞ ¹   4.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Cache_MaxSize/Disabled-12          4.000 ± ∞ ¹   4.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Cache_MaxSize/Unlim-12             4.000 ± ∞ ¹   4.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Cache_MaxSize/LowBounded-12        4.000 ± ∞ ¹   4.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
MarshalMsgitem-12                   1.000 ± ∞ ¹   1.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
AppendMsgitem-12                    0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
Unmarshalitem-12                    0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
Encodeitem-12                       0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
Decodeitem-12                       0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
geomean                                       ³                +0.00%               ³
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal
³ summaries must be >0 to compute geomean

                 │ rawFiber/old.txt │       grivera64/fiber/new.txt        │
                 │       B/s        │      B/s        vs base              │
AppendMsgitem-12      2.839Gi ± ∞ ¹    2.791Gi ± ∞ ¹       ~ (p=0.343 n=4)
Unmarshalitem-12      1.111Gi ± ∞ ¹    1.100Gi ± ∞ ¹       ~ (p=0.886 n=4)
Encodeitem-12        1086.7Mi ± ∞ ¹   1023.0Mi ± ∞ ¹       ~ (p=0.057 n=4)
Decodeitem-12         579.3Mi ± ∞ ¹    576.1Mi ± ∞ ¹       ~ (p=0.343 n=4)
geomean               1.173Gi          1.146Gi        -2.30%
¹ need >= 6 samples for confidence interval at level 0.95

pkg: github.com/gofiber/fiber/v3/middleware/compress
                                                          │ rawFiber/old.txt │       grivera64/fiber/new.txt       │
                                                          │      sec/op      │    sec/op      vs base              │
_Compress/Gzip-12                                               95.45n ± ∞ ¹    98.36n ± ∞ ¹       ~ (p=0.200 n=4)
_Compress/Deflate-12                                            109.0n ± ∞ ¹    112.6n ± ∞ ¹       ~ (p=0.143 n=4)
_Compress/Brotli-12                                             84.66n ± ∞ ¹    86.64n ± ∞ ¹       ~ (p=0.200 n=4)
_Compress/Zstd-12                                               110.4n ± ∞ ¹    114.3n ± ∞ ¹  +3.53% (p=0.029 n=4)
_Compress_Levels/Gzip_LevelDisabled-12                          70.64n ± ∞ ¹    74.30n ± ∞ ¹  +5.18% (p=0.029 n=4)
_Compress_Levels/Gzip_LevelDefault-12                           93.48n ± ∞ ¹    97.41n ± ∞ ¹       ~ (p=0.229 n=4)
_Compress_Levels/Gzip_LevelBestSpeed-12                         93.14n ± ∞ ¹    97.37n ± ∞ ¹  +4.53% (p=0.029 n=4)
_Compress_Levels/Gzip_LevelBestCompression-12                   93.33n ± ∞ ¹    98.03n ± ∞ ¹  +5.04% (p=0.029 n=4)
_Compress_Levels/Deflate_LevelDisabled-12                       70.51n ± ∞ ¹    74.74n ± ∞ ¹  +6.01% (p=0.029 n=4)
_Compress_Levels/Deflate_LevelDefault-12                        109.8n ± ∞ ¹    113.8n ± ∞ ¹       ~ (p=0.371 n=4)
_Compress_Levels/Deflate_LevelBestSpeed-12                      112.3n ± ∞ ¹    111.6n ± ∞ ¹       ~ (p=1.000 n=4)
_Compress_Levels/Deflate_LevelBestCompression-12                108.9n ± ∞ ¹    110.3n ± ∞ ¹       ~ (p=0.086 n=4)
_Compress_Levels/Brotli_LevelDisabled-12                        71.23n ± ∞ ¹    73.92n ± ∞ ¹  +3.78% (p=0.029 n=4)
_Compress_Levels/Brotli_LevelDefault-12                         82.98n ± ∞ ¹    86.86n ± ∞ ¹  +4.66% (p=0.029 n=4)
_Compress_Levels/Brotli_LevelBestSpeed-12                       82.96n ± ∞ ¹    86.85n ± ∞ ¹  +4.70% (p=0.029 n=4)
_Compress_Levels/Brotli_LevelBestCompression-12                 85.75n ± ∞ ¹    90.06n ± ∞ ¹  +5.01% (p=0.029 n=4)
_Compress_Levels/Zstd_LevelDisabled-12                          71.05n ± ∞ ¹    73.60n ± ∞ ¹  +3.60% (p=0.029 n=4)
_Compress_Levels/Zstd_LevelDefault-12                           110.5n ± ∞ ¹    116.5n ± ∞ ¹       ~ (p=0.114 n=4)
_Compress_Levels/Zstd_LevelBestSpeed-12                         112.8n ± ∞ ¹    114.8n ± ∞ ¹       ~ (p=0.286 n=4)
_Compress_Levels/Zstd_LevelBestCompression-12                   111.1n ± ∞ ¹    113.7n ± ∞ ¹  +2.39% (p=0.029 n=4)
_Compress_Parallel/Gzip-12                                      13.49n ± ∞ ¹    12.95n ± ∞ ¹       ~ (p=1.000 n=4)
_Compress_Parallel/Deflate-12                                   16.17n ± ∞ ¹    14.91n ± ∞ ¹       ~ (p=0.886 n=4)
_Compress_Parallel/Brotli-12                                    13.72n ± ∞ ¹    14.06n ± ∞ ¹       ~ (p=0.686 n=4)
_Compress_Parallel/Zstd-12                                      16.52n ± ∞ ¹    16.80n ± ∞ ¹       ~ (p=0.886 n=4)
_Compress_Levels_Parallel/Gzip_LevelDisabled-12                 8.781n ± ∞ ¹    9.255n ± ∞ ¹       ~ (p=0.343 n=4)
_Compress_Levels_Parallel/Gzip_LevelDefault-12                  13.47n ± ∞ ¹    15.99n ± ∞ ¹       ~ (p=0.114 n=4)
_Compress_Levels_Parallel/Gzip_LevelBestSpeed-12                12.43n ± ∞ ¹    12.05n ± ∞ ¹       ~ (p=0.886 n=4)
_Compress_Levels_Parallel/Gzip_LevelBestCompression-12          14.15n ± ∞ ¹    13.33n ± ∞ ¹       ~ (p=1.000 n=4)
_Compress_Levels_Parallel/Deflate_LevelDisabled-12              9.818n ± ∞ ¹   10.075n ± ∞ ¹       ~ (p=0.486 n=4)
_Compress_Levels_Parallel/Deflate_LevelDefault-12               13.20n ± ∞ ¹    15.34n ± ∞ ¹       ~ (p=0.200 n=4)
_Compress_Levels_Parallel/Deflate_LevelBestSpeed-12             13.27n ± ∞ ¹    17.46n ± ∞ ¹       ~ (p=0.057 n=4)
_Compress_Levels_Parallel/Deflate_LevelBestCompression-12       17.54n ± ∞ ¹    17.07n ± ∞ ¹       ~ (p=0.886 n=4)
_Compress_Levels_Parallel/Brotli_LevelDisabled-12               9.152n ± ∞ ¹    9.365n ± ∞ ¹       ~ (p=0.686 n=4)
_Compress_Levels_Parallel/Brotli_LevelDefault-12                14.77n ± ∞ ¹    13.38n ± ∞ ¹       ~ (p=0.486 n=4)
_Compress_Levels_Parallel/Brotli_LevelBestSpeed-12              14.24n ± ∞ ¹    14.27n ± ∞ ¹       ~ (p=1.000 n=4)
_Compress_Levels_Parallel/Brotli_LevelBestCompression-12        12.48n ± ∞ ¹    14.01n ± ∞ ¹       ~ (p=0.343 n=4)
_Compress_Levels_Parallel/Zstd_LevelDisabled-12                 8.989n ± ∞ ¹   10.590n ± ∞ ¹       ~ (p=0.200 n=4)
_Compress_Levels_Parallel/Zstd_LevelDefault-12                  17.54n ± ∞ ¹    17.70n ± ∞ ¹       ~ (p=0.886 n=4)
_Compress_Levels_Parallel/Zstd_LevelBestSpeed-12                16.86n ± ∞ ¹    18.39n ± ∞ ¹       ~ (p=0.343 n=4)
_Compress_Levels_Parallel/Zstd_LevelBestCompression-12          16.39n ± ∞ ¹    14.50n ± ∞ ¹       ~ (p=0.200 n=4)
geomean                                                         35.18n          36.40n        +3.48%
¹ need >= 6 samples for confidence interval at level 0.95

                                                          │ rawFiber/old.txt │       grivera64/fiber/new.txt       │
                                                          │       B/op       │    B/op      vs base                │
_Compress/Gzip-12                                                0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress/Deflate-12                                             0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress/Brotli-12                                              0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress/Zstd-12                                                0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels/Gzip_LevelDisabled-12                           0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels/Gzip_LevelDefault-12                            0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels/Gzip_LevelBestSpeed-12                          0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels/Gzip_LevelBestCompression-12                    0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels/Deflate_LevelDisabled-12                        0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels/Deflate_LevelDefault-12                         0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels/Deflate_LevelBestSpeed-12                       0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels/Deflate_LevelBestCompression-12                 0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels/Brotli_LevelDisabled-12                         0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels/Brotli_LevelDefault-12                          0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels/Brotli_LevelBestSpeed-12                        0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels/Brotli_LevelBestCompression-12                  2.000 ± ∞ ¹   2.000 ± ∞ ¹       ~ (p=1.000 n=4)
_Compress_Levels/Zstd_LevelDisabled-12                           0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels/Zstd_LevelDefault-12                            0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels/Zstd_LevelBestSpeed-12                          0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels/Zstd_LevelBestCompression-12                    0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Parallel/Gzip-12                                       0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Parallel/Deflate-12                                    0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Parallel/Brotli-12                                     0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Parallel/Zstd-12                                       0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels_Parallel/Gzip_LevelDisabled-12                  0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels_Parallel/Gzip_LevelDefault-12                   0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels_Parallel/Gzip_LevelBestSpeed-12                 0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels_Parallel/Gzip_LevelBestCompression-12           0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels_Parallel/Deflate_LevelDisabled-12               0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels_Parallel/Deflate_LevelDefault-12                0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels_Parallel/Deflate_LevelBestSpeed-12              0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels_Parallel/Deflate_LevelBestCompression-12        0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels_Parallel/Brotli_LevelDisabled-12                0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels_Parallel/Brotli_LevelDefault-12                 0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels_Parallel/Brotli_LevelBestSpeed-12               0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels_Parallel/Brotli_LevelBestCompression-12         0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels_Parallel/Zstd_LevelDisabled-12                  0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels_Parallel/Zstd_LevelDefault-12                   0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels_Parallel/Zstd_LevelBestSpeed-12                 0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels_Parallel/Zstd_LevelBestCompression-12           0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
geomean                                                                    ³                +0.00%               ³
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal
³ summaries must be >0 to compute geomean

                                                          │ rawFiber/old.txt │       grivera64/fiber/new.txt       │
                                                          │    allocs/op     │  allocs/op   vs base                │
_Compress/Gzip-12                                                0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress/Deflate-12                                             0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress/Brotli-12                                              0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress/Zstd-12                                                0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels/Gzip_LevelDisabled-12                           0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels/Gzip_LevelDefault-12                            0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels/Gzip_LevelBestSpeed-12                          0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels/Gzip_LevelBestCompression-12                    0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels/Deflate_LevelDisabled-12                        0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels/Deflate_LevelDefault-12                         0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels/Deflate_LevelBestSpeed-12                       0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels/Deflate_LevelBestCompression-12                 0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels/Brotli_LevelDisabled-12                         0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels/Brotli_LevelDefault-12                          0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels/Brotli_LevelBestSpeed-12                        0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels/Brotli_LevelBestCompression-12                  0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels/Zstd_LevelDisabled-12                           0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels/Zstd_LevelDefault-12                            0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels/Zstd_LevelBestSpeed-12                          0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels/Zstd_LevelBestCompression-12                    0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Parallel/Gzip-12                                       0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Parallel/Deflate-12                                    0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Parallel/Brotli-12                                     0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Parallel/Zstd-12                                       0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels_Parallel/Gzip_LevelDisabled-12                  0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels_Parallel/Gzip_LevelDefault-12                   0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels_Parallel/Gzip_LevelBestSpeed-12                 0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels_Parallel/Gzip_LevelBestCompression-12           0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels_Parallel/Deflate_LevelDisabled-12               0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels_Parallel/Deflate_LevelDefault-12                0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels_Parallel/Deflate_LevelBestSpeed-12              0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels_Parallel/Deflate_LevelBestCompression-12        0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels_Parallel/Brotli_LevelDisabled-12                0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels_Parallel/Brotli_LevelDefault-12                 0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels_Parallel/Brotli_LevelBestSpeed-12               0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels_Parallel/Brotli_LevelBestCompression-12         0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels_Parallel/Zstd_LevelDisabled-12                  0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels_Parallel/Zstd_LevelDefault-12                   0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels_Parallel/Zstd_LevelBestSpeed-12                 0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Compress_Levels_Parallel/Zstd_LevelBestCompression-12           0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
geomean                                                                    ³                +0.00%               ³
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal
³ summaries must be >0 to compute geomean

pkg: github.com/gofiber/fiber/v3/middleware/cors
                                                  │ rawFiber/old.txt │      grivera64/fiber/new.txt       │
                                                  │      sec/op      │    sec/op     vs base              │
_CORS_NewHandler-12                                     200.2n ± ∞ ¹   209.3n ± ∞ ¹  +4.55% (p=0.029 n=4)
_CORS_NewHandler_Parallel-12                            35.31n ± ∞ ¹   33.73n ± ∞ ¹       ~ (p=0.886 n=4)
_CORS_NewHandlerSingleOrigin-12                         209.1n ± ∞ ¹   212.3n ± ∞ ¹       ~ (p=0.486 n=4)
_CORS_NewHandlerSingleOrigin_Parallel-12                33.55n ± ∞ ¹   33.11n ± ∞ ¹       ~ (p=0.886 n=4)
_CORS_NewHandlerWildcard-12                             122.0n ± ∞ ¹   126.8n ± ∞ ¹  +4.02% (p=0.029 n=4)
_CORS_NewHandlerWildcard_Parallel-12                    14.54n ± ∞ ¹   14.94n ± ∞ ¹       ~ (p=0.686 n=4)
_CORS_NewHandlerPreflight-12                            595.6n ± ∞ ¹   611.9n ± ∞ ¹  +2.75% (p=0.029 n=4)
_CORS_NewHandlerPreflight_Parallel-12                   112.9n ± ∞ ¹   114.4n ± ∞ ¹       ~ (p=0.171 n=4)
_CORS_NewHandlerPreflightSingleOrigin-12                599.3n ± ∞ ¹   611.4n ± ∞ ¹  +2.02% (p=0.029 n=4)
_CORS_NewHandlerPreflightSingleOrigin_Parallel-12       110.5n ± ∞ ¹   117.4n ± ∞ ¹       ~ (p=0.057 n=4)
_CORS_NewHandlerPreflightWildcard-12                    545.9n ± ∞ ¹   563.5n ± ∞ ¹       ~ (p=0.343 n=4)
_CORS_NewHandlerPreflightWildcard_Parallel-12           106.7n ± ∞ ¹   111.0n ± ∞ ¹       ~ (p=0.200 n=4)
_CORS_SubdomainMatch-12                                 6.225n ± ∞ ¹   6.244n ± ∞ ¹       ~ (p=0.343 n=4)
geomean                                                 102.7n         104.8n        +2.05%
¹ need >= 6 samples for confidence interval at level 0.95

                                                  │ rawFiber/old.txt │       grivera64/fiber/new.txt       │
                                                  │       B/op       │    B/op      vs base                │
_CORS_NewHandler-12                                      16.00 ± ∞ ¹   16.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_CORS_NewHandler_Parallel-12                             16.00 ± ∞ ¹   16.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_CORS_NewHandlerSingleOrigin-12                          16.00 ± ∞ ¹   16.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_CORS_NewHandlerSingleOrigin_Parallel-12                 16.00 ± ∞ ¹   16.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_CORS_NewHandlerWildcard-12                              0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_CORS_NewHandlerWildcard_Parallel-12                     0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_CORS_NewHandlerPreflight-12                             104.0 ± ∞ ¹   104.0 ± ∞ ¹       ~ (p=1.000 n=4) ²
_CORS_NewHandlerPreflight_Parallel-12                    104.0 ± ∞ ¹   104.0 ± ∞ ¹       ~ (p=1.000 n=4) ²
_CORS_NewHandlerPreflightSingleOrigin-12                 104.0 ± ∞ ¹   104.0 ± ∞ ¹       ~ (p=1.000 n=4) ²
_CORS_NewHandlerPreflightSingleOrigin_Parallel-12        104.0 ± ∞ ¹   104.0 ± ∞ ¹       ~ (p=1.000 n=4) ²
_CORS_NewHandlerPreflightWildcard-12                     104.0 ± ∞ ¹   104.0 ± ∞ ¹       ~ (p=1.000 n=4) ²
_CORS_NewHandlerPreflightWildcard_Parallel-12            104.0 ± ∞ ¹   104.0 ± ∞ ¹       ~ (p=1.000 n=4) ²
_CORS_SubdomainMatch-12                                  0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
geomean                                                            ³                +0.00%               ³
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal
³ summaries must be >0 to compute geomean

                                                  │ rawFiber/old.txt │       grivera64/fiber/new.txt       │
                                                  │    allocs/op     │  allocs/op   vs base                │
_CORS_NewHandler-12                                      1.000 ± ∞ ¹   1.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_CORS_NewHandler_Parallel-12                             1.000 ± ∞ ¹   1.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_CORS_NewHandlerSingleOrigin-12                          1.000 ± ∞ ¹   1.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_CORS_NewHandlerSingleOrigin_Parallel-12                 1.000 ± ∞ ¹   1.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_CORS_NewHandlerWildcard-12                              0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_CORS_NewHandlerWildcard_Parallel-12                     0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_CORS_NewHandlerPreflight-12                             5.000 ± ∞ ¹   5.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_CORS_NewHandlerPreflight_Parallel-12                    5.000 ± ∞ ¹   5.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_CORS_NewHandlerPreflightSingleOrigin-12                 5.000 ± ∞ ¹   5.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_CORS_NewHandlerPreflightSingleOrigin_Parallel-12        5.000 ± ∞ ¹   5.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_CORS_NewHandlerPreflightWildcard-12                     5.000 ± ∞ ¹   5.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_CORS_NewHandlerPreflightWildcard_Parallel-12            5.000 ± ∞ ¹   5.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_CORS_SubdomainMatch-12                                  0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
geomean                                                            ³                +0.00%               ³
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal
³ summaries must be >0 to compute geomean

pkg: github.com/gofiber/fiber/v3/middleware/csrf
                                  │ rawFiber/old.txt │       grivera64/fiber/new.txt       │
                                  │      sec/op      │    sec/op      vs base              │
MarshalMsgitem-12                       6.816n ± ∞ ¹    6.853n ± ∞ ¹       ~ (p=0.886 n=4)
AppendMsgitem-12                       0.2962n ± ∞ ¹   0.2955n ± ∞ ¹       ~ (p=0.486 n=4)
Unmarshalitem-12                        2.687n ± ∞ ¹    2.682n ± ∞ ¹       ~ (p=0.886 n=4)
Encodeitem-12                           3.312n ± ∞ ¹    3.277n ± ∞ ¹       ~ (p=0.486 n=4)
Decodeitem-12                           5.695n ± ∞ ¹    5.365n ± ∞ ¹  -5.79% (p=0.029 n=4)
_Middleware_CSRF_Check-12               917.2n ± ∞ ¹    940.7n ± ∞ ¹  +2.56% (p=0.029 n=4)
_Middleware_CSRF_GenerateToken-12       1.184µ ± ∞ ¹    1.194µ ± ∞ ¹       ~ (p=0.343 n=4)
_CSRF_SubdomainMatch-12                 6.251n ± ∞ ¹    6.298n ± ∞ ¹       ~ (p=0.486 n=4)
MarshalMsgstorageManager-12             6.808n ± ∞ ¹    6.809n ± ∞ ¹       ~ (p=1.000 n=4)
AppendMsgstorageManager-12             0.2960n ± ∞ ¹   0.3130n ± ∞ ¹  +5.73% (p=0.029 n=4)
UnmarshalstorageManager-12              2.692n ± ∞ ¹    2.688n ± ∞ ¹       ~ (p=0.657 n=4)
EncodestorageManager-12                 3.288n ± ∞ ¹    3.287n ± ∞ ¹       ~ (p=1.000 n=4)
DecodestorageManager-12                 5.406n ± ∞ ¹    5.389n ± ∞ ¹       ~ (p=0.686 n=4)
geomean                                 6.804n          6.816n        +0.18%
¹ need >= 6 samples for confidence interval at level 0.95

                                  │ rawFiber/old.txt │       grivera64/fiber/new.txt       │
                                  │       B/op       │    B/op      vs base                │
MarshalMsgitem-12                        1.000 ± ∞ ¹   1.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
AppendMsgitem-12                         0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
Unmarshalitem-12                         0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
Encodeitem-12                            0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
Decodeitem-12                            0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Middleware_CSRF_Check-12                408.0 ± ∞ ¹   408.0 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Middleware_CSRF_GenerateToken-12        529.0 ± ∞ ¹   528.0 ± ∞ ¹       ~ (p=0.486 n=4)
_CSRF_SubdomainMatch-12                  0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
MarshalMsgstorageManager-12              1.000 ± ∞ ¹   1.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
AppendMsgstorageManager-12               0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
UnmarshalstorageManager-12               0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
EncodestorageManager-12                  0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
DecodestorageManager-12                  0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
geomean                                            ³                -0.01%               ³
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal
³ summaries must be >0 to compute geomean

                                  │ rawFiber/old.txt │       grivera64/fiber/new.txt       │
                                  │    allocs/op     │  allocs/op   vs base                │
MarshalMsgitem-12                        1.000 ± ∞ ¹   1.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
AppendMsgitem-12                         0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
Unmarshalitem-12                         0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
Encodeitem-12                            0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
Decodeitem-12                            0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Middleware_CSRF_Check-12                8.000 ± ∞ ¹   8.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Middleware_CSRF_GenerateToken-12        9.000 ± ∞ ¹   9.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_CSRF_SubdomainMatch-12                  0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
MarshalMsgstorageManager-12              1.000 ± ∞ ¹   1.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
AppendMsgstorageManager-12               0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
UnmarshalstorageManager-12               0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
EncodestorageManager-12                  0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
DecodestorageManager-12                  0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
geomean                                            ³                +0.00%               ³
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal
³ summaries must be >0 to compute geomean

                           │ rawFiber/old.txt │       grivera64/fiber/new.txt       │
                           │       B/s        │      B/s       vs base              │
AppendMsgitem-12                3.144Gi ± ∞ ¹   3.151Gi ± ∞ ¹       ~ (p=0.486 n=4)
Unmarshalitem-12                354.9Mi ± ∞ ¹   355.6Mi ± ∞ ¹       ~ (p=0.886 n=4)
Encodeitem-12                   288.0Mi ± ∞ ¹   291.0Mi ± ∞ ¹       ~ (p=0.486 n=4)
Decodeitem-12                   167.5Mi ± ∞ ¹   177.7Mi ± ∞ ¹  +6.14% (p=0.029 n=4)
AppendMsgstorageManager-12      3.147Gi ± ∞ ¹   2.981Gi ± ∞ ¹  -5.27% (p=0.029 n=4)
UnmarshalstorageManager-12      354.3Mi ± ∞ ¹   354.8Mi ± ∞ ¹       ~ (p=0.686 n=4)
EncodestorageManager-12         290.0Mi ± ∞ ¹   290.2Mi ± ∞ ¹       ~ (p=1.000 n=4)
DecodestorageManager-12         176.4Mi ± ∞ ¹   177.0Mi ± ∞ ¹       ~ (p=0.686 n=4)
geomean                         488.1Mi         489.6Mi        +0.31%
¹ need >= 6 samples for confidence interval at level 0.95

pkg: github.com/gofiber/fiber/v3/middleware/encryptcookie
                                                               │ rawFiber/old.txt │      grivera64/fiber/new.txt       │
                                                               │      sec/op      │    sec/op     vs base              │
_Middleware_Encrypt_Cookie/Empty_Cookie-12                           365.2n ± ∞ ¹   358.4n ± ∞ ¹       ~ (p=0.686 n=4)
_Middleware_Encrypt_Cookie/Invalid_Cookie-12                         659.2n ± ∞ ¹   653.8n ± ∞ ¹       ~ (p=0.686 n=4)
_Middleware_Encrypt_Cookie/Valid_Cookie-12                           1.469µ ± ∞ ¹   1.487µ ± ∞ ¹       ~ (p=0.486 n=4)
_Encrypt_Cookie_Next/Encrypt_Cookie_Next-12                          454.8n ± ∞ ¹   471.5n ± ∞ ¹       ~ (p=0.114 n=4)
_Encrypt_Cookie_Except/Encrypt_Cookie_Except-12                      1.678µ ± ∞ ¹   1.724µ ± ∞ ¹       ~ (p=0.057 n=4)
_Encrypt_Cookie_Custom_Encryptor/Custom_Encryptor_Post-12            701.0n ± ∞ ¹   705.4n ± ∞ ¹       ~ (p=0.686 n=4)
_Encrypt_Cookie_Custom_Encryptor/Custom_Encryptor_Get-12             525.2n ± ∞ ¹   526.7n ± ∞ ¹       ~ (p=0.686 n=4)
_Middleware_Encrypt_Cookie_Parallel/Empty_Cookie_Parallel-12         433.1n ± ∞ ¹   426.1n ± ∞ ¹  -1.62% (p=0.029 n=4)
_Middleware_Encrypt_Cookie_Parallel/Invalid_Cookie_Parallel-12       659.8n ± ∞ ¹   649.5n ± ∞ ¹       ~ (p=0.486 n=4)
_Middleware_Encrypt_Cookie_Parallel/Valid_Cookie_Parallel-12         1.812µ ± ∞ ¹   1.818µ ± ∞ ¹       ~ (p=1.000 n=4)
_Encrypt_Cookie_Next_Parallel-12                                     562.5n ± ∞ ¹   552.4n ± ∞ ¹       ~ (p=0.343 n=4)
_Encrypt_Cookie_Except_Parallel-12                                   1.982µ ± ∞ ¹   1.972µ ± ∞ ¹       ~ (p=0.486 n=4)
_Encrypt_Cookie_Custom_Encryptor_Parallel-12                         545.8n ± ∞ ¹   531.1n ± ∞ ¹  -2.68% (p=0.029 n=4)
_GenerateKey/16-12                                                   283.0n ± ∞ ¹   279.1n ± ∞ ¹  -1.38% (p=0.029 n=4)
_GenerateKey/24-12                                                   294.4n ± ∞ ¹   292.9n ± ∞ ¹       ~ (p=0.371 n=4)
_GenerateKey/32-12                                                   298.8n ± ∞ ¹   293.6n ± ∞ ¹       ~ (p=0.143 n=4)
_GenerateKey_Parallel/16-12                                          658.7n ± ∞ ¹   658.8n ± ∞ ¹       ~ (p=0.886 n=4)
_GenerateKey_Parallel/24-12                                          680.9n ± ∞ ¹   681.5n ± ∞ ¹       ~ (p=0.886 n=4)
_GenerateKey_Parallel/32-12                                          696.7n ± ∞ ¹   675.8n ± ∞ ¹       ~ (p=0.200 n=4)
geomean                                                              645.4n         642.4n        -0.46%
¹ need >= 6 samples for confidence interval at level 0.95

                                                               │ rawFiber/old.txt │        grivera64/fiber/new.txt        │
                                                               │       B/op       │     B/op       vs base                │
_Middleware_Encrypt_Cookie/Empty_Cookie-12                          1.563Ki ± ∞ ¹   1.563Ki ± ∞ ¹       ~ (p=1.000 n=4) ²
_Middleware_Encrypt_Cookie/Invalid_Cookie-12                        1.862Ki ± ∞ ¹   1.862Ki ± ∞ ¹       ~ (p=1.000 n=4) ²
_Middleware_Encrypt_Cookie/Valid_Cookie-12                          3.691Ki ± ∞ ¹   3.691Ki ± ∞ ¹       ~ (p=1.000 n=4) ²
_Encrypt_Cookie_Next/Encrypt_Cookie_Next-12                         1.783Ki ± ∞ ¹   1.783Ki ± ∞ ¹       ~ (p=1.000 n=4) ²
_Encrypt_Cookie_Except/Encrypt_Cookie_Except-12                     3.980Ki ± ∞ ¹   3.981Ki ± ∞ ¹       ~ (p=0.429 n=4)
_Encrypt_Cookie_Custom_Encryptor/Custom_Encryptor_Post-12           1.947Ki ± ∞ ¹   1.947Ki ± ∞ ¹       ~ (p=1.000 n=4) ²
_Encrypt_Cookie_Custom_Encryptor/Custom_Encryptor_Get-12            1.721Ki ± ∞ ¹   1.721Ki ± ∞ ¹       ~ (p=1.000 n=4) ²
_Middleware_Encrypt_Cookie_Parallel/Empty_Cookie_Parallel-12        1.566Ki ± ∞ ¹   1.566Ki ± ∞ ¹       ~ (p=1.000 n=4) ²
_Middleware_Encrypt_Cookie_Parallel/Invalid_Cookie_Parallel-12      1.868Ki ± ∞ ¹   1.868Ki ± ∞ ¹       ~ (p=1.000 n=4) ²
_Middleware_Encrypt_Cookie_Parallel/Valid_Cookie_Parallel-12        3.698Ki ± ∞ ¹   3.697Ki ± ∞ ¹       ~ (p=0.486 n=4)
_Encrypt_Cookie_Next_Parallel-12                                    1.788Ki ± ∞ ¹   1.788Ki ± ∞ ¹       ~ (p=1.000 n=4) ²
_Encrypt_Cookie_Except_Parallel-12                                  3.989Ki ± ∞ ¹   3.989Ki ± ∞ ¹       ~ (p=1.000 n=4) ²
_Encrypt_Cookie_Custom_Encryptor_Parallel-12                        1.723Ki ± ∞ ¹   1.723Ki ± ∞ ¹       ~ (p=1.000 n=4) ²
_GenerateKey/16-12                                                    64.00 ± ∞ ¹     64.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_GenerateKey/24-12                                                    88.00 ± ∞ ¹     88.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_GenerateKey/32-12                                                    128.0 ± ∞ ¹     128.0 ± ∞ ¹       ~ (p=1.000 n=4) ²
_GenerateKey_Parallel/16-12                                           64.00 ± ∞ ¹     64.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_GenerateKey_Parallel/24-12                                           88.00 ± ∞ ¹     88.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_GenerateKey_Parallel/32-12                                           128.0 ± ∞ ¹     128.0 ± ∞ ¹       ~ (p=1.000 n=4) ²
geomean                                                               821.8           821.8        -0.00%
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal

                                                               │ rawFiber/old.txt │       grivera64/fiber/new.txt       │
                                                               │    allocs/op     │  allocs/op   vs base                │
_Middleware_Encrypt_Cookie/Empty_Cookie-12                            7.000 ± ∞ ¹   7.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Middleware_Encrypt_Cookie/Invalid_Cookie-12                          16.00 ± ∞ ¹   16.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Middleware_Encrypt_Cookie/Valid_Cookie-12                            27.00 ± ∞ ¹   27.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Encrypt_Cookie_Next/Encrypt_Cookie_Next-12                           10.00 ± ∞ ¹   10.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Encrypt_Cookie_Except/Encrypt_Cookie_Except-12                       31.00 ± ∞ ¹   31.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Encrypt_Cookie_Custom_Encryptor/Custom_Encryptor_Post-12             19.00 ± ∞ ¹   19.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Encrypt_Cookie_Custom_Encryptor/Custom_Encryptor_Get-12              14.00 ± ∞ ¹   14.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Middleware_Encrypt_Cookie_Parallel/Empty_Cookie_Parallel-12          7.000 ± ∞ ¹   7.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Middleware_Encrypt_Cookie_Parallel/Invalid_Cookie_Parallel-12        16.00 ± ∞ ¹   16.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Middleware_Encrypt_Cookie_Parallel/Valid_Cookie_Parallel-12          27.00 ± ∞ ¹   27.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Encrypt_Cookie_Next_Parallel-12                                      10.00 ± ∞ ¹   10.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Encrypt_Cookie_Except_Parallel-12                                    31.00 ± ∞ ¹   31.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Encrypt_Cookie_Custom_Encryptor_Parallel-12                          14.00 ± ∞ ¹   14.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_GenerateKey/16-12                                                    3.000 ± ∞ ¹   3.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_GenerateKey/24-12                                                    3.000 ± ∞ ¹   3.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_GenerateKey/32-12                                                    3.000 ± ∞ ¹   3.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_GenerateKey_Parallel/16-12                                           3.000 ± ∞ ¹   3.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_GenerateKey_Parallel/24-12                                           3.000 ± ∞ ¹   3.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_GenerateKey_Parallel/32-12                                           3.000 ± ∞ ¹   3.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
geomean                                                               9.273         9.273        +0.00%
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal

pkg: github.com/gofiber/fiber/v3/middleware/etag
         │ rawFiber/old.txt │      grivera64/fiber/new.txt       │
         │      sec/op      │    sec/op     vs base              │
_Etag-12       61.13n ± ∞ ¹   63.09n ± ∞ ¹  +3.21% (p=0.029 n=4)
¹ need >= 6 samples for confidence interval at level 0.95

         │ rawFiber/old.txt │    grivera64/fiber/new.txt     │
         │       B/op       │    B/op      vs base           │
_Etag-12        0.000 ± ∞ ¹   0.000 ± ∞ ¹  ~ (p=1.000 n=4) ²
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal

         │ rawFiber/old.txt │    grivera64/fiber/new.txt     │
         │    allocs/op     │  allocs/op   vs base           │
_Etag-12        0.000 ± ∞ ¹   0.000 ± ∞ ¹  ~ (p=1.000 n=4) ²
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal

pkg: github.com/gofiber/fiber/v3/middleware/favicon
                       │ rawFiber/old.txt │    grivera64/fiber/new.txt    │
                       │      sec/op      │    sec/op     vs base         │
_Middleware_Favicon-12       43.06n ± ∞ ¹   41.27n ± ∞ ¹  ~ (p=0.114 n=4)
¹ need >= 6 samples for confidence interval at level 0.95

                       │ rawFiber/old.txt │    grivera64/fiber/new.txt     │
                       │       B/op       │    B/op      vs base           │
_Middleware_Favicon-12        0.000 ± ∞ ¹   0.000 ± ∞ ¹  ~ (p=1.000 n=4) ²
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal

                       │ rawFiber/old.txt │    grivera64/fiber/new.txt     │
                       │    allocs/op     │  allocs/op   vs base           │
_Middleware_Favicon-12        0.000 ± ∞ ¹   0.000 ± ∞ ¹  ~ (p=1.000 n=4) ²
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal

pkg: github.com/gofiber/fiber/v3/middleware/healthcheck
                         │ rawFiber/old.txt │       grivera64/fiber/new.txt       │
                         │      sec/op      │    sec/op     vs base               │
_HealthCheck-12                41.27n ± ∞ ¹   44.20n ± ∞ ¹   +7.09% (p=0.029 n=4)
_HealthCheck_Parallel-12       5.543n ± ∞ ¹   6.544n ± ∞ ¹        ~ (p=0.486 n=4)
geomean                        15.12n         17.01n        +12.44%
¹ need >= 6 samples for confidence interval at level 0.95

                         │ rawFiber/old.txt │       grivera64/fiber/new.txt       │
                         │       B/op       │    B/op      vs base                │
_HealthCheck-12                 0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_HealthCheck_Parallel-12        0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
geomean                                   ³                +0.00%               ³
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal
³ summaries must be >0 to compute geomean

                         │ rawFiber/old.txt │       grivera64/fiber/new.txt       │
                         │    allocs/op     │  allocs/op   vs base                │
_HealthCheck-12                 0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_HealthCheck_Parallel-12        0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
geomean                                   ³                +0.00%               ³
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal
³ summaries must be >0 to compute geomean

pkg: github.com/gofiber/fiber/v3/middleware/idempotency
                                     │ rawFiber/old.txt │      grivera64/fiber/new.txt       │
                                     │      sec/op      │    sec/op     vs base              │
_Idempotency/hit-12                        312.9n ± ∞ ¹   328.6n ± ∞ ¹       ~ (p=0.200 n=4)
_Idempotency/skip-12                       64.66n ± ∞ ¹   69.27n ± ∞ ¹  +7.14% (p=0.029 n=4)
MarshalMsgresponse-12                      24.16n ± ∞ ¹   23.72n ± ∞ ¹       ~ (p=0.171 n=4)
AppendMsgresponse-12                       11.76n ± ∞ ¹   11.27n ± ∞ ¹  -4.21% (p=0.029 n=4)
Unmarshalresponse-12                       19.79n ± ∞ ¹   19.65n ± ∞ ¹  -0.73% (p=0.029 n=4)
Encoderesponse-12                          23.78n ± ∞ ¹   24.27n ± ∞ ¹  +2.04% (p=0.029 n=4)
Decoderesponse-12                          40.23n ± ∞ ¹   39.58n ± ∞ ¹  -1.64% (p=0.029 n=4)
_MemoryLock-12                             60.58n ± ∞ ¹   59.68n ± ∞ ¹       ~ (p=0.114 n=4)
_MemoryLock_Parallel/UniqueKeys-12         392.1n ± ∞ ¹   399.1n ± ∞ ¹  +1.79% (p=0.029 n=4)
_MemoryLock_Parallel/RepeatedKeys-12       399.9n ± ∞ ¹   393.6n ± ∞ ¹       ~ (p=0.343 n=4)
geomean                                    63.31n         63.56n        +0.40%
¹ need >= 6 samples for confidence interval at level 0.95

                                     │ rawFiber/old.txt │       grivera64/fiber/new.txt       │
                                     │       B/op       │    B/op      vs base                │
_Idempotency/hit-12                         528.0 ± ∞ ¹   528.0 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Idempotency/skip-12                        0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
MarshalMsgresponse-12                       32.00 ± ∞ ¹   32.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
AppendMsgresponse-12                        0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
Unmarshalresponse-12                        0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
Encoderesponse-12                           0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
Decoderesponse-12                           0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_MemoryLock-12                              16.00 ± ∞ ¹   16.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_MemoryLock_Parallel/UniqueKeys-12          16.00 ± ∞ ¹   16.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_MemoryLock_Parallel/RepeatedKeys-12        13.50 ± ∞ ¹   13.50 ± ∞ ¹       ~ (p=1.000 n=4)
geomean                                               ³                +0.00%               ³
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal
³ summaries must be >0 to compute geomean

                                     │ rawFiber/old.txt │       grivera64/fiber/new.txt       │
                                     │    allocs/op     │  allocs/op   vs base                │
_Idempotency/hit-12                         7.000 ± ∞ ¹   7.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Idempotency/skip-12                        0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
MarshalMsgresponse-12                       1.000 ± ∞ ¹   1.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
AppendMsgresponse-12                        0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
Unmarshalresponse-12                        0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
Encoderesponse-12                           0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
Decoderesponse-12                           0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_MemoryLock-12                              1.000 ± ∞ ¹   1.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_MemoryLock_Parallel/UniqueKeys-12          1.000 ± ∞ ¹   1.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_MemoryLock_Parallel/RepeatedKeys-12        0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
geomean                                               ³                +0.00%               ³
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal
³ summaries must be >0 to compute geomean

                     │ rawFiber/old.txt │       grivera64/fiber/new.txt       │
                     │       B/s        │      B/s       vs base              │
AppendMsgresponse-12      1.029Gi ± ∞ ¹   1.074Gi ± ∞ ¹  +4.37% (p=0.029 n=4)
Unmarshalresponse-12      626.3Mi ± ∞ ¹   631.0Mi ± ∞ ¹  +0.75% (p=0.029 n=4)
Encoderesponse-12         521.4Mi ± ∞ ¹   510.9Mi ± ∞ ¹  -2.00% (p=0.029 n=4)
Decoderesponse-12         308.2Mi ± ∞ ¹   313.3Mi ± ∞ ¹  +1.66% (p=0.029 n=4)
geomean                   570.7Mi         577.3Mi        +1.17%
¹ need >= 6 samples for confidence interval at level 0.95

pkg: github.com/gofiber/fiber/v3/middleware/limiter
                         │ rawFiber/old.txt │      grivera64/fiber/new.txt       │
                         │      sec/op      │    sec/op     vs base              │
MarshalMsgitem-12              19.53n ± ∞ ¹   19.32n ± ∞ ¹       ~ (p=0.343 n=4)
AppendMsgitem-12               5.537n ± ∞ ¹   5.489n ± ∞ ¹       ~ (p=0.114 n=4)
Unmarshalitem-12               17.59n ± ∞ ¹   17.57n ± ∞ ¹       ~ (p=0.886 n=4)
Encodeitem-12                  16.02n ± ∞ ¹   16.05n ± ∞ ¹       ~ (p=0.543 n=4)
Decodeitem-12                  37.73n ± ∞ ¹   37.65n ± ∞ ¹       ~ (p=0.486 n=4)
_Limiter_Custom_Store-12       202.9n ± ∞ ¹   220.3n ± ∞ ¹  +8.58% (p=0.029 n=4)
_Limiter-12                    144.5n ± ∞ ¹   157.4n ± ∞ ¹  +8.93% (p=0.029 n=4)
geomean                        31.91n         32.59n        +2.11%
¹ need >= 6 samples for confidence interval at level 0.95

                         │ rawFiber/old.txt │       grivera64/fiber/new.txt       │
                         │       B/op       │    B/op      vs base                │
MarshalMsgitem-12               64.00 ± ∞ ¹   64.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
AppendMsgitem-12                0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
Unmarshalitem-12                0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
Encodeitem-12                   0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
Decodeitem-12                   0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Limiter_Custom_Store-12        72.00 ± ∞ ¹   72.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Limiter-12                     8.000 ± ∞ ¹   8.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
geomean                                   ³                +0.00%               ³
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal
³ summaries must be >0 to compute geomean

                         │ rawFiber/old.txt │       grivera64/fiber/new.txt       │
                         │    allocs/op     │  allocs/op   vs base                │
MarshalMsgitem-12               1.000 ± ∞ ¹   1.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
AppendMsgitem-12                0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
Unmarshalitem-12                0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
Encodeitem-12                   0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
Decodeitem-12                   0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Limiter_Custom_Store-12        2.000 ± ∞ ¹   2.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Limiter-12                     1.000 ± ∞ ¹   1.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
geomean                                   ³                +0.00%               ³
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal
³ summaries must be >0 to compute geomean

                 │ rawFiber/old.txt │       grivera64/fiber/new.txt       │
                 │       B/s        │      B/s       vs base              │
AppendMsgitem-12      4.373Gi ± ∞ ¹   4.412Gi ± ∞ ¹       ~ (p=0.114 n=4)
Unmarshalitem-12      1.377Gi ± ∞ ¹   1.378Gi ± ∞ ¹       ~ (p=0.886 n=4)
Encodeitem-12         1.511Gi ± ∞ ¹   1.508Gi ± ∞ ¹       ~ (p=0.486 n=4)
Decodeitem-12         657.1Mi ± ∞ ¹   658.7Mi ± ∞ ¹       ~ (p=0.486 n=4)
geomean               1.555Gi         1.558Gi        +0.26%
¹ need >= 6 samples for confidence interval at level 0.95

pkg: github.com/gofiber/fiber/v3/middleware/logger
                                               │ rawFiber/old.txt │      grivera64/fiber/new.txt       │
                                               │      sec/op      │    sec/op     vs base              │
_Logger/NoMiddleware-12                              36.17n ± ∞ ¹   36.89n ± ∞ ¹       ~ (p=0.343 n=4)
_Logger/WithBytesAndStatus-12                        180.3n ± ∞ ¹   179.6n ± ∞ ¹       ~ (p=0.486 n=4)
_Logger/DefaultFormat-12                             263.7n ± ∞ ¹   272.2n ± ∞ ¹  +3.24% (p=0.029 n=4)
_Logger/DefaultFormatDisableColors-12                262.4n ± ∞ ¹   270.9n ± ∞ ¹  +3.28% (p=0.029 n=4)
_Logger/DefaultFormatForceColors-12                  659.8n ± ∞ ¹   670.0n ± ∞ ¹       ~ (p=0.114 n=4)
_Logger/DefaultFormatWithFiberLog-12                 380.9n ± ∞ ¹   384.8n ± ∞ ¹       ~ (p=0.343 n=4)
_Logger/WithTagParameter-12                          210.0n ± ∞ ¹   206.2n ± ∞ ¹       ~ (p=0.343 n=4)
_Logger/WithLocals-12                                136.4n ± ∞ ¹   137.8n ± ∞ ¹       ~ (p=0.571 n=4)
_Logger/WithLocalsInt-12                             178.5n ± ∞ ¹   179.2n ± ∞ ¹       ~ (p=0.886 n=4)
_Logger/WithCustomDone-12                            256.3n ± ∞ ¹   272.5n ± ∞ ¹  +6.28% (p=0.029 n=4)
_Logger/WithAllTags-12                               720.4n ± ∞ ¹   769.4n ± ∞ ¹       ~ (p=0.114 n=4)
_Logger/Streaming-12                                 1.260µ ± ∞ ¹   1.281µ ± ∞ ¹       ~ (p=0.114 n=4)
_Logger/WithBody-12                                  101.3n ± ∞ ¹   102.4n ± ∞ ¹       ~ (p=0.314 n=4)
_Logger_Parallel/NoMiddleware-12                     6.457n ± ∞ ¹   5.829n ± ∞ ¹       ~ (p=0.343 n=4)
_Logger_Parallel/WithBytesAndStatus-12               84.75n ± ∞ ¹   82.97n ± ∞ ¹  -2.09% (p=0.029 n=4)
_Logger_Parallel/DefaultFormat-12                    95.70n ± ∞ ¹   96.12n ± ∞ ¹       ~ (p=0.886 n=4)
_Logger_Parallel/DefaultFormatWithFiberLog-12        237.2n ± ∞ ¹   235.9n ± ∞ ¹       ~ (p=1.000 n=4)
_Logger_Parallel/DefaultFormatDisableColors-12       95.50n ± ∞ ¹   95.32n ± ∞ ¹       ~ (p=0.686 n=4)
_Logger_Parallel/DefaultFormatForceColors-12         245.1n ± ∞ ¹   246.0n ± ∞ ¹       ~ (p=0.886 n=4)
_Logger_Parallel/WithTagParameter-12                 84.23n ± ∞ ¹   84.81n ± ∞ ¹       ~ (p=0.686 n=4)
_Logger_Parallel/WithLocals-12                       93.58n ± ∞ ¹   90.94n ± ∞ ¹       ~ (p=0.343 n=4)
_Logger_Parallel/WithLocalsInt-12                    97.22n ± ∞ ¹   99.31n ± ∞ ¹       ~ (p=0.114 n=4)
_Logger_Parallel/WithCustomDone-12                   93.90n ± ∞ ¹   96.38n ± ∞ ¹       ~ (p=0.200 n=4)
_Logger_Parallel/WithAllTags-12                      161.2n ± ∞ ¹   170.9n ± ∞ ¹       ~ (p=0.114 n=4)
_Logger_Parallel/Streaming-12                        683.6n ± ∞ ¹   685.5n ± ∞ ¹       ~ (p=0.686 n=4)
_Logger_Parallel/WithBody-12                         77.13n ± ∞ ¹   75.32n ± ∞ ¹  -2.35% (p=0.029 n=4)
geomean                                              161.1n         162.3n        +0.75%
¹ need >= 6 samples for confidence interval at level 0.95

                                               │ rawFiber/old.txt │        grivera64/fiber/new.txt        │
                                               │       B/op       │     B/op       vs base                │
_Logger/NoMiddleware-12                               0.000 ± ∞ ¹     0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger/WithBytesAndStatus-12                         0.000 ± ∞ ¹     0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger/DefaultFormat-12                              16.00 ± ∞ ¹     16.00 ± ∞ ¹       ~ (p=1.000 n=4)
_Logger/DefaultFormatDisableColors-12                 16.00 ± ∞ ¹     16.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger/DefaultFormatForceColors-12                   304.0 ± ∞ ¹     304.0 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger/DefaultFormatWithFiberLog-12                  224.0 ± ∞ ¹     224.0 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger/WithTagParameter-12                           0.000 ± ∞ ¹     0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger/WithLocals-12                                 32.00 ± ∞ ¹     32.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger/WithLocalsInt-12                              34.00 ± ∞ ¹     34.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger/WithCustomDone-12                             16.00 ± ∞ ¹     16.00 ± ∞ ¹       ~ (p=1.000 n=4)
_Logger/WithAllTags-12                                88.00 ± ∞ ¹     88.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger/Streaming-12                                1.036Ki ± ∞ ¹   1.038Ki ± ∞ ¹       ~ (p=0.400 n=4)
_Logger/WithBody-12                                   0.000 ± ∞ ¹     0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger_Parallel/NoMiddleware-12                      0.000 ± ∞ ¹     0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger_Parallel/WithBytesAndStatus-12                0.000 ± ∞ ¹     0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger_Parallel/DefaultFormat-12                     16.00 ± ∞ ¹     16.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger_Parallel/DefaultFormatWithFiberLog-12         225.0 ± ∞ ¹     225.0 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger_Parallel/DefaultFormatDisableColors-12        16.00 ± ∞ ¹     16.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger_Parallel/DefaultFormatForceColors-12          305.0 ± ∞ ¹     305.0 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger_Parallel/WithTagParameter-12                  0.000 ± ∞ ¹     0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger_Parallel/WithLocals-12                        32.00 ± ∞ ¹     32.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger_Parallel/WithLocalsInt-12                     34.00 ± ∞ ¹     34.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger_Parallel/WithCustomDone-12                    16.00 ± ∞ ¹     16.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger_Parallel/WithAllTags-12                       88.00 ± ∞ ¹     88.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger_Parallel/Streaming-12                       1.071Ki ± ∞ ¹   1.075Ki ± ∞ ¹       ~ (p=0.686 n=4)
_Logger_Parallel/WithBody-12                          0.000 ± ∞ ¹     0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
geomean                                                         ³                  +0.02%               ³
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal
³ summaries must be >0 to compute geomean

                                               │ rawFiber/old.txt │       grivera64/fiber/new.txt       │
                                               │    allocs/op     │  allocs/op   vs base                │
_Logger/NoMiddleware-12                               0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger/WithBytesAndStatus-12                         0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger/DefaultFormat-12                              2.000 ± ∞ ¹   2.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger/DefaultFormatDisableColors-12                 2.000 ± ∞ ¹   2.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger/DefaultFormatForceColors-12                   12.00 ± ∞ ¹   12.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger/DefaultFormatWithFiberLog-12                  6.000 ± ∞ ¹   6.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger/WithTagParameter-12                           0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger/WithLocals-12                                 2.000 ± ∞ ¹   2.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger/WithLocalsInt-12                              3.000 ± ∞ ¹   3.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger/WithCustomDone-12                             2.000 ± ∞ ¹   2.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger/WithAllTags-12                                4.000 ± ∞ ¹   4.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger/Streaming-12                                  13.00 ± ∞ ¹   13.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger/WithBody-12                                   0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger_Parallel/NoMiddleware-12                      0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger_Parallel/WithBytesAndStatus-12                0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger_Parallel/DefaultFormat-12                     2.000 ± ∞ ¹   2.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger_Parallel/DefaultFormatWithFiberLog-12         6.000 ± ∞ ¹   6.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger_Parallel/DefaultFormatDisableColors-12        2.000 ± ∞ ¹   2.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger_Parallel/DefaultFormatForceColors-12          12.00 ± ∞ ¹   12.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger_Parallel/WithTagParameter-12                  0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger_Parallel/WithLocals-12                        2.000 ± ∞ ¹   2.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger_Parallel/WithLocalsInt-12                     3.000 ± ∞ ¹   3.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger_Parallel/WithCustomDone-12                    2.000 ± ∞ ¹   2.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger_Parallel/WithAllTags-12                       4.000 ± ∞ ¹   4.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Logger_Parallel/Streaming-12                         13.00 ± ∞ ¹   13.00 ± ∞ ¹       ~ (p=1.000 n=4)
_Logger_Parallel/WithBody-12                          0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
geomean                                                         ³                +0.00%               ³
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal
³ summaries must be >0 to compute geomean

pkg: github.com/gofiber/fiber/v3/middleware/rewrite
                                              │ rawFiber/old.txt │      grivera64/fiber/new.txt       │
                                              │      sec/op      │    sec/op     vs base              │
_Rewrite/Next_always_true-12                        299.1n ± ∞ ¹   304.0n ± ∞ ¹       ~ (p=0.200 n=4)
_Rewrite/Next_always_false-12                       372.7n ± ∞ ¹   386.2n ± ∞ ¹       ~ (p=0.343 n=4)
_Rewrite/Rewrite_with_tokens-12                     419.7n ± ∞ ¹   449.4n ± ∞ ¹       ~ (p=0.057 n=4)
_Rewrite/NonMatch_with_default-12                   149.7n ± ∞ ¹   163.8n ± ∞ ¹  +9.46% (p=0.029 n=4)
_Rewrite/NonMatch_without_default-12                408.6n ± ∞ ¹   425.4n ± ∞ ¹  +4.10% (p=0.029 n=4)
_Rewrite_Parallel/Next_always_true-12               216.7n ± ∞ ¹   220.7n ± ∞ ¹       ~ (p=0.400 n=4)
_Rewrite_Parallel/Next_always_false-12              228.4n ± ∞ ¹   236.2n ± ∞ ¹       ~ (p=0.057 n=4)
_Rewrite_Parallel/Rewrite_with_tokens-12            236.9n ± ∞ ¹   243.7n ± ∞ ¹  +2.87% (p=0.029 n=4)
_Rewrite_Parallel/NonMatch_with_default-12          175.2n ± ∞ ¹   174.1n ± ∞ ¹       ~ (p=0.886 n=4)
_Rewrite_Parallel/NonMatch_without_default-12       244.3n ± ∞ ¹   248.8n ± ∞ ¹       ~ (p=0.200 n=4)
geomean                                             260.4n         269.5n        +3.48%
¹ need >= 6 samples for confidence interval at level 0.95

                                              │ rawFiber/old.txt │       grivera64/fiber/new.txt       │
                                              │       B/op       │    B/op      vs base                │
_Rewrite/Next_always_true-12                         64.00 ± ∞ ¹   64.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Rewrite/Next_always_false-12                        64.00 ± ∞ ¹   64.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Rewrite/Rewrite_with_tokens-12                      80.50 ± ∞ ¹   81.00 ± ∞ ¹       ~ (p=0.429 n=4)
_Rewrite/NonMatch_with_default-12                    16.00 ± ∞ ¹   16.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Rewrite/NonMatch_without_default-12                 97.00 ± ∞ ¹   97.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Rewrite_Parallel/Next_always_true-12                48.00 ± ∞ ¹   48.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Rewrite_Parallel/Next_always_false-12               49.00 ± ∞ ¹   49.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Rewrite_Parallel/Rewrite_with_tokens-12             67.00 ± ∞ ¹   67.00 ± ∞ ¹       ~ (p=1.000 n=4)
_Rewrite_Parallel/NonMatch_with_default-12           0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Rewrite_Parallel/NonMatch_without_default-12        83.00 ± ∞ ¹   82.00 ± ∞ ¹       ~ (p=0.143 n=4)
geomean                                                        ³                -0.06%               ³
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal
³ summaries must be >0 to compute geomean

                                              │ rawFiber/old.txt │       grivera64/fiber/new.txt       │
                                              │    allocs/op     │  allocs/op   vs base                │
_Rewrite/Next_always_true-12                         4.000 ± ∞ ¹   4.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Rewrite/Next_always_false-12                        4.000 ± ∞ ¹   4.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Rewrite/Rewrite_with_tokens-12                      4.000 ± ∞ ¹   4.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Rewrite/NonMatch_with_default-12                    1.000 ± ∞ ¹   1.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Rewrite/NonMatch_without_default-12                 4.000 ± ∞ ¹   4.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Rewrite_Parallel/Next_always_true-12                3.000 ± ∞ ¹   3.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Rewrite_Parallel/Next_always_false-12               3.000 ± ∞ ¹   3.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Rewrite_Parallel/Rewrite_with_tokens-12             3.000 ± ∞ ¹   3.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Rewrite_Parallel/NonMatch_with_default-12           0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Rewrite_Parallel/NonMatch_without_default-12        3.000 ± ∞ ¹   3.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
geomean                                                        ³                +0.00%               ³
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal
³ summaries must be >0 to compute geomean

pkg: github.com/gofiber/fiber/v3/middleware/session
                                      │ rawFiber/old.txt │       grivera64/fiber/new.txt        │
                                      │      sec/op      │    sec/op      vs base               │
MarshalMsgdata-12                           6.807n ± ∞ ¹    6.993n ± ∞ ¹   +2.73% (p=0.029 n=4)
AppendMsgdata-12                           0.2980n ± ∞ ¹   0.3042n ± ∞ ¹   +2.08% (p=0.029 n=4)
Unmarshaldata-12                            2.670n ± ∞ ¹    2.724n ± ∞ ¹   +2.02% (p=0.029 n=4)
Encodedata-12                               3.273n ± ∞ ¹    3.340n ± ∞ ¹   +2.05% (p=0.029 n=4)
Decodedata-12                               5.364n ± ∞ ¹    5.494n ± ∞ ¹        ~ (p=0.057 n=4)
_Session/default-12                         9.345µ ± ∞ ¹    9.786µ ± ∞ ¹        ~ (p=0.057 n=4)
_Session/storage-12                         9.406µ ± ∞ ¹    9.653µ ± ∞ ¹        ~ (p=0.343 n=4)
_Session_Parallel/default-12                2.258µ ± ∞ ¹    2.487µ ± ∞ ¹  +10.17% (p=0.029 n=4)
_Session_Parallel/storage-12                2.204µ ± ∞ ¹    2.417µ ± ∞ ¹   +9.67% (p=0.029 n=4)
_Session_Asserted/default-12                10.37µ ± ∞ ¹    10.38µ ± ∞ ¹        ~ (p=0.886 n=4)
_Session_Asserted/storage-12                10.14µ ± ∞ ¹    10.39µ ± ∞ ¹        ~ (p=0.114 n=4)
_Session_Asserted_Parallel/default-12       2.397µ ± ∞ ¹    2.650µ ± ∞ ¹  +10.58% (p=0.029 n=4)
_Session_Asserted_Parallel/storage-12       2.437µ ± ∞ ¹    2.657µ ± ∞ ¹   +9.03% (p=0.029 n=4)
geomean                                     260.6n          272.6n         +4.61%
¹ need >= 6 samples for confidence interval at level 0.95

                                      │ rawFiber/old.txt │        grivera64/fiber/new.txt        │
                                      │       B/op       │     B/op       vs base                │
MarshalMsgdata-12                            1.000 ± ∞ ¹     1.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
AppendMsgdata-12                             0.000 ± ∞ ¹     0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
Unmarshaldata-12                             0.000 ± ∞ ¹     0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
Encodedata-12                                0.000 ± ∞ ¹     0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
Decodedata-12                                0.000 ± ∞ ¹     0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Session/default-12                        8.873Ki ± ∞ ¹   8.872Ki ± ∞ ¹       ~ (p=1.000 n=4)
_Session/storage-12                        8.873Ki ± ∞ ¹   8.873Ki ± ∞ ¹       ~ (p=1.000 n=4)
_Session_Parallel/default-12               3.643Ki ± ∞ ¹   3.648Ki ± ∞ ¹       ~ (p=0.743 n=4)
_Session_Parallel/storage-12               3.637Ki ± ∞ ¹   3.664Ki ± ∞ ¹  +0.74% (p=0.029 n=4)
_Session_Asserted/default-12               8.852Ki ± ∞ ¹   8.852Ki ± ∞ ¹       ~ (p=1.000 n=4) ²
_Session_Asserted/storage-12               8.852Ki ± ∞ ¹   8.852Ki ± ∞ ¹       ~ (p=1.000 n=4) ²
_Session_Asserted_Parallel/default-12      3.664Ki ± ∞ ¹   3.677Ki ± ∞ ¹  +0.37% (p=0.029 n=4)
_Session_Asserted_Parallel/storage-12      3.663Ki ± ∞ ¹   3.688Ki ± ∞ ¹       ~ (p=0.343 n=4)
geomean                                                ³                  +0.15%               ³
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal
³ summaries must be >0 to compute geomean

                                      │ rawFiber/old.txt │       grivera64/fiber/new.txt       │
                                      │    allocs/op     │  allocs/op   vs base                │
MarshalMsgdata-12                            1.000 ± ∞ ¹   1.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
AppendMsgdata-12                             0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
Unmarshaldata-12                             0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
Encodedata-12                                0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
Decodedata-12                                0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Session/default-12                          191.0 ± ∞ ¹   191.0 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Session/storage-12                          191.0 ± ∞ ¹   191.0 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Session_Parallel/default-12                 37.00 ± ∞ ¹   37.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Session_Parallel/storage-12                 37.00 ± ∞ ¹   37.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Session_Asserted/default-12                 190.0 ± ∞ ¹   190.0 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Session_Asserted/storage-12                 190.0 ± ∞ ¹   190.0 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Session_Asserted_Parallel/default-12        37.00 ± ∞ ¹   37.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
_Session_Asserted_Parallel/storage-12        37.00 ± ∞ ¹   37.00 ± ∞ ¹       ~ (p=1.000 n=4) ²
geomean                                                ³                +0.00%               ³
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal
³ summaries must be >0 to compute geomean

                 │ rawFiber/old.txt │       grivera64/fiber/new.txt       │
                 │       B/s        │      B/s       vs base              │
AppendMsgdata-12      3.126Gi ± ∞ ¹   3.062Gi ± ∞ ¹  -2.05% (p=0.029 n=4)
Unmarshaldata-12      357.2Mi ± ∞ ¹   350.1Mi ± ∞ ¹  -2.00% (p=0.029 n=4)
Encodedata-12         291.4Mi ± ∞ ¹   285.5Mi ± ∞ ¹  -2.01% (p=0.029 n=4)
Decodedata-12         177.8Mi ± ∞ ¹   173.6Mi ± ∞ ¹       ~ (p=0.057 n=4)
geomean               493.3Mi         482.9Mi        -2.11%
¹ need >= 6 samples for confidence interval at level 0.95

pkg: github.com/gofiber/fiber/v3/middleware/static
                                          │ rawFiber/old.txt │      grivera64/fiber/new.txt       │
                                          │      sec/op      │    sec/op     vs base              │
_SanitizePath/nilFS_-_urlencoded_chars-12       206.2n ± ∞ ¹   208.7n ± ∞ ¹       ~ (p=0.429 n=4)
_SanitizePath/dirFS_-_urlencoded_chars-12       246.1n ± ∞ ¹   250.1n ± ∞ ¹       ~ (p=0.200 n=4)
_SanitizePath/nilFS_-_slashes-12                220.3n ± ∞ ¹   225.2n ± ∞ ¹  +2.27% (p=0.029 n=4)
geomean                                         223.6n         227.4n        +1.69%
¹ need >= 6 samples for confidence interval at level 0.95

                                          │ rawFiber/old.txt │       grivera64/fiber/new.txt       │
                                          │       B/op       │    B/op      vs base                │
_SanitizePath/nilFS_-_urlencoded_chars-12        120.0 ± ∞ ¹   120.0 ± ∞ ¹       ~ (p=1.000 n=4) ²
_SanitizePath/dirFS_-_urlencoded_chars-12        144.0 ± ∞ ¹   144.0 ± ∞ ¹       ~ (p=1.000 n=4) ²
_SanitizePath/nilFS_-_slashes-12                 160.0 ± ∞ ¹   160.0 ± ∞ ¹       ~ (p=1.000 n=4) ²
geomean                                          140.4         140.4        +0.00%
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal

                                          │ rawFiber/old.txt │       grivera64/fiber/new.txt       │
                                          │    allocs/op     │  allocs/op   vs base                │
_SanitizePath/nilFS_-_urlencoded_chars-12        4.000 ± ∞ ¹   4.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_SanitizePath/dirFS_-_urlencoded_chars-12        5.000 ± ∞ ¹   5.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
_SanitizePath/nilFS_-_slashes-12                 5.000 ± ∞ ¹   5.000 ± ∞ ¹       ~ (p=1.000 n=4) ²
geomean                                          4.642         4.642        +0.00%
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal

@ReneWerner87
Copy link
Member

@grivera64 can you check some of these numbers
@ksw2000 Perhaps you can help to further improve performance.

@ReneWerner87
Copy link
Member

image image

@ReneWerner87
Copy link
Member

image

@ReneWerner87
Copy link
Member

benchstat.txt

@ReneWerner87
Copy link
Member

old:
image

new:
image

new allocations

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

📝 [Proposal]: Refactor Koa-Style Req and Res structs into interfaces

4 participants