V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  magicdawn  ›  全部回复第 1 页 / 共 45 页
回复总数  884
1  2  3  4  5  6  7  8  9  10 ... 45  
17 小时 1 分钟前
回复了 uni 创建的主题 Node.js npmmirror 竟然有些包没有更新到最新版本
@uni #9 为什么不去了解一下背景呢?大 npm 包被影视站利用,成本你出么?

如果你嫌弃就不要用,没有收费为何要承担被你喷的困境。

是的你没有了解背景的义务,但同时你也没有喷的权利。
1 天前
回复了 uni 创建的主题 Node.js npmmirror 竟然有些包没有更新到最新版本
npmmirror v.s tencent mirror ,坐标湖北武汉, 结果:

=== Final Result (sorted by tarball avg) ===

npmmirror
metadata avg: 229.4 ms
metadata p50: 253.9 ms
metadata p90: 409.2 ms
tarball avg: 435.1 ms
tarball p50: 266.1 ms
tarball p90: 906.1 ms


tencent
metadata avg: 777.0 ms
metadata p50: 700.7 ms
metadata p90: 1336.7 ms
tarball avg: 508.6 ms
tarball p50: 440.9 ms
tarball p90: 938.3 ms

脚本 via ChatGPT
```js
#!/usr/bin/env node
import { performance } from 'node:perf_hooks'

const registries = [
{
name: 'npmmirror',
base: 'https://registry.npmmirror.com',
},
{
name: 'tencent',
base: 'http://mirrors.tencent.com/npm',
},
]

// 👉 多包(覆盖不同大小 & 热门程度)
const PACKAGES = [
{ name: 'react', version: '18.2.0' },
{ name: 'lodash', version: '4.17.21' },
{ name: 'typescript', version: '5.4.5' },
{ name: 'axios', version: '1.6.7' },
]

// 👉 多轮(建议 ≥10 )
const RUNS = 10

// 👉 并发数(模拟 npm )
const CONCURRENCY = 4

async function fetchWithTiming(url) {
const start = performance.now()
const res = await fetch(url)
await res.arrayBuffer()
return performance.now() - start
}

// 简单并发控制
async function runPool(tasks, limit) {
const results = []
let i = 0

async function worker() {
while (i < tasks.length) {
const idx = i++
results[idx] = await tasks[idx]()
}
}

await Promise.all(Array.from({ length: limit }, worker))
return results
}

async function testRegistry(registry) {
const metadataTimes = []
const tarballTimes = []

for (let run = 0; run < RUNS; run++) {
const tasks = []

for (const pkg of PACKAGES) {
const metadataUrl = `${registry.base}/${pkg.name}`
const tarballUrl = `${registry.base}/${pkg.name}/-/${pkg.name}-${pkg.version}.tgz`

tasks.push(async () => {
const t = await fetchWithTiming(metadataUrl)
metadataTimes.push(t)
})

tasks.push(async () => {
const t = await fetchWithTiming(tarballUrl)
tarballTimes.push(t)
})
}

await runPool(tasks, CONCURRENCY)
console.log(`[${registry.name}] run ${run + 1}/${RUNS} done`)
}

function stats(arr) {
const sorted = [...arr].sort((a, b) => a - b)
const avg = arr.reduce((a, b) => a + b, 0) / arr.length
const p50 = sorted[Math.floor(sorted.length * 0.5)]
const p90 = sorted[Math.floor(sorted.length * 0.9)]
return { avg, p50, p90 }
}

return {
name: registry.name,
metadata: stats(metadataTimes),
tarball: stats(tarballTimes),
}
}

async function main() {
const results = []

for (const r of registries) {
console.log(`\nTesting ${r.name}...`)
const res = await testRegistry(r)
results.push(res)
}

console.log('\n=== Final Result (sorted by tarball avg) ===')

results.sort((a, b) => a.tarball.avg - b.tarball.avg)

for (const r of results) {
console.log(`
${r.name}
metadata avg: ${r.metadata.avg.toFixed(1)} ms
metadata p50: ${r.metadata.p50.toFixed(1)} ms
metadata p90: ${r.metadata.p90.toFixed(1)} ms
tarball avg: ${r.tarball.avg.toFixed(1)} ms
tarball p50: ${r.tarball.p50.toFixed(1)} ms
tarball p90: ${r.tarball.p90.toFixed(1)} ms
`)
}
}

main()
```
1 天前
回复了 uni 创建的主题 Node.js npmmirror 竟然有些包没有更新到最新版本
https://i.imgur.com/I7e6HEH.png

