首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与IPFS相比,JS-IPFS的性能较低

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

Stack Overflow用户
提问于 2018-07-13 23:48:30
回答 1查看 521关注 0票数 2

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

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

代码语言:javascript
复制
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的:

代码语言:javascript
复制
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命令行给出的散列是立即有效的

提前感谢

EN

回答 1

Stack Overflow用户

发布于 2019-06-11 00:09:07

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

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

js-ipfs中,调用node.files.add的方式类似于从命令行运行ipfs add。一旦完成了文件的分块和本地存储(默认情况下在~/.jsipfs中),它就会返回根CID。

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

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

代码语言:javascript
复制
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

...means您的本地ipfs节点正在侦听ipv4地址127.0.0.110.19.77.89。它不会告诉你你有多少同龄人。要找出您有多少同级,请运行ipfs swarm peers

代码语言:javascript
复制
$ 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
...

...and要只查找您连接的对等点的数量,您可以通过管道将输出输入wc -l

代码语言:javascript
复制
$ ipfs swarm peers | wc -l
     755

由于语言的差异,...and在回答您的基本问题时,js-ipfs只比go-ipfs慢。这两个都是相同规范的实现,并且它们都使用相似的算法实现。如果您出于任何原因希望使用JS中的go-ipfs,您也可以这样做,方法是运行go-ipfs守护进程,并使用与js-ipfs具有相同API的js-ipfs-http-client库通过HTTP api与其对话

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51328764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档