ReactJS使用Flux架构生成大型JS文件,这是最佳实践
ReactJS with Flux architecture generating large JS files, what is the best practice?
我已经开始将React with Flux架构用于全功能前端应用程序,我真的很喜欢JSX和Flux的方法,但主要的问题是,当我使用Gulp, Babel and Uglyfy
构建JSX文件时,我得到了大约1mb的缩小JS文件,如果没有缩小模式,它会提供几乎8mb的JS文件br/>这还没有结束!!为了使AJAX请求React没有内置功能,所以我还需要包含jQuery
由于有了JSX,我工作得很好,开发过程更快,代码也比其他框架更好但是如何缩小生产文件
我只为Flux架构提供了一些库Dispatcher and EventEmmiter
。因此,这与在我的代码中使用未使用的库无关。我想这是因为我在写JSX,现在我在一个文件中有HTML+JS
拆分文件或缩小JS输出的最佳做法是什么
谢谢!
有一些步骤可以减少生产规模:
- 使用ReactJS的生产版本,其中包括额外的性能优化并删除所有错误消息
- 只使用Ajax不需要包含整个jQuery库,我建议使用其他轻量级库来处理Ajax,例如reqwest或superagent
- 当为生产构建时,分离为两个js文件(或更多),通常我们会为所有库提供一个名为
vendor.js
的文件,为我们制作的代码提供一个app.js
的文件。这将利用浏览器上的缓存,因为vendor.js
每次构建都不会有太大变化
我看到有一些关于在不同页面使用React的信息,所以我从Gulp文档中学到了很多,我发现了很多非常小的JS库MicroJS,它们可以用4-6 KB的大小取代Dispatcher and EventEmmiter
当然你需要用它们做一些手动操作,但它们在JS文件大小上节省了大约20倍。
这是我的Gulp文件,用于为每个页面生成缩小的react bundle 我使用Django作为后端。
var gulp = require('gulp');
var uglify = require('gulp-uglify');
var htmlreplace = require('gulp-html-replace');
var source = require('vinyl-source-stream');
var browserify = require('gulp-browserify');
var reactify = require('reactify');
var babelify = require('babelify');
var streamify = require('gulp-streamify');
var fs = require("fs");
var rename = require("gulp-rename");
var path = {
APP_DIR: './apps/*.jsx',
OUT_DIR: './../static/apps',
};
process.env.NODE_ENV = 'development';
gulp.task('jsx', function() {
return gulp.src([path.APP_DIR])
.pipe(browserify({
insertGlobals : true,
debug : true,
transform: [reactify, babelify.configure({
presets: ["es2015", "react"]
})],
}))
.pipe(rename({
extname: ".min.js"
}))
.pipe(gulp.dest(path.OUT_DIR));
});
gulp.task('jsx_min', function() {
return gulp.src([path.APP_DIR])
.on('error', function (error) {
console.log(error);
})
.pipe(browserify({
insertGlobals : true,
debug : false,
transform: [reactify, babelify.configure({
presets: ["es2015", "react"]
})],
}))
.pipe(streamify(uglify().on('error', function (e) {
console.log(e);
})))
.pipe(rename({
extname: ".min.js"
}))
.pipe(gulp.dest(path.OUT_DIR));
});
gulp.task('build', ['jsx_min']);
gulp.task('default', ['jsx'], function () {
return gulp.watch([path.APP_DIR], ['jsx', function () {
var current_date = new Date();
var time = current_date.getHours() + ":" + current_date.getMinutes() + ":" + current_date.getSeconds();
console.log(time, " -> Rebuilding");
}]);
});
现在,对于每个逻辑页面,我都了解了40KB
缩小的JS文件,用于处理包括AJAX功能在内的所有JavaScript。所以我在标记我的问题答案:)
谢谢你的帮助。
相关文章:
- 什么's是连接供应商js文件的最佳方式
- 将大数组(字符串和类型数组的混合物)存储到blob或文件中/从blob或文件检索大数组的最佳方式
- 节点:'最佳实践'使用其他js文件的js文件
- ExtJS类的最佳实践最终导致了太多的.JS文件.性能怎么样
- 在企业应用程序框架中包含js/css文件的最佳实践是什么
- 在d3.json中使用d3.csv组合多个csv文件数据输入的最佳方法是什么
- 将文件夹中的所有图像包括在阵列中的最佳方式是什么
- 最佳实现:将图像文件上传到数据库,并从数据库中读取图像
- 通过http传输大文件(>100MB)的最佳方式
- Jade包含JavaScript文件的最佳实践
- 链接不同 Web 文件夹中的图像/文件的最佳实践
- Web 项目的文件夹/目录结构 - 最佳做法
- 使用标记和 (TXT) .dat 文件中追加信息的最佳方式.从窗体
- 从 Javascript 读取硬编码 csv 文件的最佳实践
- 在 Node.JS 中使用配置文件的最佳方式
- 加载正确的PhoneGap文件的最佳方法是什么
- 整合多个 Javascript 文件的最佳实践是什么?
- 让目录中的所有文件都成为 webpack 中的入口点的最佳方法
- 通过web应用程序下载文件[最佳实践]
- 将JavaScript代码拆分为几个文件:最佳实践