前端怎么快速筛选页面没用的js和css文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前端怎么快速筛选页面没用的js和css文件相关的知识,希望对你有一定的参考价值。

一个项目每个页面基本都引了很多css和js文件,但是有的文件是没有用,就是不需要加载也不会影响页面的布局和效果的,怎样可以快速的把这些没有使用的文件找出来,用什么工具或者方法?

从我用过的方法,可以从两个层面来说,不过都是没有办法100%的精准和全面的。也可能还有一些更好的方法,不过我没用过。

    代码检测

    对于JS,可以使用JSHint或者ESLint进行进行代码检测,可以检测到每个代码里面你定义(或者引入)但是并没有用到的变量。你可以在你的编辑器里面安装相关插件,也可以通过在每次代码提交之前进行检测。相关使用方法可以看这里:ESLint,JSHint比如:我使用VI作为编辑器,截图中使用的是ESLint:

    .

    .

    使用Chrome的 Dev Tool

    Chrome从某个版本开始加入了Coverage,打开方式:

    .

    .

    下图中,绿色的是页面使用到的CSS和JS代码,红色是未被使用的(注意,这里未被执行过,不代表没有用,只是代表还没被触发):

    .

     

参考技术A 没有这样的工具,还是手工去查找删除吧

前端工程师手册css会阻塞页面dom解析吗?javascript呢?

总结一下这几个经典问题。

JavaScript为什么要放在HTML文档的底部?

首先说结论:


不论是内联还是外链js都会阻塞后续dom的解析和渲染


如果把JavaScript放在页面顶部,下载和解析JavaScript的时间里面,dom迟迟得不到解析和渲染,浏览器一直处于白屏,所以把JavaScript文件放在页面底部更有利于页面快速呈现。

defer和async

首先,async和defer对于内联JavaScript都是无效的

defer

设置了defer的script外链文件,在下载js文件期间不会阻塞HTML的解析,而且等js下载完毕时若HTML还没解析完毕,js会等到HTML文档解析完毕后再执行。如果有多个js下载文件,那么执行时也是按照顺序执行。

async

设置了async的script外链文件,在下载js文件期间不会阻塞HTML的解析,但是js下载完毕之后就会立即执行,无论现在HTML是否正在解析。

从图可以更直观的看出区别(图片来自https://harttle.land/2016/05/...):
技术图片

Css为什么要放在HTML文档的<head>标签内

Css阻塞渲染

首先说结论:


对于一个HTML文档来说,不管是内联还是外链的css,都会阻碍后续的dom渲染,但是不会阻碍后续dom的解析。


如果把css文件引用放在HTML文档的底部,浏览器为了防止无样式内容闪烁,会在css文件下载并解析完毕之前什么都不显示,这也就会造成白屏现象。(但是在firefox浏览器中测试,会出现样式闪烁,这也算是不同浏览器的权衡吧,要么等css全解析完一起显示,要么先显示然后css解析完再重新画上新样式)
当css文件放在<head>中时,虽然css解析也会阻塞后续dom的渲染,但是在解析css的同时也在解析dom,所以等到css解析完毕就会逐步的渲染页面了。

怎么优化

因为Css的解析会阻塞页面的渲染,为了让页面尽早的呈现处理,那么就要避免一些无用的css文件。
使用媒体查询可以让css文件只在必要的时候解析,进而避免不必需的渲染阻塞,加快页面呈现时间。
















以上是关于前端怎么快速筛选页面没用的js和css文件的主要内容,如果未能解决你的问题,请参考以下文章

如何快速开发一个漂亮的网站?包括前端的设计,css布局等

页面在引入js,css静态文件的时候怎样加个时间戳

java后台转发jsp地址到到前端页面的时候,前端页面效果未加载是怎么回事?

前端工程师手册css会阻塞页面dom解析吗?javascript呢?

前端工程师手册css会阻塞页面dom解析吗?javascript呢?

js怎么用