美文网首页
[前端开发]前端优化,服务管理

[前端开发]前端优化,服务管理

作者: 杨山炮 | 来源:发表于2021-07-25 10:07 被阅读0次

动态ployfill

以前为解决浏览器对部分ES6 API不支持的问题都是通过 在项目中直接导入babel-polyfill,不管能不能用到,都全量处理,这样会造成一部分的资源浪费。 动态polyfill的 概念就是根据项目需要指定要 polyfill 的特性,而且会根据浏览器是否支持相关API来动态加载浏览器需要引入的 polyfill,也可以指定强制需要支持的API,直接到 polyfill.io 勾选生成即可

<script src="https://polyfill.io/v3/polyfill.min.js?features=Promise,Reflect"></script> 

静态资源CDN

const cdn = {
    // 忽略打包的第三方库
    externals: {
        "vue": 'Vue',
        "element-ui": "ELEMENT",
        'vue-router': 'VueRouter',
        "vuex": 'Vuex',
        "axios": 'axios',
    },

    // 通过cdn方式使用
    js: [
        'https://cdn.bootcdn.net/ajax/libs/vue/2.6.11/vue.min.js',
        'https://cdn.bootcdn.net/ajax/libs/vuex/3.6.2/vuex.min.js',
        'https://cdn.bootcdn.net/ajax/libs/vue-router/3.5.1/vue-router.min.js',
        'https://cdn.bootcdn.net/ajax/libs/axios/0.21.1/axios.min.js',
        "https://cdn.bootcdn.net/ajax/libs/element-ui/2.15.0/index.min.js",
    ],

    css: ["https://unpkg.com/element-ui@2.15.0/lib/theme-chalk/index.css"],
}
#vue.config.js
 chainWebpack: config => {
        if (process.env.NODE_ENV == "production") {
            config.plugin('html').tap(args => {
                args[0].cdn = cdn
                return args
            });

        }
        config.plugins.delete('prefetch');
    },
#/public/index.html
<% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.css) { %>
    <link href="<%= htmlWebpackPlugin.options.cdn.css[i] %>" rel="stylesheet">
    <% } %>
     <% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.js) { %>
    <script src="<%= htmlWebpackPlugin.options.cdn.js[i] %>"></script>
    <% } %>

前端资源开启gz压缩

//打包忽略第三方库
    configureWebpack: config => {
        // 忽略打包配置
        if (process.env.NODE_ENV == "production") {
            config.externals = cdn.externals
            // 开启gzip压缩
            config.plugins.push(
                new CompressionWebpackPlugin({
                    test: /\.(js|css)?$/i, // 哪些文件要压缩
                    filename: '[path].gz[query]', // 压缩后的文件名
                    algorithm: 'gzip', // 使用gzip压缩
                    minRatio: 1, // 压缩率小于1才会压缩
                    deleteOriginalAssets: true // 删除未压缩的文件,谨慎设置,如果希望提供非gzip的资源,可不设置或者设置为
                }
                )
            )
        }

    }

图片懒加载


import VueLazyLoad from 'vue-lazyload'
Vue.use(VueLazyLoad, {
  preLoad: 1,
  error: require('./assets/img/error.jpg'),
  loading: require('./assets/img/homePage_top.jpg'),
  attempt: 2
})
 <!-- img中使用图片懒加载。 v-lazy代替v-bind:src -->
<img v-lazy="imgSrc" alt="" > 
 <!-- 背景图中使用图片懒加载。 v-lazy:background-image = "" -->
<li v-for="(url,index) in imgList" v-lazy:background-image="url"></li>

Nginx开放webSocket连接配置

location /socket.io {
            proxy_pass  http://serverIP:port;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection upgrade;
 }

Nginx开启Gzip,处理页面404

server {
        listen 80;
        server_name *.我的domain.com;
        access_log logs/hr.log;
        error_log logs/hr.error.log;
        location / {
              proxy_set_header Host $host;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              index index.html index.htm;
              root /home/yxl/find-house/client/find-house-client/dist/;
              try_files $uri $uri/ /index.html;
        }
       location ^~ /api/ {   #这里是用正则匹配的以api 开头的路径 通过 proxy_pass 属性代理到服务器上node项目运行地址
           proxy_pass http://ServerIP:8001/;  #因为我node项目和前端项目是部署在同一台服务器上的,所以地址用的是127.0.0.1,如果是$
       }
        location /assets {
               alias  /home/yxl/find-house/client/find-house-client/dist/;
                gzip_static on;
                expires max;
                add_header Cache-Control public;
        }
        error_page 500 502 503 504 /500.html;
        client_max_body_size 20M;
        keepalive_timeout 10;
}

