<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          開源的 Web 框架哪個快?我在 GitHub 找到了答案

          共 3580字,需瀏覽 8分鐘

           ·

          2021-09-09 04:26

          159708a2a97cc637a4a394ce18901a28.webp

          在開源這片自由的土地上,孕育了太多開源 Web 框架。我在 GitHub 上搜了一下“web framework”關(guān)鍵字顯示有 56000+ 匹配的開源項目,它們百花齊放各有特色,覆蓋多種語言。

          6c7eeaef1f1f63b0eacd2a76a3b1b11d.webp

          相信做過 Web 開發(fā)的程序員,都能說出好幾個 Web 框架,如數(shù)家珍般地說出它們的好。比如我用過的 Python Web 框架有:Django、Tornado、Flask、FastAPI。這些 Web 框架各有特色:

          • Django 的大而全
          • Flask 的微小上手快
          • 專門開發(fā)接口的 FastAPI

          不同的 Web 框架,在應(yīng)對不同場景和需求時各有千秋,所以很難片面的說那個 Web 框架就是最好的,但如果單從速度方面比較的話,還是可以比出個高低的! 今天介紹的開源項目,就試圖找出最快的開源 Web 框架

          項目地址:https://github.com/the-benchmarker/web-frameworks

          介紹

          web-frameworks 定時發(fā)布多種開源 Web 框架性能測試報告的項目,告訴你誰是最快的 Web 框架!

          fb85800b7814f9012134c75b26c2eca2.webp

          它采用 Ruby 語言編寫,首先通過 Docker 啟動待壓測的 Web 框架,啟動后通過 wrk 壓測服務(wù),最后把測試報告發(fā)布到網(wǎng)站上,結(jié)果支持搜索和排序功能,整個過程完全自動化。

          具體的測試參數(shù)和機器配置:

          wrk:HTTP 基準測試工具,支持壓測和輸出測試報告。

          wrk 的相關(guān)參數(shù):8 線程(-t),壓 15 秒(-d),分別采用并發(fā)(-c) 64、256、512 模式壓測了三次。我在本機用 wrk 對掘金網(wǎng)站做了壓測,用來講解報告的相關(guān)數(shù)據(jù)。

          命令:wrk -t8 -d15s -c64 --latency https://juejin.cn

          結(jié)果及名詞解釋:

          fa5c8accc30c5b42cd02d7125beacc6b.webp

          機器配置

          • CPU: 8 Cores (AMD FX-8320E Eight-Core Processor)
          • RAM: 16 GB
          • OS: Linux

          項目中涉及的所有測試,用的都是相同配置的機器,相關(guān)的所有代碼均已開源。盡可能公平公正,完全透明。測試結(jié)果還會隨著 Web 框架的版本迭代而更新,

          下面來看看 web-frameworks 最新一期的測試報告。

          最快的框架

          web-frameworks?測出來的平均延遲,從低到高排序:1684f7f20542042d48793da02d47627a.webp

          1、nickel

          Star 數(shù):2.9k|語言:Rust

          https://github.com/nickel-org/nickel.rs

          一個受 Express.js 啟發(fā)的 Rust Web 框架。示例代碼:

          #[macro_use]?extern?crate?nickel;

          use?nickel::{Nickel,?HttpRouter};

          fn?main()?{
          ????let?mut?server?=?Nickel::new();
          ????server.get("**",?middleware!("Hello?World"));
          ????server.listen("127.0.0.1:6767");
          }

          2、iron

          Star 數(shù):5.9k|語言:Rust

          https://github.com/iron/iron

          示例代碼:

          extern?crate?iron;
          extern?crate?time;

          use?iron::prelude::*;
          use?iron::{typemap,?AfterMiddleware,?BeforeMiddleware};
          use?time::precise_time_ns;

          struct?ResponseTime;

          impl?typemap::Key?for?ResponseTime?{?type?Value?=?u64;?}

          impl?BeforeMiddleware?for?ResponseTime?{
          ????fn?before(&self,?req:?&mut?Request)?->?IronResult<()>?{
          ????????req.extensions.insert::<ResponseTime>(precise_time_ns());
          ????????Ok(())
          ????}
          }

          impl?AfterMiddleware?for?ResponseTime?{
          ????fn?after(&self,?req:?&mut?Request,?res:?Response)?->?IronResult<Response>?{
          ????????let?delta?=?precise_time_ns()?-?*req.extensions.get::<ResponseTime>().unwrap();
          ????????println!("Request?took:?{}?ms",?(delta?as?f64)?/?1000000.0);
          ????????Ok(res)
          ????}
          }

          fn?hello_world(_:?&mut?Request)?->?IronResult<Response>?{
          ????Ok(Response::with((iron::StatusCode::OK,?"Hello?World")))
          }

          fn?main()?{
          ????let?mut?chain?=?Chain::new(hello_world);
          ????chain.link_before(ResponseTime);
          ????chain.link_after(ResponseTime);
          ????Iron::new(chain).http("localhost:3000");
          }

          由于篇幅問題,這里僅介紹報告中前 2 名的框架。

          最能扛的框架

          web-frameworks 測出來的平均每秒處理請求數(shù),從高到低排序:a3ef8773bdbed2b0fef4469bd5192fc1.webp

          1、activej

          Star 數(shù):286|語言:Java

          https://github.com/activej/activej

          適用于 Web、高負載和微服務(wù)的 Java 框架。示例代碼:

          class?Main?extends?HttpServerLauncher?{
          ??@Provides
          ??AsyncServlet?servlet()?{
          ????return?request?->?HttpResponse.ok200()
          ??????.withPlainText("Hello?World");
          ??}
          ??
          ??public?static?void?main(String[]?args)?throws?Exception?{
          ????Launcher?launcher?=?new?HttpHelloWorldExample();
          ????launcher.launch(args);
          ??}
          }
          7913489f6daaa05a107dc167aeba987f.webp

          2、httpbeast

          Star 數(shù):239|語言:Nim

          https://github.com/dom96/httpbeast

          示例代碼:

          import options, asyncdispatch

          import httpbeast

          proc onRequest(req: Request): Future[void] =
          if req.httpMethod == some(HttpGet):
          case req.path.get()
          of "/":
          req.send("Hello World")
          else:
          req.send(Http404)

          run(onRequest)

          由于篇幅問題,這里僅介紹報告中前 2 名的框架。

          感受

          看完這份 Web 框架測試報告,我發(fā)現(xiàn) Rust 寫的 Web 框架在不同的性能指標的測試結(jié)果中都名列前茅,看來 Rust 在性能方面真的是名不虛傳。

          當然性能不是評判一個 Web 框架的唯一標準,今天寫這個項目也是希望可以給大家在選擇 Web 的時候提供一個參考。而且報告中有冷門但具有特點的 Web 框架,可作為玩具項目玩一玩,如果哪天突然火起來的時候,你可能已經(jīng)搶占先機、輕車熟路了。

          最后,web-frameworks 的測試結(jié)果共包含 237 個 Web 框架,雖然不多但是這個數(shù)字還在不斷增加...而且 issues 里還有很多 Web 框架申請“出戰(zhàn)”,開源社區(qū)的力量正在讓這個項目越來越好,看到這里我就放心了。

          以上就是本文的全部內(nèi)容,希望通過這個開源項目可以讓你找到最快、最能扛的 Web 框架,性能上快人一步。

          因為篇幅有限這里僅做了部分指標的介紹,還有更多指標和分類的報告,可點擊閱讀原文」查看。

          - END -

          ?? 關(guān)注「HelloGitHub」第一時間收到更新??

          瀏覽 59
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  白丝美女自慰网站 | 手机A V在线 | 夜夜爽夜夜干天天摸天天干 | 五月丁香伊人少妇激情网 | 亚洲亚洲天堂天堂天堂 |