zoukankan      html  css  js  c++  java
  • 找出项目中没有用到的资源-项目性能优化

    为了性能优化,找出项目中没有用到的css、png、jpeg、jpg、js文件,对项目总体的资源有一个管理控制。

    ### 技术栈

       glob、ac多字符自动机、fs、path

    findNouseSource.js

    //findNouseSource.js
    const fs=require('fs');
    const acSearch=require('./acSearch');
    //找出项目中没有用到的资源
    function findNouseSource(sourceFileArr,textFileArr,keyFunc){

    let sourceKepMap={}
    sourceFileArr.forEach(function (filepath,i) {
    const key=keyFunc(filepath);
    if(!sourceKepMap[key]){
    sourceKepMap[key]=[i];
    }else{
    sourceKepMap[key].push(i)
    }
    })

    const keys=Object.keys(sourceKepMap)
    const nouseSourceArr=[].concat(sourceFileArr);
    textFileArr.forEach(function (filepath) {
    const text=fs.readFileSync(filepath).toString();
    const keyArr=acSearch(keys,text).map((item)=>item.str)

    keyArr.forEach(function (key) {
    sourceKepMap[key].forEach(function (index) {
    nouseSourceArr[index]=false;
    });
    })
    })
    return nouseSourceArr.filter((item)=>item)
    }
    module.exports=findNouseSource;
    //app2.js
    //找出项目中没有用到的资源
    const fs=require('fs');
    const path=require('path');
    const glob=require('glob');
    const findNouseSource=require('./utils/findNouseSource');
    
    const srcDir='./src/';
    //ignone
    function filterIgnone(filepath) {
        if(//(build|libs)//.test(filepath)){
            return false;
        }
        if(/web-server/.test(filepath)){
            return false;
        }
        return true;
    }
    //被搜索的资源
    let textFileArr=glob.sync(srcDir+'**/*.+(html|js|css|ejs|less)').filter(filterIgnone);
    //png 全名搜索和js 文件name搜索
    let sourceFileArr=glob.sync(srcDir+'**/*.+(css|png|gif|jpg|jpeg)').filter(filterIgnone);
    let jssourceFileArr=glob.sync(srcDir+'**/*.+(js)').filter(filterIgnone);
    
    const nouseSource=findNouseSource(sourceFileArr,textFileArr,function (filepath) {
        return path.basename(filepath);
    })
    // console.log(nouseSource)
    const nouseJsSource=findNouseSource(jssourceFileArr,textFileArr,function (filepath) {
        return path.basename(filepath,'.js');
    })
    // console.log(nouseJsSource)
    const toText={
        lenArr:[nouseSource.length,nouseJsSource.length],
        nouseSource,
        nouseJsSource,
    }
    fs.writeFileSync('./dist/nouse.map',JSON.stringify(toText,null,2))

    nouse.map

      

  • 相关阅读:
    WPF/MVVM 快速开始指南(译)
    Rose2003的安装和破解
    自定义vs代码段
    silverlight中Grid.ColumnDefinitions属性设置错误
    vs绑定和取消绑定项目和解决方案
    firefox浏览器中silverlight无法输入问题
    silverlight中当前上下文中不存在名称“InitializeComponent“错误
    inotify使用代码
    build android toochain on mac (gcc 4.4.3 compile)
    istat 一个不错的widget
  • 原文地址:https://www.cnblogs.com/caoke/p/11023842.html
Copyright © 2011-2022 走看看