^~/api/表示匹配前缀是api的请求,proxy_pass的结尾有/, 则会把/api/*后面的路径直接拼接到后面,即移除api.

普通用户免密登录linux服务器

客户端要想免密登陆服务器必须把客户端的公钥(pub)文件的内容添加到服务器的authorized_keys文件中。

//客户端生成公钥对
yxl@client:~$ ssh-keygen -t rsa -P ''
//将公钥拷贝到目标服务器指定目录下
yxl@client:~$ scp .ssh/id_rsa.pub yxl@server_IP:/home/yxl/.ssh/id_rsa.pub

服务器下将pub文件内容追加到authorized_keys文件中

//将公钥追加到该文件中
richard@richard~$  cat id_rsa.pub >> .ssh/authorized_keys
sudo chmod 700 .ssh && sudo chmod 600 authorized_keys//必须如此权限,否则免密登陆无效
//客户端免密登陆服务器
ssh richard@server_IP

pm2进程管理

  • 列出所有进程/应用 pm2 list
  • 查看某个进程/应用具体情况 pm2 describe www
  • 查看进程/应用的资源消耗情况 pm2 monit
  • 查看pm2的日志 pm2 logs
  • 查看某个进程/应用的日志,使用 pm2 logs www

pm2日志管理

 pm2 install pm2-logrotate@2.2.0

语法:pm2 set pm2-logrotate:<param> <value>

pm2 set pm2-logrotate:rotateInterval '* * */1 * *' // 每小时备份
pm2 set pm2-logrotate:compress true // 压缩
pm2 set pm2-logrotate:retain 3 // 备份最多3份,也就是备份最进3小时的日志

pm2-logrotate具体配置说明:

  • max_size (默认10M): 当一个文件的大小超过这个值时,它将会对其进行旋转。你可以在最后指定单位:10G, 10M, 10K
  • retain(默认为30个文件日志):保留日志文件数量
  • compress(默认false):是否启用压缩处理所有的旋转日志
  • dateFormat(默认格式YYYY-MM-DD_HH-mm-ss):日志文件名称格式
  • rotateModule(默认true):像其他应用程序一样旋转pm2模块的日志
  • workerInterval(默认30秒):检查日志大小的时间间隔
  • rotateInterval(默认每天午夜0 0 * * *):定时执行旋转
    TZ(默认系统时间):偏移保存日志文件的标准tz数据库时区

基本命令

  • grep -rin "关键字" ./ 查看当前路径下包含关键字的文件
  • scp -r yxl@IP:SERVER_PATH localhost_path 服务器文件下载到当前
  • scp -r localhost_file yxl@IP:SERVER_PATH 本地文件上传服务器
  • find . -name "sql.log.20200*"| xargs rm -f 批量删除
  • head -n 7 /etc/services 显示文件前7行内容
  • tail -n 3 /etc/services 显示文件最后3行内容
  • sudo chmod (-R递归) 777(4读,2写,1可运行)

常用命令

  • top 性能分析,动态显示内存(MEM),CPU占用情况
  • free top的精简版
  • df -hl 查看磁盘占用情况
  • du -sh 当前目录占用磁盘空间大小,不包括子目录和目录下的文件,
  • netstat 显示网络相关信息
    • -a (all)显示所有选项,默认不显示LISTEN相关
    • -t (tcp)仅显示tcp相关选项
    • -u (udp)仅显示udp相关选项
    • -n 拒绝显示别名,能显示数字的全部转化成数字。
    • -l 仅列出有在 Listen (监听) 的服務状态
    • -p 显示建立相关链接的程序名
    • -r 显示路由信息,路由表
    • -e 显示扩展信息,例如uid等
    • -s 按各个协议进行统计
    • -c 每隔一个固定时间,执行该netstat命令。
  • ps -ef |grep -rin '进程名' 显示所有正在运行的命令程序
    • UID: 说明该程序被谁拥有
    • PID:就是指该程序的 ID
    • PPID: 就是指该程序父级程序的 ID
    • C: 指的是 CPU 使用的百分比
    • STIME: 程序的启动时间
    • TTY: 指的是登录终端
    • TIME : 指程序使用掉 CPU 的时间
    • CMD: 下达的指令
  • 端口占用情况也可以使用lsof -i:端口号查看,前提安装了lsof

相关文章

  • [前端开发]前端优化,服务管理

    动态ployfill 以前为解决浏览器对部分ES6 API不支持的问题都是通过 在项目中直接导入babel-pol...

  • 性能优化

    +WEB前端性能优化:HTML,CSS,JS和服务器端优化对前端开发工程师来说,前端性能优化的重要性是不言而喻的,...

  • 初入前端

    前端是做什么的 前端负责页面呈现和交互功能。 前端要会做哪些事情 Web前端开发技术,网站性能优化、SEO和服务器...

  • 中型App开发框架总结

    开发流程总图 代码开发阶段  GitLab:代码管理服务。git分支规范 MockServer:前端/后台同步开发...

  • 前端性能优化(中)

    性能优化调研系列文章 《前端性能优化(上)》 《前端性能优化(中)》 《前端性能优化(下)》 《前端性能优化(上)...

  • 前端性能优化(下)

    性能优化调研系列文章 《前端性能优化(上)》 《前端性能优化(中)》 《前端性能优化(下)》 《前端性能优化(中)...

  • 项目笔记/配置/jwt/isdangerous

    前端文件开发预览 可以使用前端node.js 提供的服务器live-server作为前端开发服务器使用。安装nod...

  • 前端性能优化(上)

    性能优化调研系列文章 《前端性能优化(上)》 《前端性能优化(中)》 《前端性能优化(下)》 为什么要进行前端性能...

  • 虎牙前端职位信息

    职位描述 1. 负责公司Web前端直播产品的相关开发任务。 2. 负责梳理和优化前端开发流程,搭建高效集成的前端开...

  • Chrome 性能监控 性能分析

    Chrome开发者工具之JavaScript内存分析 前端性能优化 —— 前端性能分析 Chrome DevToo...

网友评论

      本文标题:[前端开发]前端优化,服务管理

      本文链接:https://www.haomeiwen.com/subject/hkvbmltx.html