js预加载loading的另类优化方案

野生程序猿-杂烧5年前野生技术982

各位做前端的朋友有没做过loading预加载素材的功能,一般游戏开发正常都会用到。其实加载多图的时候我们为了优化体验都是需要做loading效果的。


哪些东西需要loading?最常见的就是图片,部分用到json等配置文件的也可以loading,再有就是部分音效,甚至js代码也可以loading预加载。很多朋友还停留在普通的网页前端,还没有loading的意识。尤其很多依赖框架开发的朋友,优化需求来了无从下手。


如何实现loading效果?今天我们不谈代码,主要谈一下思路。一个类客户端的web软件,往往是要考虑UI框架的加载,然后考虑主页图片素材的加载,然后功能页也得考虑加载。既然是loading那么第一个页面肯定是个单独的loading页面,尽可能的在这个页面少调用js,少调用图片。基本上loading页面整个html+js+css+图片控制在200k内,千万别用繁重的框架,一上来先加载个1-2MB的js,搞的客户火气很大,尤其是我们教学类软件很多动画效果,有的时候框架选不好,砸了自己招牌。


因此我们需要从原理上考虑这个loading效果,就是加载的优化。很多框架没有很好的loading方案,包括目前比较火的vue、uniapp、angularjs等等,尽管有一些方案但是不那么容易实现。这里我来给个野生思路,这个思路来源于游戏外挂,就是做一个外挂程序,nodejs、php都可以轻松实现。

首先我们用后端程序分析出编译好的文件,如

<script src=./static/js/chunk-vendors.cfb20cce.js></script><script src=./static/js/index.30e098f1.js></script>

替换为下面代码(demo的主要部分)

<script src=./static/js/preloadjs.min.js></script>
<script>
var need_loading_list=[];
var queue = new createjs.LoadQueue();

queue.on("complete", handleComplete);
queue.on('progress', handleProgress);
queue.loadManifest(need_loading_list);
function handleComplete() {
	//隐藏loading代码
	
	//重新加载js
	document.write(`<script src=./static/js/chunk-vendors.cfb20cce.js></script><script src=./static/js/index.30e098f1.js></script>`);
	
}
function handleProgress() {
	//loading进度条展示的代码
}
</script>

还需要用后端语言读取编译后的素材,如static文件夹,得到一个需要提前loading的list(实际情况可以根据每个页面的需要,用后端程序自动分析出对应页面用到的素材),同时后端代码直接修改编译好的文件进行代码的修改,达到自动化效果,当一个工具使用。


这是个野生程序猿的野生思路,不一定适合多数人,但是效果可以保证,已经用在多个项目里了。我一般控制首次加载不超过200K,然后其它都是异步加载。


相关文章

初学nodejs+express,打造cms系统(5)

今天来尝试做上传功能,其实就是一个上传接口。已经跟php完全两样了,两眼一抹黑,直接百度搜索出来拿过来用,也不知道性能如何,反正可以跑通,需要找机会验证一下。【upload.js】//api库&nbs...

初学nodejs+express,打造cms系统(3)

上次聊到了我的base.js 插入式编程,接着聊编程正题首先是数据库操作类【db_mysql.js】var mysql=require('mysql');  va...

初学nodejs+express,打造cms系统(4)

前面已经改造了基础模块,下面到了页面制作环节。先前的脚手架已经支持ejs了,在views文件夹里出现了测试ejs,下面基本上是锻炼自己仿写能力了。【routes/api.js】var exp...

nodejs裁剪图片

nodejs裁剪图片

这是个真实的案例,下面脚本是真实跑通的,走过了一些坑,这里来给大家分享一下 首先描述一下场景,我们是做教学软件的,这个是开发一个X光机安检教学场景,有...