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

Javascript 与IPFS相比,JS-IPFS的性能较低,javascript,ipfs,Javascript,Ipfs,我正在使用js ipfs服务器端在ipfs上“上载”文件,但它似乎比命令行ipfs守护进程和ipfs添加一些文件的效率要低 在服务器端,我实例化一个Ipfs对象,然后尝试使用路径和文件内容的缓冲区storeData。服务器启动时,我连接到三个群集: Swarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/QmTBoDWXviw7eRKeDGbp3wU2PxAw1epPxax6mp8uY6CEEW Swarm listening on /ip4/127

我正在使用js ipfs服务器端在ipfs上“上载”文件,但它似乎比命令行
ipfs守护进程
ipfs添加一些文件
的效率要低

在服务器端,我实例化一个
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
我这样使用IPF:

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/[哈希]
从不加载

我想坚持这样一个事实,即
ipfsadd
命令行给出的散列立即起作用


提前从命令行感谢,当您运行
ipfs add
时,它会将文件分块,并将其添加到本地
~/.ipfs
目录。当它运行时,它打印出块的CID,最后是根CID

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

js ipfs
中调用
node.files.add
与从命令行运行
ipfs add
类似。一旦完成文件分块并在本地存储它们(默认情况下在
~/.jsipfs
中),它将返回根CID

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

当您使用
ipfs守护进程启动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.1
10.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守护程序,并使用与

相同API的库通过HTTP API与之对话。是的,根据我的经验,go ipfs比JS ipfs快得多。那么问题是什么?