Skip to content

Latest commit

 

History

History
170 lines (112 loc) · 3.17 KB

README_ZH.md

File metadata and controls

170 lines (112 loc) · 3.17 KB

go 并发快速获取文件夹大小,可以跑在 nodejs 中


特性


动机

想要快速知道文件夹大小,但 nodejs 实现的 get-folder-size 是慢的,所以用 go 实现了递归获取文件夹大小,能跑在 nodejs 中,正常情况下,比 node 原生方案快 7 ~ 20

具体可见 issue 👉 get-folder-size/issues/22


使用

npm

install

npm install go-get-folder-size

cli

# Binary go, fastest
npx go-get-folder-size

program

import {
  getFolderSize,
  getFolderSizeBin,
  getFolderSizeWasm,
} from "go-get-folder-size";

const base = "./"; // 你想要获取的目录

await getFolderSizeBin(base); // 二进制 go,最快

await getFolderSize(base); // 原生 node

await getFolderSizeWasm(base); // Wasm go,最慢 🥵

go

install

go install github.com/markthree/go-get-folder-size

cli

go-get-folder-size

program

go get github.com/markthree/go-get-folder-size
package main

import (
	getFolderSize "github.com/markthree/go-get-folder-size/src"
)

func main() {
	size, err := getFolderSize.Invoke("./") // 并发计算,超级快

  size2 := getFolderSize.LooseInvoke("./") // 有时我们可能会遇到不可访问的文件,我们可以使用 loose 来忽略它们
}

IPC

适用于多路径

import { createGetFolderSizeBinIpc } from "go-get-folder-size";

const { getFolderSizeWithIpc, close } = createGetFolderSizeBinIpc();

Promise.all([
  getFolderSizeWithIpc("./"),
  getFolderSizeWithIpc("../"),
])
  .then((vs) => console.log(vs))
  .finally(close); // 手动退出是必需的

loose

有时我们可能会遇到不可访问的文件,我们可以使用 loose 来忽略它们

cli

go-get-folder-size --loose

program

import {
  getFolderSize,
  getFolderSizeBin,
  getFolderSizeWasm,
} from "go-get-folder-size";

const base = "./"; // 你想要获取的目录
const pretty = false; // 人类可读的方式
const loose = true;

await getFolderSizeBin(base, pretty, { loose }); // Binary go, fastest

await getFolderSize(base, pretty, { loose }); // native node

await getFolderSizeWasm(base, pretty, { loose }); // Wasm go,slowest

提示

  • 目前该包被使用在组织内的本地项目管理器中,首次获取项目大小优化到 1s 内 👉 x-pm

灵感来源

esbuild


License

Made with markthree

Published under MIT License.