当前位置: 首页 > 后端技术 > Node.js

【Laya游戏开发】Laya构建速度提升10倍小技巧

时间:2023-04-03 15:54:53 Node.js

1.为什么选择Laya引擎?比如Cocos、Egret、Laya都对小游戏有很好的兼容性。目前公司技术栈主要使用Cocos和Laya。接触了几个项目后,考虑到在IDE上使用引擎上手的习惯和API的设计,发现Laya更适合微信小游戏的开发。2.默认的Laya构建方式Laya默认使用IDE创建项目后(本文选择typescript语言),会在当前项目目录下新建一个名为.laya的文件夹。默认生成的编译配置文件,其中compile.js是开发时默认运行的文件。这里,如果开发者是mac系统,使用F8编译工程后,可能会报如下错误:通过错误信息,如果这里有错误,编译。js名称改为gulpfile.js,文件中gulp默认运行的任务改为'default'。根据compile.js文件,Laya默认的构建方式是使用gulp和browserify构建项目,tsify编译typscript,vinyl-source-stream将tsify构建的节点流转成gulp可以的流文件认出。所以我们每次修改ts源码都需要手动点击编译或者使用F8编译。而且,就Laya的3D样例工程而言,每次编译的时间基本都是1s~2s。3、改进Laya构建方式对于web前端开发,可以配置webpack+webpack-hot-middleware进行代码热更新。开发网页的基本流程是:修改代码->自动编译->自动刷新,如果有两屏,开发者不需要刷新浏览器、输入命令重新编译等机械重复的行为。由于Laya默认使用browserify(其实browserify这几年更新很慢),这里我们可以添加gulp.watch来观察src目录下的源文件。每当修改src下的一个文件,就会自动触发编译操作,相当于开发者不需要按F8编译。gulp.task("watch",['default'],()=>{gulp.watch("../src/**/*.ts",()=>{gulp.run("default");});});不过这种方式相当于gulp重新编译,实际编译速度还是不快。那么问题来了,有没有办法适时编译,让gulp只编译修改的部分,从而加快编译速度呢?4、使用watchify监听文件变化,结合browserify-sync自动刷新网页。可以通过gulp官网了解watchify及相关??使用。这里我们把代码改成,结合browserify-sync来带来自动刷新网页的功能。constwatchedBrowserify=watchify(browserify({basedir:workSpaceDir,debug:false,entries:['src/Main.ts'],cache:{},packageCache:{}}).plugin(tsify));//记录watchify编译ts时是否有错误,如果有错误,浏览器不会刷新letisBuildError=false;gulp.task("build",()=>{returnwatchedBrowserify.bundle().on('error',(...args)=>{isBuildError=true;gutil.log(...args);}).pipe(source('bundle.js')).pipe(gulp.dest(workSpaceDir+"/bin/js"));});gulp.task("watch",['build'],()=>{//浏览器开发时自动刷新页面browserSync.init({port:3002,//监听端口,注意是否与相关otherprojectsConflictserver:{watchFiles:["../bin/"],//刷新网页的监控目录baseDir:"../bin/"}});//watchify监控文件刷新watchedBrowserify.on("update",()=>{isBuildError=false;runSequence('build',()=>{if(!isBuildError){//当没有编译错误时,刷新浏览器界面browserSync.reload();}});});//打印watchify编译日志watchedBrowserify.on("log",gutil.log);});其中runSequence用于同步执行gulp任务,实践过多次,这里还需要加上变量isBuildError。发生代码编译错误时,不执行browserSync刷新。最终效果:编译速度快近10倍,浏览器也可以自动刷新,游戏开发更愉快~欢迎下载源码:https://github.com/derickweng...