由于大数据js文件,浏览和babelify非常缓慢

我有一个nodejs项目,它使用大型字典列表(数百万条目),存储在js文件中,如下所示:

module.exports = ["entry1", "entry2", "entry3", "entry4", "entry5", etc.];

然后我从其他文件中使用它们:

var values = require('./filePath');

这个工程很好,它也可以在浏览器中使用(使用browserify),但捆绑需要很长时间 - 大约10分钟。

我使用以下命令来创建包: browserify "./src/myModule.js" --standalone myModule -t [ babelify --presets [ es2015 stage-2 ] --plugins ["transform-es2015-classes", {"loose": true}]

我试图避免使用--noparse ["path1", "path2", "path3", etc.]解析我的字典js文件--noparse ["path1", "path2", "path3", etc.]但它没有任何区别。

理想情况下,我只想加快browserify babelify过程,但如果这是不可能的,我会很高兴找到另一种方式(即避免require )来存储和使用我的列表,以便它们不会减慢过程但是这在关键节点和浏览器中也起作用。


您可以将数据文件分开捆绑,因此只需在更改时重新捆绑它们即可。 这可以使用--require -r--external -x选项。

要创建数据包,请执行如下操作:

browserify -r ./path/to/data.js -r ./path/to/other/data.js > data-bundle.js

生成的data-bundle.js将全局定义require函数,可用于获取上面命令中列出的任何文件。 只要确保你在主包之前在脚本标签中包含了这个包。

能够 - --require一个glob模式会很好,但不幸的是, --require不支持这一点。 如果你尝试使用shell来扩展一个模式, -r选项将只适用于第一个,这很糟糕。 你可以编写一个shell脚本来构建一个来自ls或某个东西的命令,以避免必须列出所有的数据文件,但这超出了问题的范围。

要在不重建数据文件的情况下创建主包,只需将如下所示的选项添加到您的命令中即可:

-x './path/to/data/*.js'

这告诉browserify基本上忽略它们,让它们通过由其他包创建的全局require函数来引入它们。 正如你所看到的,这确实支持glob模式,所以它更容易一些。

更新:

要将这两个bundle合并为一个,只需将这样的东西放在shell脚本的末尾,该脚本以构建主包的browserify命令开始:

cat data-bundle.js main-bundle.js > bundle.js
rm main-bundle.js

不幸的是,这将永远不得不写一个data-bundle.js到磁盘的副本,这可能是经济放缓的最终原因,正如我在下面的评论中提到的。 虽然值得投入。

如果即使这样也行不通,还有其他一些更可笑的方法。 尽管我现在会继续讨论这些问题,因为我不认为他们是值得的,除非你绝对必须把它作为一个文件,并且没有别的办法。 :


如果您的文件含有数据 - 只需以单独的方式加载它们,并且不要将它们包含在构建过​​程中

  • 将您的大数据文件格式化为JSON
  • 在服务器上使用:

    让fs = require('fs'); let yourContent = JSON.parse(fs.readFileSync('path / to / file'));

  • 在客户端使用:

    let request = require(“client-request”); //做npm安装客户端请求

    var options = {uri:“http://.com/path/to/file”,json:true}

    var req = request(options,function callback(err,response,body){console.log(response.statusCode)if(body){let yourContent = body}})

  • 或者使用任何其他你喜欢的HTTP请求的库

    链接地址: http://www.djcxy.com/p/861.html

    上一篇: browserify and babelify very slow due to large data js files

    下一篇: UPDLOCK and HOLDLOCK query not creating the expected lock