国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

使用 Rust 加速前端 Log Service

新聞 前端
前陣子在公司內搭建了一個 Log Service,用來記錄前端的報錯信息,代碼一頓亂寫搞的七七八八之后實現了第一版的功能。

Intro

前陣子在公司內搭建了一個 Log Service,用來記錄前端的報錯信息,代碼一頓亂寫搞的七七八八之后實現了***版的功能。

流程很簡單,前端將以下格式的信息用 get 發到 Log Service:

{
  "url": "https://www.arkie.cn/scenarios",
  "channel": "frontend",
  "level": "FATAL",
  "crashId": "02x32f3",
  "stack": "base64 string ......",
  ...
}

Log Service 接受到這個請求以后,將 Stack 解析成 JSON : JSON.parse(decodeURIComponent(Buffer.from(query.stack, 'base64').toString())) , 解析后的 stack 是這樣的 :

[
  { "filename": "https://arkie-public.oss-cn-hangzhou.aliyuncs.com/js/main.c3600f3f.js", line: 1, column: 334222 },
  { "filename": "https://arkie-public.oss-cn-hangzhou.aliyuncs.com/js/common.752d2f13.js", line: 1, column: 113242 },
]

然后 Log service 會根據文件對應的 sourcemap (前端各項目 deploy 的時候已經上傳到私有 CDN 了) 解析出原始報錯位置。比如:

{
  filename: './src/modules/design/design.container.tsx',
  line: 102
}

***會將這些處理后的信息輸出到阿里云的 LogHub。

優化

做完***個脆弱的版本后發現時間僅僅過去了一天半,所以開始考慮優化的事情了。

***個版本有兩個問題,***個問題是在后端處理 log 的流程太長導致性能消耗有點大,第二個問題是實時處理 Log 在后面用戶增多之后服務器會不堪重負,而其實 Log Service 的實時性要求并沒有那么高。

對于***個問題,可以優化代碼性能(能優化才怪),分拆步驟(這個靠譜)來解決,第二個問題也可以通過分拆數據處理步驟來解決。

而分拆處理步驟這個解決方案可以通過在 Log Service 中加入一個 queue 來解決。比如接受到前端請求后,直接將原始數據塞到 queue 中,然后有一個 consumer 按一個***速率從 queue 中取出原始日志,處理之后再放入 LogHub,這一部分的細節就不贅述了,要寫的話展開又是一個長篇大論。