这个包水平低下,严重浪费开发者磁盘,建议停用
https://www.npmjs.com/package/effect-solutions?activeTab=code
1 天前
回复了 uni 创建的主题 Node.js npmmirror 竟然有些包没有更新到最新版本
这是个公益站,恶心不用就是。没有收你一分钱哦~
因为我觉得很好,必须站出来说句好
因为 npmmirror 我的常用命令 `corepack use pnpm@latest && ncu-safe && pi && p dedupe && p prune` 快了不少

export COREPACK_NPM_REGISTRY=https://registry.npmmirror.com


```sh
❯ where ncu-safe
ncu-safe: aliased to ncu -t minor -u

❯ where pi
pi: aliased to pnpm install

❯ where p
p: aliased to pnpm
```
1 天前
回复了 uni 创建的主题 Node.js npmmirror 竟然有些包没有更新到最新版本
确实烦,但是一个包 325MB 就不得不反思为什么 npm 包要这么大?
npm 应该用来分发代码, assets 请自建分发,参考 puppeteer 下载浏览器实例.

> 325793115 / 1000 / 1000
325.793115
发 ncr 的没毛病,OP 描述有问题。
ncr 是防止访问 google.com 重定向到 google.com.hk ,ncr = no country redirection.
OP 的标题让人想到这个。

OP 想说的是 safari 浏览器搜索引擎选择谷歌时,safari 内置的是 google.cn ,这是个中间页问你要不要到 google.com.hk 上搜索,想要看到结果必须再点一下链接。
这个锅只能 safari / Apple 背,ipad 上搜索引擎这几个预设选项,没有自定义,还不修正 google.cn 的行为。
@hpan #20

https://developer.mozilla.org/en-US/docs/Web/API/File_System_API
只能说 web 无所不能...

webgpu webusb ...
2025 年 12 月 7 日
回复了 SayHelloHi 创建的主题 分享发现 轻量级 macOS Clash 菜单栏客户端
type=select 的 proxy-group 怎么处理的
需要开 dashboard 选么?
2025 年 11 月 9 日
回复了 mqnu00 创建的主题 JavaScript js 判空值 最佳实践
2025 年 8 月 2 日
回复了 fangyex 创建的主题 Next.js Next.js 中用什么来管理全局状态,类似 Vuex/Pinia ?
和 Vue 生态比较接近的是 mobx / valtio

valtio 个人觉得好用...

也是 pmndrs 组织下的, (jotai zustand 同作者)
2025 年 7 月 30 日
回复了 Dg3gWjbFvvq 创建的主题 程序员 语法最优雅的编程语言是什么?
C# 吧, 十多年前就支持 LINQ, 十多年后依旧无人能及

> 糖多是优雅还是不优雅
适度吧, 有些属实没必要的糖会降低优雅程度.


最不优雅 golang, 啥都没有, 我的评价是连 C/C++ 都不如.
2025 年 7 月 26 日
回复了 wuruxu 创建的主题 职场话题 在软件开发领域, AI 会有能力边界吗?
哦是他说的

> Meta 又从 OpenAI 挖到了大牛。

> OpenAI 核心科学家、思维链提示词( CoT )核心作者、o1 关键人物 Jason Wei 。

> 而在离开 OpenAI 之际,Jason Wei 连续更新了两篇博客,对于 RL 之后的发展提出了自己的想法——验证者定律:训练 AI 解决某个任务的容易程度,与该任务的可验证性成正比。所有既可能解决又容易验证的任务,都将被 AI 解决。

我的记忆是 「一切可以被快速验证的东西都可以被 AI 实现」有误, 他的原话是「所有既可能解决又容易验证的任务,都将被 AI 解决」
2025 年 7 月 26 日
回复了 wuruxu 创建的主题 职场话题 在软件开发领域, AI 会有能力边界吗?
忘了在哪看到的信息, 说的是一切可以被快速验证的东西都可以被 AI 实现.
我觉得有道理, 在软件开发领域还剩啥不可以被快速验证?
AI 做不到的: 谈判 一些不是非黑即白的中间地带
2025 年 7 月 26 日
回复了 jiejianshiwa 创建的主题 职场话题 Kazakhstan 哈萨克斯坦中石化项目打工靠谱吗?
哈萨克是说俄语的
2025 年 7 月 25 日
回复了 evada 创建的主题 反馈 感觉这个招聘来盗资产的
真恶心啊
2025 年 7 月 24 日
回复了 Need4more 创建的主题 .NET csharp 这回真成了脚本语言: dotnet run app.cs
2025 年 7 月 22 日
回复了 jdz 创建的主题 程序员 V2er 觉得 gemini cli 和 Claude code 哪个好用呢
@jdz #3 YOLO mode (ctrl + y to toggle)
1  2  3  4  5  6  7  8  9  10 ... 45  
关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   4095 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 38ms · UTC 00:53 · PVG 08:53 · LAX 17:53 · JFK 20:53
♥ Do have faith in what you're doing.