静态资源访问加速:CDN
1.1 CDN加速是什么?
CDN 全称 Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。
通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN 系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet 网络拥挤的状况,提高用户访问网站的响应速度。
CND 加速主要是加速静态资源,如网站上面上传的图片、媒体,以及引入的一些 Js、css 等文件。
CND 加速需要依靠各个网络节点,例如 100 台 CDN 服务器分布在全国范围,从上海访问,会从最近的节点返回资源,这是核心。
CND 服务器通过缓存或者主动抓取主服务器的内容来实现资源储备。
简单得来说,CDN 的作用就是,当我们向服务器请求某些资源 (例如静态资源),哪个服务器最快最稳定,我们就去哪个服务器获取。同时 CDN 的成本也比较低。
1.2 为什么要使用CDN
如果你在经营一家网站,那你应该知道几点因素是你制胜的关键:
内容有吸引力 访问速度快 支持频繁的用户互动 可以在各处浏览无障碍
另外,你的网站必须能在复杂的网络环境下运行,考虑到全球的用户访问体验。你的网站也会随着使用越来越多的对象 (如图片、帧、CSS 及 APIs ) 和形形色色的动作 (分享、跟踪) 而系统逐渐庞大。所以,系统变慢带来用户的流失。
1.3 常见CDN服务器
- 自己的 CDN 服务器:在阿里云、腾讯云、华为云、Google、亚马逊等都可以购买到。
- 开源的 CDN 服务器:例如 unpkg、JSDelivr、cdnjs
JavaScript数组递归:构建ElementUI级联选择器的树形数据
1.1 前端处理
通常,我们前端在开发管理后台的时候,会选择 vue+element
这样的技术栈去实现。但我们后端给的数据格式通常并不符合 element
的参数数据要求。比如,级联选择器 cascader
的参数数据格式如下:
1 | [{ |
而我们后端在输出接口的时候,是极少采用这种数据格式的。比如,一般叫 id|name|child 这样的字段名。
我们知道,cascader 是支持这样的别名参数设计的,因此我们使用时也没什么问题。
但是我今天遇到的一个状况是,后端直接给出了一个一维数组,换句话说,这位兄弟是直接查了一下数据表,把所有的数据通过一个数组直接给我返回了。而至于我怎么使用这个数据,他就不考虑了,因为他还有其他业务需要开发。
后端返回的数据格式如下:
1 | [{ |
嗯,理解。不就是个简单的递归嘛!我一会儿就写好了。但我担心后面其他地方还有这样类似的接口输出,那我总是写递归不就很麻烦了吗?因此,将此方法抽离,并加了一些扩展,最终方法代码如下:
1 | export const makeElementTree = (params) => { |
在业务代码中,我们首先引入我们的方法,然后传进去参数就可以啦,如下演示:
1 | const treeCats = makeElementTree({ |
1.2 后端数据处理
如果是后端直接处理后返回,则递归如下:
1 | def makeTree(pid, arr): |
最后,在编程中,慎用递归!!!
el-date-picker的常规使用
HTML 页面部分
1 | <el-form-item label="时间" prop="testDate"> |
JavaScript 部分
1 | export default { |
解决方案:el-cascader级联选择器出现空面板的问题
Cascader级联选择器出现空面板的问题
vue、element、el-element

出现空白面板是因为树形结构的数据的最底层 children 是个空数组。遇到这种问题,前端可以通过递归,将 children 长度为 0 的节点对象的 children 属性删除,或将值赋为 undefined
1 | cleanData(itemList) { // 将根节点的 children 传入,传入的只是数据对象的引用 |
解决方案:el-input如何绑定按键修饰符
vue 允许将按键值作为修饰符来使用,如监听回车事件,有两种写法,如下代码:
1 | <input type="text" @keyup.13="console.log($event)"></input> |
当我们在 el-input 采用如上两种写法时,他是不生效的。el-input 监听不到键盘事件,原因是 element-ui 是封装组件,所以 el 标签属于自定义标签,因此触发不了键盘事件。
解决办法 :加上 .native
原生事件修饰符即可。
.native
:监听组件根元素的原生事件,主要作用是给自定义的组件添加原生事件。vue 与 elementUI 中给 el-input 绑定键盘按键代码如下:
1 | <el-input |
解决方案:通过yarn安装全局包后无法找到命令
1.1 背景描述
- 操作系统:macOS
- 通过 npm 全局安装的 yarn
1.2 问题描述
通过命令 yarn global add packageName
后,试图该模块的命令,发现无法找到

1.3 问题分析
macOS 在安装完 npm 后,再通过 npm 安装 yarn。则 yarn 相关配置和包路径默认位于家目录下

通过 yarn global add 安装包,则会被安装到 ~/.config/yarn/global/node_modules/
中
而该路径是没有配置在环境变量中的,因此无法找到。
1.4 解决方案
将上述路径配置到环境变量中即可。此处我是配置在 ~/.zshrc
中,大家可以视自身所用的 shell 自行决定。
配置如下:
1 | export PATH="$PATH:`yarn global bin`:$HOME/.config/yarn/global/node_modules/.bin" |
配置后保存,执行 source ./.zshrc
结果如下:

jdk中java、javax、sun和org包的区别
JDK 中有以下一类基础类库包,java、javax、sun、org,这些包有什么区别呢?
Terminal、iTerm2、zsh和oh-my-zsh
作为一名程序员,我们跟终端打交道的频率非常地高,终端的是否好用,往往跟我们的效率关系很大。一开始用的是 MacOS 自带的 zsh,有时候在敲很长的 shell 命令时,发现打错了某个字符,想要修改,很是麻烦。这让我不禁想,要是终端命令也能用 vi 来编辑该多好!!!于是开始捣鼓,我发现了 oh-my-zsh