首页 > 其他分享 >nuxt3构建优化

nuxt3构建优化

时间:2023-11-23 17:14:40浏览次数:44  
标签:nuxt3 robots ssl 构建 export txt 优化 id nuxt

1.性能分析

network分析

 

Lighthouse分析

利用浏览器的Lighthouse工具不仅能够了解到首屏渲染速度等信息,并还能提供相应优化建议

 

 

 

Bundle分析        

在nuxt3不需要自行下载第三方依赖也能够进行Bundle分析

 

配置:

在nuxt.config.ts下写入

export default defineNuxtConfig({
    build: {
        analyze: {
            analyzerMode: 'static'
        }
    }
})

完成以上配置在进行build构建时会生成stats.html文件本地打开即可

 

2.传输优化

gzip压缩

在部署nginx开启

http {
   gzip on;
   gzip_vary on;
   gzip_proxied any;
   gzip_comp_level 6;
   gzip_types text/plain text/css application/json application/javascript application/x-javascript text/javascript text/xml application/xml application/xml+rss;
}

开启http2

server {
     listen 443 ssl http2;
     server_name www.xiaolinboke.com;  
     ssl_certificate      xxxxx.com_bundle.pem;
     ssl_certificate_key  xxxx.com.key;
     ssl_session_cache    shared:SSL:1m;
     ssl session_timeout 5m;
     ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
     ssl_prefer_server_ciphers on;
     ss1_ciphers "EECDH+AESGCM:EDH+AESGCM:EECDH:EDH:!MD5:!RC4:LOW:!MEDIUM:CAMELLIA:ECDSA:!DES:!DSS:!3DES:!NULL";
}

分包策略

默认情况下,浏览器重复请求相同名称的静态资源时,会直接使用缓存的资源。根据这个机制我们可以把第三方依赖打包到一个JS文件里,当第二次加载这文件时则会直接走缓存,达到减少HTTP请求的目的

在nuxt.config.ts下配置

export default defineNuxtConfig({
    vite: {
       build:{
        rollupOptions:{
            output:{
                manualChunks:(id)=>{
                    if(id.includes('node_modules')) {
                        return 'vendor';
                    }
                }
            }
        }
       }
    }
})

但如果将文件全打包到一个JS里又会导致打包出来的这个vendor文件过大,并且不能充分利用http请求的并发性,更严重的则会导致首屏加载过慢,所以我们可以对部分依赖进行分包

export default defineNuxtConfig({
    vite: {
       build:{
        rollupOptions:{
            output:{
                manualChunks:(id)=>{
                    if(id.includes('element-plugin')) {
                        return 'componentUi';
                    } else if(id.includes('axios')) {
                        return 'axios';
                    } else if(id.includes('lodash')) {
                        return 'lodash';
                    }
                }
            }
        }
       }
    }
})

 

3.SEO优化

robots.txt

Robots.txt是一个协议,而不是命令robots.txt是搜索引擎中访问网站的时候第一个要查看的文件,robots.txt文件用于告诉蜘蛛程序在服务器上什么文件(页面)可以被抓取

关于robots.txt 我们不需要手动编写我们可以借助@nuxtjs/robots这个插件去帮我们生成静态的robots.txt文件

 

安装:

npm i  @nuxtjs/robots

 

使用以及配置:

export default defineNuxtConfig({
    modules: ["@nuxtjs/robots"],
    // 配置
    robots: {
        rules: {
            // 允许被哪个搜索引擎抓取
            UserAgent: '*',
            // 不允许抓取的页面
            Disallow: ['/person*'],
            // 允许抓取的页面
            Allow: [ '/detail*', '/label', '/label-tag/*', '/archive'],
            // 生成sitemap.xml
            Sitemap: (req: any) => `https://${req.headers.host}/sitemap.xml`
        }
    }
})

关于robots.txt的编写规则 see: https://developers.google.cn/search/docs/crawling-indexing/robots/create-robots-txt?hl=zh-cn

meta标签

配置全局meta标签

export default defineNuxtConfig({
    app: {
        head: {
            meta: [
                {
                    "name": "keywords", // 网站关键字
                    "content": ""
                },
                {
                    "name": "description", // 网站描述
                    "content": ""
                },
            ]
        }
    }
})

配置单个页面的meta标签可借助useHead这个api实现

 

useHead({
  title: "标题",
  meta: [
    {
      name: "description",
      content: "描述",
    },
    { name: "keywords", content: "" },
  ],
});

useHead支持使用响应式变量

注:useHead只能在路由组件中使用

关于更多编写meta标签的技巧可自行查阅相关文档

 

4.感知优化

渐进式加载图片

关于渐进式加载图片nuxt3提供了一个插件:@nuxt/image-edge

安装:

npm i @nuxt/image-edge -D

nuxt.config.ts下写入

 

export default defineNuxtConfig({
  modules:['@nuxt/image-edge']
})

完成以上操作后即可使用:<nuxt-img/> 组件

关于更详细的使用说明:nuxt-image文档  

 

关于以上nuxt-image插件的一些碎碎念:

之前有尝试使用过,结果就是本来10mb的项目大小直升55mb真可谓是加量不加价,直到最后我并未采用这个插件。

 

首屏骨架屏加载

