由于大数据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到磁盘的副本,这可能是经济放缓的最终原因,正如我在下面的评论中提到的。 虽然值得投入。
如果即使这样也行不通,还有其他一些更可笑的方法。 尽管我现在会继续讨论这些问题,因为我不认为他们是值得的,除非你绝对必须把它作为一个文件,并且没有别的办法。 :
如果您的文件含有数据 - 只需以单独的方式加载它们,并且不要将它们包含在构建过程中
在服务器上使用:
让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