与IPFS 相比,JS-IPFS的性能较低



我正在使用js-ipfs服务器端在IPFS上"上传"文件,但它似乎比命令行ipfs daemonipfs add someFile效率低得多。

在服务器端,我实例化了一个Ipfs对象,然后尝试使用文件内容的路径和缓冲区进行storeData。当我的服务器启动时,我连接到三个群:

Swarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/QmTBoDWXviw7eRKeDGbp3wU2PxAw1epPxax6mp8uY6CEEW
Swarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/QmTBoDWXviw7eRKeDGbp3wU2PxAw1epPxax6mp8uY6CEEW
Swarm listening on /ip4/10.19.77.89/tcp/4002/ipfs/QmTBoDWXviw7eRKeDGbp3wU2PxAw1epPxax6mp8uY6CEEW

我以这种方式使用IPFS:

const IPFS = require('ipfs');
const node = new IPFS();
class Ipfs {
constructor() {
node.on('error', e => console.log(e))
node.on('start', () => console.log('Node started !'))
node.on('ready', () => console.log('Node is ready !'))
}
storeData(content, path) {
return new Promise((resolve, fail) => {
let encData = {
path: path,
content: content,
};
node.files.add(encData, (err, data) => {
if (err) return fail(err);
return resolve(data);
})
})
}
}

当我从我的对象调用storeData时,IPFS会给我一个哈希值,我可以在其中获取文件,但https://ipfs.io/ipfs/[hash]永远不会加载。

我想坚持这样一个事实,即ipfs add命令行给出的哈希立即工作

提前致谢

在命令行中,当您运行ipfs add <some file>时,它将对文件进行分块,并将其添加到本地~/.ipfs目录中。在运行时,它会打印出块的 CID,最后打印出根 CID。

如果您尝试通过使用刚刚从运行ipfs add中获得的 CID 运行ipfs cat <root CID>来从 IPFS 获取文件,那么它也会很快,因为它将从您的本地存储库中提取块。如果您使用当前没有的 CID 运行ipfs cat,那么它将向连接的对等方索要它。如果当前未连接到为该 CID 提供数据的人,则可能需要一段时间。

js-ipfs调用node.files.add的工作方式类似于从命令行运行ipfs add。它将在完成文件分块并将它们存储在本地(默认情况下为~/.jsipfs)后立即返回根 CID。

如果在由https://ipfs.io/ipfs/[CID]操作的网关计算机上运行的 IPFS 节点需要一段时间才能找到该 CID 的提供程序,则尝试通过从公共网关获取根 CID 可能会很慢 ipfs.io。它是一台远程计算机,它必须首先找到提供该 CID 的本地对等方,并从中获取数据。

当您使用ipfs daemon启动 ipfs 节点时,初始输出会告诉您节点正在侦听哪些本地网络接口和端口,因此

Swarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/QmTBoDWXviw7eRKeDGbp3wU2PxAw1epPxax6mp8uY6CEEW
Swarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/QmTBoDWXviw7eRKeDGbp3wU2PxAw1epPxax6mp8uY6CEEW
Swarm listening on /ip4/10.19.77.89/tcp/4002/ipfs/QmTBoDWXviw7eRKeDGbp3wU2PxAw1epPxax6mp8uY6CEEW

。表示您的本地 IPFS 节点正在侦听 IPv4 地址127.0.0.110.19.77.89。它不会告诉你你有多少个同龄人。要了解您有多少个对等节点,请运行ipfs swarm peers

$ ipfs swarm peers
/ip4/1.64.206.172/tcp/42707/ipfs/QmUDGjCUDePrxWbpohHLuW8Hy1uGKXi4tJXaN6z7FuNszb
/ip4/100.24.159.221/tcp/46757/ipfs/QmQjGfZq3MvgykH5oXeQaZvU6TGMCD7xtRtUXz1sK4u8nG
/ip4/101.200.58.57/tcp/4001/ipfs/QmRXcRwhbjtgE2E3hF4rRhM3xaGRrjfieUE5iXGCAwrZ9d
...

。要只找到您连接到的对等体的数量,您可以将输出通过管道传输到 wc -l

$ ipfs swarm peers | wc -l
755

。在回答您的基本问题时,由于语言的差异,JS-IPFS 仅比 go-ipfs 慢。两者都是同一规范的实现,并且它们都使用类似的算法实现。如果你想从JS使用go-ipfs,出于任何原因,你也可以这样做,通过运行go-ipfs守护进程,并使用与js-ipfs-http-client具有相同API的库通过HTTP API与之通信js-ipfs

相关内容

  • 没有找到相关文章

最新更新