首屏优化,APP内常见的加载时各部分呈现灰色色块,针对骨架屏生成,业内已有不少解决方案,比如:常用的UI组件库中就有相应的骨架屏组件

 

 

5.排除冗余css样式

排除冗余css样式可借助 nuxt-purgecss 插件实现

安装:

npm install --save-dev nuxt-purgecss

配置:

export default defineNuxtConfig({
  modules:['nuxt-purgecss'],
  purgecss: {
    // 开发环境时应关闭  
    enabled: process.env.NODE_ENV === 'production' ? true : false,
    // 加入白名单 
    // 值:字符串(id,class,标签)选择器,正则,伪类
    safelist: [
      /w-e.+/,
      'editor—wrapper',
      'page-nav-box',
      // New Vue3 selectors
     /:slotted/,
     /:deep/,
     /:global/
    ],
  },
})

关于以上插件nuxt-purgecss即使你在开发中关闭了它但你开发运行还是会报错,只要下载了nuxt-purgecss开发环境会导致项目运行错,需要把nuxt-purgecss删除才可正常运行,@nuxtjs/robots和上述情况一致。

标签:nuxt3,robots,ssl,构建,export,txt,优化,id,nuxt
From: https://www.cnblogs.com/cczlovexw/p/17851988.html

相关文章

  • 构建树结构(节点级别,全路径)
    packageorg.example.tree;importorg.springframework.util.CollectionUtils;importjava.util.*;/***@ClassNameTreeUtils2*@DescriptionTODO*@Authorhrp*@Date2023/11/2314:39*/publicclassTreeUtils<NextendsTreeNode<T,RC,LC>,......
  • 基于 Flink SQL 和 Paimon 构建流式湖仓新方案
    本文整理自阿里云智能开源表存储负责人,FounderofPaimon,FlinkPMC成员李劲松在云栖大会开源大数据专场的分享。本篇内容主要分为四部分:数据分析架构演进介绍ApachePaimonFlink+Paimon流式湖仓流式湖仓Demo演示数据分析架构演进目前,数据分析架构正在从Hive到Lakehouse的演变......
  • Volatile(编译优化阶段)
    作用:告诉编译器该变量是容易发生变化的,不能对该变量进行优化,每次取值都必须从内存中取值而不是直接去取之前在寄存器中的值例子:Volatileinta=20,b,c;b=a;C=a;代码执行流程如下;B=a;先从a的内存中取值存放到寄存器,再把寄存器的值给存到b的内存C=a;把寄存器的值给存到b的......
  • 大规模神经网络优化:神经网络损失空间“长”什么样?
    前言 如何刻画网络的优化性质呢?在优化相关的论文中,通常通过分析Hessian矩阵及其特征值,或者将损失函数进行一维或二维的可视化来分析网络的优化性质。我们希望这些指标能够帮助我们更好的理解网络损失的landscape,优化器优化轨迹的性质等等。我们希望将这些指标刻画的性质与优化......
  • 数据分析从入门到高级,10分钟帮你构建知识体系!
    数据分析是一种通过收集、整理、解释和可视化数据来获得洞察力和做出决策的过程。它在各行各业都起着至关重要的作用,包括市场营销、金融、医疗保健、人力资源等领域。在本文中,我将为你介绍数据分析的入门知识,并逐步向你介绍一些高级概念和技巧。入门知识1.数据分析的基本概念......
  • 斯坦福大学引入FlashFFTConv来优化机器学习中长序列的FFT卷积
    斯坦福大学的FlashFFTConv优化了扩展序列的快速傅里叶变换(FFT)卷积。该方法引入Monarch分解,在FLOP和I/O成本之间取得平衡,提高模型质量和效率。并且优于PyTorch和FlashAttention-v2。它可以处理更长的序列,并在人工智能应用程序中打开新的可能性。处理长序列的效率一直是机器学习......
  • SQL优化
    1、用join连接代替子查询,尽量避免使用子查询2、只返回必要的列,用具体的字段名代替select*语句3、如果对groupby语句的结果没有排序要求,要在语句后面加orderbynull(group默认会排序)4、尽量使用where子句代替having子句(where是先过滤,having是后过滤)  参考文章【1】htt......
  • mysql大数据量的分页慢优化
    例子这边通过一张40w条记录的表来说明一下优化大数据量表分页慢的思路表单自带拼接语句SELECTtbPage.*FROM(SELECTtbTemp.*,row_number()over(ORDERBYID)-1ASrownum__FROM(SELECT__T1.IDA......
  • 【题目-任务安排2】斜率优化dp
    题解首先,递推关系如下:\(dp[i]=min(dp[i],dp[j]+sumt[i]*(sumc[i]-sumc[j])+s*(sumc[n]-sumc[j]));\)显然N太大,无法\(O(n^2)\)算法解决问题。考虑如何优化掉第二个j的循环,发现这个循环是找最优的j位置假设\(j\)就是最优位置,那么可以先初步消掉min,接着如下分析:......
  • 深入Android多线程编程与性能优化
    引言在上一篇的入门篇中,我们对Android线程的基础概念和多线程编程模型有了初步了解。本篇将深入探讨多线程编程技术和性能优化策略,以提升应用的效率和响应性。高级多线程编程技术使用线程池管理线程线程池是一组预先创建的线程,用于执行任务。通过使用线程池,可以避免不断创建和销毁......