而優化性能這方面,我本來沒有抱什么希望,因為實在是看不出有啥可優化的。 base64 decode --> JSON.parse --> sourcemap parse 都用的是***層的標準庫調用( sourcemap parse 用的是 Mozilla 出品的 https://github.com/mozilla/source-map )

然而在上線的前夕,我突然想起了前不久學習 Rust 的時候看到的一個庫 neon-bindings

Rust!Rust!

是不是可以用更快的語言來優化 Sourcemap 處理的過程呢,同時大部分主要的繁瑣的業務還是使用 TypeScript 編寫。

調研了一圈發現,已經有國內的公司在項目里面用 neon 寫業務了: https://www.zhihu.com/question/19903210/answer/207779913

并且大家熟悉的 sentry 在生產環境中也是使用 Rust 來 parse Sourcemap https://segmentfault.com/a/1190000007299177,雖然他們是 binding 到了 python 上,但他們已經把 Rust 代碼開源出來了: https://github.com/getsentry/rust-sourcemap

也就是說我只需要把這部分的 Rust 代碼通過 neon-bindgs 封裝成 NodeJS 可調用的模塊就行了,不像 sentry 還要 port 出 C API 再通過 python 調用 C 的代碼,美滋滋。

寫代碼的過程和原理就省略了,代碼可以在: https://github.com/Brooooooklyn/sourcemap-decoder 看到,主要分享一些數據和踩的坑:

Benchmark

所以 Rust 比 JavaScript 代碼在處理同樣的 Sourcemap 時 parse 快多少呢?

我做了一個簡單的 benchmark, 測試結果如下:

$ node benchmark

JavaScript parse time 50794 microseconds

Rust parse time: 39 microseconds

JavaScript parse result, Source: webpack:///src/utils/logger/logger.ts, Line: 56

Rust parse result, Source: webpack:///./src/utils/logger/logger.ts, Line: 56

:sparkles:  Done in 0.33s.

Hardware Info:

ProductName:    Mac OS X
ProductVersion: 10.13.3
BuildVersion:   17D47
Model Name: MacBook Pro
Model Identifier: MacBookPro14,2
Processor Name: Intel Core i5
Processor Speed: 3.1 GHz
Number of Processors: 1
Total Number of Cores: 2
L2 Cache (per Core): 256 KB
L3 Cache: 4 MB
Memory: 16 GB

Benchmark 代碼: https://github.com/Brooooooklyn/sourcemap-decoder/blob/master/benchmark/index.js

因為每次調用 Rust 的代碼會有一次 bootstrap 的過程以及 JavaScript 代碼在運行很多次后會被 JIT 優化,在一次性運行幾萬次的情況下差距可能縮小為十幾倍,有興趣大家可以自行嘗試。

CI/CD

剛寫完打算上線的時候,想讓 production 的鏡像盡量小一點(我們用的 Docker),所以直接在 Production 的 Image 上用了 node:8-alpine 作為 base image,相應的,CI 的鏡像(我們使用的是 Gitlab runner 的 Docker executor )也是用同樣的 base image,然后花了三個多小時嘗試在 Alpine 上安裝 latest rust toolchains 后失敗了,***不得不忍受 100 多 m 的體積差切換到了 node:8-slim。最終的國內可以流暢 build 的 Dockerfile 在 https://github.com/Brooooooklyn/sourcemap-decoder/blob/master/Dockerfile

Toolschains 安裝

由于眾所周知的原因,CI 在剛開始 build image 的時候異常的緩慢,直到超時被 Gitlab kill 掉,經過一個多小時頑強的抵抗后將所有可能撞墻的步驟全部替換成了 USTC 的 mirror。

主要是 dev 機器 rustup 安裝需要:

curl https://sh.rustup.rs -sSf | sed "s/https:\/\/static.rust-lang.org\/rustup\/dist/https:\/\/mirrors.ustc.edu.cn\/rust-static\/rustup\/dist/g" | sh

使用 USTC 的源安裝 Rustup

build 前需要:

cat > $HOME/.cargo/config << EOF
[source.crates-io]
registry = "https://github.com/rust-lang/crates.io-index"
replace-with = 'ustc'
[source.ustc]
registry = "git://mirrors.ustc.edu.cn/crates.io-index"
EOF

讓 Cargo 也是用 UTSC 的源(CI 環境也需要執行同樣的命令)

在 CI 的 Docker Image build 的時候需要 替換 Rust 下載源 以及 替換 Rustup源

詳情請參考 README

責任編輯:張燕妮 來源: 前端外刊評論
相關推薦

2021-07-16 10:32:33

前端元編程代碼

2024-05-22 10:03:59

2023-10-27 10:16:17

前端項目Rust

2020-09-01 12:23:01

CDN加速前端

2024-02-28 08:38:07

Rust前端效率

2024-09-30 09:25:29

2023-06-15 17:00:11

Rust循環

2015-04-20 10:06:37

PHP Rust 創建PHP 擴展

2024-03-12 08:22:50

TypeScriptRust框架

2020-10-21 14:54:02

RustGolang開發

2024-05-23 08:12:45

Rust前端開發JavaScrip

2023-05-26 17:21:15

PythonRust

2024-09-06 11:34:15

RustAI語言

2023-05-04 07:33:39

Rust變量常量

2024-04-03 10:00:44

Rust編譯開發

2023-06-12 08:00:48

Napi-rsRust 前端工具

2021-05-19 10:43:28

惡意軟件Rust的Buer

2024-01-07 17:29:10

編程語言線程Rust

2021-10-26 21:50:10

Rust嵌入式開發

2024-01-09 09:27:57

Rust編程泛型
點贊
收藏

51CTO技術棧公眾號

成人黄色午夜影院| 国产色婷婷国产综合在线理论片a| 污污的网站18| 在线综合欧美| 日韩中文字幕在线播放| 青青青草原在线| 视频一区二区欧美| 国产精品视频一区国模私拍 | 国产极品粉嫩福利姬萌白酱| 国产精品hd| 欧美极品少妇xxxxⅹ裸体艺术 | 国产免费久久| 成人性生交大片免费观看嘿嘿视频 | 97在线观看视频国产| 日本在线免费播放| 不卡av播放| 91精品国产91久久久久久一区二区 | 国产婷婷成人久久av免费高清| 精品日韩在线观看| 奇米四色中文综合久久| 天堂综合在线播放| 日韩电影免费观看在线观看| 在线观看麻豆蜜桃| 精品欧美国产一区二区三区| 97超超碰碰| 久久众筹精品私拍模特| 警花观音坐莲激情销魂小说| 蜜臀久久99精品久久久画质超高清| 操人视频欧美| 亚洲成人最新网站| 91精品国产综合久久香蕉| 免费一区二区三区视频导航| 久久久亚洲精选| 91欧美极品| 高清欧美电影在线| 成人动漫视频| 久久中文字幕二区| 成人91免费视频| 亚洲欧洲www| 久操网在线观看| 国产成a人亚洲精| 五月天综合婷婷| 美女网站视频久久| 亚洲成人a**址| 日本aⅴ免费视频一区二区三区| 久久草.com| 老司机精品福利视频| 欧美在线播放一区| 青娱乐精品在线视频| 一区二区三区四区| 国产精品一区在线观看你懂的| 亚洲激情免费视频| 成人国产免费视频| 男女视频一区二区三区| 中文字幕一区视频| 中文字幕在线网| 欧美无乱码久久久免费午夜一区| 欧美女优在线| 日韩一区二区三免费高清| 国内老司机av在线| 中文字幕日韩av电影| 免费精品一区二区三区在线观看| 高清视频欧美一级| 久久激情电影| 日本一区二区三区免费观看| 国产一区二区精品久久| 欧美 国产 小说 另类| 亚洲欧美偷拍卡通变态| 免费在线性爱视频| 亚洲国产另类久久精品| 国产在线视频欧美一区| 久久久伊人日本| 精品国产一区二区三区小蝌蚪 | 综合激情丁香| 亚洲国产综合在线| 黄色动漫在线观看| 亚洲品质视频自拍网| 噜噜噜狠狠夜夜躁精品仙踪林| 国产精品久久久久9999| 视频一区二区欧美| 三级在线免费看| 欧美伊人久久大香线蕉综合69| 成年男女免费视频网站不卡| 668精品在线视频| 国产模特精品视频久久久久| 亚洲一区二区三区av无码| 亚洲免费伊人电影| 香蕉久久aⅴ一区二区三区| 久久99国产综合精品女同| 正在播放日韩欧美一页| 国产亚洲精品久久久久久久| 亚洲欧美偷拍三级| 黄页网站在线| 国产精品www网站| 美女一区二区三区| 亚洲美女主播视频免费观看| 精品国产乱码久久久久久图片| 久久综合另类图片小说| 欧美日韩亚洲在线| 中文字幕亚洲电影| 国产精品yjizz视频网| 国产成人在线一区| 狠狠色丁香久久婷婷综合_中 | 午夜一区在线| 亚洲福利精品视频| 欧美一区二区三区四区高清| 欧亚精品一区| 影音先锋成人资源网站| 偷拍日韩校园综合在线| 成人美女视频| av一区二区三区免费| 国产女同性恋一区二区| 羞羞网站在线看| 国产在线精品成人一区二区三区| 岛国一区二区三区| 黄色在线播放网站| 国产欧美日韩综合精品| 久久久久久99精品| 欧美bbbxxxxx| 成人春色激情网| 国产欧美1区2区3区| 在线天堂资源www在线污| 高清不卡一区二区三区| 亚洲激情在线激情| 精品国产麻豆| 做爰高潮hd色即是空| 欧美精品黑人性xxxx| 俺要去色综合狠狠| 婷婷免费在线观看| 久久久精品一区二区| 日韩精品1区2区3区| 久久电影视频| 91精品国产综合久久香蕉最新版 | 亚洲欧美激情四射在线日| 亚洲小说欧美另类社区| 日本aⅴ中文| 久久伊人色综合| 国产精品99久| 岛国毛片av在线| 久久久精品动漫| 欧美亚洲国产怡红院影院| 国产成人高清| 黄色漫画在线免费观看| 欧美成人精品激情在线观看| 风间由美性色一区二区三区 | 国产精品久久7| 亚洲高清不卡在线观看| 欧美尿孔扩张虐视频| 欧美日韩在线观看不卡| 欧美日韩福利视频| 国产偷国产偷亚洲高清人白洁| 草莓视频成人appios| 国产传媒久久久| 国产午夜一区二区| 成人av资源在线| 精品一级视频| 成人黄网大全在线观看| 欧美精品激情在线| 国产精品欧美久久久久无广告 | 亚洲人成电影网站色xx| 热久久久久久久| 国产盗摄在线视频网站| 日韩高清专区| 国产视频久久久| av中文字幕在线不卡| а天堂中文最新一区二区三区| 免费看一级大黄情大片| 欧美片一区二区三区| 国产精品国产三级国产三级人妇 | 国产三级电影在线观看| 91嫩草免费看| 5566中文字幕一区二区电影 | 国产在线超碰| 国产伦精品一区二区三区高清版 | 一区二区三区精品| 日韩综合精品| 成人高清免费在线播放| 麻豆久久久9性大片| 亚洲黄色在线观看| 成人午夜视频免费看| 精品淫伦v久久水蜜桃| 97涩在线观看视频| 亚洲在线观看视频| 日韩一区和二区| 国产河南妇女毛片精品久久久 | 国产成人avxxxxx在线看 | 色婷婷综合久久久久中文字幕| 欧美成人全部免费| 亚洲国产精品精华液网站| 影视一区二区| 日本在线视频网址| 国产精品免费观看久久| 国产精品精品一区二区三区午夜版 | 综合久久av| 毛片网站大全| 久久国产主播精品| 中文字幕欧美亚洲| 欧美午夜久久久| 国产精品乡下勾搭老头1| 九九热精品视频在线观看|