浅析 vue-router 源码和动态路由权限分配
背景上月立过一个 flag,看完 vue-router 的源码,可到后面逐渐发现 vue-router 的源码并不是像很多总结的文章那么容易理解,阅读过你就会发现里面的很多地方都会有多层的函数调用关系,还有大量的 this 指向问题,而且会有很多辅助函数需要去理解。但还是坚持啃下来了(当然还没看完,内容是真的多),下面是我在政采云(实习)工作闲暇时间阅读源码的一些感悟和总结,并带分析了大三时期使用的 vue-element-admin 这个 vuer 无所不知的后台框架的动态路由权限控制原理。顺便附带本文实践 demo 地址: 基于后台框架开发的 学生管理系统。
vue-router 源码分析
首先阅读源码之前最好是将 Vue 和 vue-router 的源码克隆下来,然后第一遍阅读建议先跟着官方文档先走一遍基础用法,然后第二遍开始阅读源码,先理清楚各层级目录的作用和抽出一些核心的文件出来,过一遍代码的同时写个小的 demo 边看边打断点调试,看不懂没关系,可以边看边参考一些总结的比较好的文章,最后将比较重要的原理过程根据自己的理解整理出来,然后画一画相关的知识脑图加深印象。
前置知识 ...
查漏补缺知识沉淀(一)
flex的不知道的属性从左到右:依次为order,flex-grow,flex-shrink,flex-basics
依次为: 排列顺序,放大比例,缩小比例,项目主轴宽度
order属性定义项目的排列顺序。数值越小,排列越靠前,默认为0。
flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。
flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。
flex-basics 主轴宽度
flex属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。
算法基础时间复杂度和计算方法
计算时间复杂度就是计算代码执行多少次,循环多少次。
例:
o(1)n+1=2console.log(n)o(n)for(let i = 0;i < n;i++){ console.log(i)}o(n^2)for(let i =0;i<n;i++){ for(let j = 0;j < n;j++) ...
MongDB快速上手日记(一)
MongoDB
文档
常用数据库
关系型数据库
mysql
被收购了,开源数据库,说不定那天就收费了
oracle
稳定,性能强,可定制可优化,容灾
PostgreSQL
传统 sql类型语言
支持json
适合分布式系统
nosql数据库(key/value数据库)
mongodb
分布式系统有良好的兼容性
对机器的要求高一点,但是能承受的并发量,和读写单表的数据大小要比mysql好很多
在老一点版本mysql 5.7之前,单表数据1000万的时候,进行插入和加索引查询比较慢,而mongoDB到达1亿左右的数据都不会有明显的下降
redis
memocache
mongoDB 使用
推荐docker 方式
https://www.runoob.com/docker/docker-install-mongodb.html
docker run -p 27017:27017 -v $PWD/db:/data/db -d mongo:3.6.15docker ps -a 查看 mongo id编号# 进入 容器内部dock ...
vue-element-admin源码学习
中后台学习页面的主要路由分析
全局是一个大的容器,APP.vue,然后显示的组件时layout,layout组件的构成
slide-bar
header
app-main 其中app-main也是一个容器,承载页面的主要内容,用router-view显示子路由
{ path: '/', component: Layout, redirect: '/dashboard', children: [{ path: 'dashboard', name: 'Dashboard', component: () => import('@/views/dashboard/index'), meta: { title: 'Dashboard', icon: 'dashboard' } }] },
可以看出,layout组 ...
聊点儿论坛项目开发文档(一)
Docker入门使用:blue_car:安装并配置加速地址
常用命令
docker ps 查看进程docker ps -a 查看所有进程systemctl restart docker 重启服务docker stop 服务名实操docker run --name root -e MYSQL_ROOT_PASSWORD=123456 -p 8270:3306 -d mysql 拉取mysql docker镜像并且开启服务 将端口号映射到8270端口docker ps 查看进程docker stop root 停止root mysql服务docker rm root 销毁mysql服务docker logs -f root 查看服务具体日志
docker服务不需要考虑环境问题就能跑起服务,非常有效
docker-compose集合命令 用于创建多个docker镜像服务
#下载:curl -L https://get.daocloud.io/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`unam ...
记一次codeReview
记一次codereview
就在昨天晚上,交易平台前端为我准备了一个特别的礼物-作为实习生进行一次code-review。过程中十分深刻,自那以后我从内心深处对团队成员发自肺腑的佩服。此记作为记录,或作笔记。
code-review准备(战前准备)虽然code-review是将代码分享出来,然后团队成员一起讨论优化给出意见,但是作为实习生就应该在code-review之前将代码尽自己的最大能力优化,争取做到不后悔。毕竟这像是程序员之间的批斗会 👶,所以在上周接到师姐的嘱咐之后我就开始了优化之路。
首先我从这次的交易中心订单接入支付单项目需求下手,整理出来需求概述,主要逻辑,主要操作的组件代码,主要可以优化点,未来需要做的点,从这些方面下手做出来一份md文档。因为我这个人如果没有良好的规划,做事情老是喜欢丢三落四。ok,完成第一步。
code-review准备(优化代码)首先先把需要优化代码的需求列出来,这次需求主要操作的对象就两个,一是状态,而是按钮权限。
订单列表页面(此处不需要考虑是否是经办人),根据接口返回的operation和支付单的状态显示不同的状态和操作按钮,每种操作按 ...
风袖小程序项目开发文档(一)
首页小程序分层结构:页面js -数据绑定view层 业务逻辑层 桥梁Model层 处理业务寻找业务对象 重要
首页发送请求定义成model处理业务,然后就是页面js接收数据
封装原生wx,request 使用promisic工具方法
class Http{ static async request({ url, data, method='GET' }){ return await promisic (wx.request)P{ url:`${config.basesURL}${url}`, data, method, header:{ appkey:config.appkey } } ...
快速上手Springboot(一)
java8语法类和对象变量一个类可以包含三种变量:局部变量,成员变量,类变量
public class Dog{ // 成员变量 String breed; int age; String color; // 局部变量 public Dog(String name){ String dogName; } // 类变量 static final username = 'ZhangSan' void barking(){} void hungry(){} void sleep(){}}
构造方法用来初始化对象,一个对象必须要有一个构造方法
public class Pub{ public Pub(String name){ System.out.println("") }}
创建对象
声明
实例化 ...
探索JS类型转换
JS类型转换JS有哪些类型JS 类型分为值类型和引用类型,值类型包括数字、字符串、布尔、Symbol,undefined引用类型包含对象、数组
值类型
let a = 100let a = truelet a = '12'let a = Symbol('12')// 使用typeof检验类型let a = 100 // 'number'let a = true // 'boolean'let a = '12' // 'string'let a = Symbol('12') // 'symbol'let a = undefined // 'undefined'let a = null //历史遗留问题 object
引用类型
let a = [1,2,3] //objectlet a = {b:12} //object
二者唯一区别
值类型用栈模型解释存储,引用类型使用堆栈模型解释
let ...
前端工程师不可不知的 Nginx 知识
前端工程师不可不知的 Nginx 知识历史背景互联网的全球化导致了互联网的数据量快速增长,加上本世纪初摩尔定律在单核 CPU 上的失效,CPU 朝着多核方向发展,而 Apache 显然并没有做好多核架构的准备,它的一个进程同一时间只能处理一个连接,处理完一个请求后才能处理下一个,这无疑不能应对如今互联网上海量的用户。况且进程间切换的成本是非常高的。在这种背景下,Nginx 应运而生,可以轻松处理数百万、上千万的连接。
Nginx 优势
高并发高性能
可扩展性好
高可靠性
热部署
开源许可证
Nginx 主要应用场景
静态资源服务,通过本地文件系统提供服务
反向代理服务、负载均衡
API 服务、权限控制,减少应用服务器压力
Nginx 配置文件和目录通过 rpm -ql nginx 可以查看 Nginx 安装的配置文件和目录。
如图是我在某某云上安装的最新稳定版本的Nginx的配置文件及目录。
/etc/nginx/nginx.conf 核心配置文件
/etc/nginx/conf.d/default.conf 默认http服务器配置文件
/etc/nginx/fastcgi_p ...