带你走进面试.......(未完待续)

    

当前路径:{{$route.path}}

    

当前参数:{{$route.params | json}}

    

路由

二.谈谈router如何实现懒加载:

二.谈谈router如何实现懒加载: 二.谈谈router如何实现懒加载:

二.谈谈router如何实现懒加载:

名称:{{$route.name}}

    

路由查询参数:{{$route.query | json}}

    

路由匹配项:{{$route.matched | json}}

二.谈谈router如何实现懒加载:

 1.$router和$route的区别:

1.$ router是用来操作路由的,$ route是用来获取路由信息的。

  • 1.$router是VueRouter的一个实例

他包含了所有的路由,包括路由的跳转方法,钩子函数等,也包含一些子对象(例如history)

常用的跳转连接的方法:

this.$router.push("/login");
//使用对象的形式 不带参数
this.$router.push({ path:"/login" });
//使用对象的形式,参数为地址栏上的参数
this.$router.push({ path:"/login",query:{username:"jack"} }); 
使用对象的形式 ,参数为params 不会显示在地址栏
this.$router.push({ name:'user' , params: {id:123} });
  • 2.$ route是一个跳转的路由对象(路由信息对象),每一个路由都会有一个$route对象,是一个局部的对象。
  • 在页面上添加以下代码,可以显示这些路由对象的属性:二

<div>
    <p>当前路径:{{$route.path}}</p>
    <p>当前参数:{{$route.params | json}}</p>
    <p>路由名称:{{$route.name}}</p>
    <p>路由查询参数:{{$route.query | json}}</p>
    <p>路由匹配项:{{$route.matched | json}}</p>
</div>
二.谈谈router如何实现懒加载:

  • vue异步组件
  • es提案的import()
  • webpack的require,ensure()

1.vue异步组件技术 ==== 异步加载
vue-router配置路由 , 使用vue的异步组件技术 , 可以实现按需加载 .
但是,这种情况下一个组件生成一个js文件

/* vue异步组件技术 */
{
  path: '/home',
  name: 'home',
  component: resolve => require(['@/components/home'],resolve)
},{
  path: '/index',
  name: 'Index',
  component: resolve => require(['@/components/index'],resolve)
},{
  path: '/about',
  name: 'about',
  component: resolve => require(['@/components/about'],resolve)
} 

2.组件懒加载方案二 路由懒加载(使用import)

// 下面2行代码,没有指定webpackChunkName,每个组件打包成一个js文件。
/* const Home = () => import('@/components/home')
const Index = () => import('@/components/index')
const About = () => import('@/components/about') */
// 下面2行代码,指定了相同的webpackChunkName,会合并打包成一个js文件。 把组件按组分块
const Home =  () => import(/* webpackChunkName: 'ImportFuncDemo' */ '@/components/home')
const Index = () => import(/* webpackChunkName: 'ImportFuncDemo' */ '@/components/index')
const About = () => import(/* webpackChunkName: 'ImportFuncDemo' */ '@/components/about')

3.webpack提供的require.ensure()
vue-router配置路由,使用webpack的require.ensure技术,也可以实现按需加载。
这种情况下,多个路由指定相同的chunkName,会合并打包成一个js文件。

/* 组件懒加载方案三: webpack提供的require.ensure() */
{
  path: '/home',
  name: 'home',
  component: r => require.ensure([], () => r(require('@/components/home')), 'demo')
}, {
  path: '/index',
  name: 'Index',
  component: r => require.ensure([], () => r(require('@/components/index')), 'demo')
}, {
  path: '/about',
  name: 'about',
  component: r => require.ensure([], () => r(require('@/components/about')), 'demo-01')
}

三.谈谈vue首页白屏怎么处理:

(1)什么是白屏?

现在很多页面使用模版渲染,在网速不好的情况下,会导致出现loading 或者空白页,这种就叫白屏。

(2)白屏出现的原因【根本原因:网速 & 静态资源】

css 文件加载需要时间【解决:css 代码前置或者内联。】
首屏内联js 会影响加载时间 【解决:尽量不在首屏中加载JS,或者放置内联脚本】
首屏没有实质的数据,是通过接口异步加载进来的【解决:首屏直接同步渲染 html ,页面滚动时异步加载】

解决:

1.路由懒加载

2.开启gzip压缩

// 以vue-cli脚手架为例  找到config下index.js文件
 
build: {
    // Template for index.html
    index: path.resolve(__dirname, '../dist/index.html'),
 
    // Paths
    assetsRoot: path.resolve(__dirname, '../dist'),
    assetsSubDirectory: 'static',
    assetsPublicPath: '/',
 
    /**
     * Source Maps
     */
 
    productionSourceMap: true,
    // https://webpack.js.org/configuration/devtool/#production
    devtool: '#source-map',
 
    // Gzip off by default as many popular static hosts such as
    // Surge or Netlify already gzip all static assets for you.
    // Before setting to `true`, make sure to:
    // npm install --save-dev compression-webpack-plugin
    // 设置生产环境gzip为true
    productionGzip: true,   
    productionGzipExtensions: ['js', 'css'],
 
    // Run the build command with an extra argument to
    // View the bundle analyzer report after build finishes:
    // `npm run build --report`
    // Set to `true` or `false` to always turn it on or off
    bundleAnalyzerReport: process.env.npm_config_report
  }

3.3.使用webpack的externals属性把不需要打包的库文件分离出去,减少打包后文件的大小

// index.html中引入对应的文件或使用cdn
 
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
 
 
// 在webpack基础配置中添加以下代码
 
module.exports = {
  //...
  externals: {
    jquery: 'jQuery'
  }
};

4.使用vue的服务端渲染(ssr)

ssr优点是seo优化,以及加快首屏加载 

5.1.使用CDN减小代码体积加快请求速度

1.在index.html里引入线上cdn

configureWebpack:{
	externals: {
      'echarts': 'echarts',
      'vue': 'Vue',
      'vuex': 'Vuex',
      'vue-router': 'VueRouter',
      'axios': 'axios',
      'moment': 'moment',
      'element-ui': 'ELEMENT'
    },
}

3.注释main.js里的import

6..图片放在oss上,不放在项目的assets文件夹下

对象存储(oss)提供内置的CDN集成,可以缓存资产以加快页面加载速度。对象存储非常适合存储静态资源,例如,用于存储用户定义的内容:图像和电影,存储备份文件和日志。
更换项目里的图片路径,为线上地址即可

6.压缩代码,移除console.log

  1. npm i uglifyjs-webpack-plugin@1.1.1 --save-dev
  2. 配置vue.config.js
  3. const isProduction = process.env.NODE_ENV === 'production';
    const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
    chainWebpack(config) {
        const plugins = [];
        if (isProduction) {
          plugins.push(
            new UglifyJsPlugin({
              uglifyOptions: {
                output: {
                  comments: false, // 去掉注释
                },
                warnings: false,
                compress: {
                  drop_console: true,
                  drop_debugger: false,
                  pure_funcs: ['console.log']//移除console
                }
              }
            })
          )
        }
      }
    

    四.vue与react,angular的比\

  4. vue轻量级的框架,只关注视图层,是一个构造函数的视图集合,大小只有几十kb

  5. 简单易学,国人开发的,中文文档,不曾在与障碍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值