自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

阿嚏乱码的地方

用文字抵抗遗忘~

  • 博客(148)
  • 收藏
  • 关注

原创 谷歌开发者工具之功能面板

Network 面板用的最多的面板,可查看 Ajax 请求,页面访问时间线等等。Performance 面板查看JS性能,详情可看我的另一篇文章:《如何使用谷歌浏览器开发者工具中的Performance分析网页性能》Rendering 面板查看页面渲染,F12打开开发者面板后按 esc 退出键打开 Rendering 面板。Coverage 面板查看代码使用率Unused Bytes 就是未使用的代码率,具体选中一行,就能...

2021-12-19 11:10:10 1116

原创 浏览器渲染原理

页面渲染流程浏览器收到web网页的内容后会开始下载 HTML、CSS、JS,并绘制 DOM树和 CSS 树,当两颗树都绘制完成后会合并成一个渲染树。然后再经过Layout、Paint、Composite,最终完成渲染。HTML 解析会被 JS 阻塞当 HTML 开始解析时遇到 JS 会停止解析 HTML,并执行 JS,因为 JS 可能会进行 DOM 操作,如果 HTML 解析完成后再执行 JS,性能开销会大一些。当然也可以在 js 脚本中加上 defer,这样 HTML 就能先被解析完.

2021-12-17 16:28:42 250

原创 Nuxt.js框架服务端渲染二进制blob流下载

Server端在服务端添加一个 stream 属性,用来标识为流下载的接口。[`${METHOD.get} /env/download`]: async ctx => { const res = await ctx.fetch('env/download', { method: METHOD.get, stream: true, }) ctx.body = res[0].stream() },在服务端拿到数据时 blob() 一下。..

2021-09-18 10:34:10 697

原创 DNS 与 TCP 入门

DNS:domain name system:域名系统DNS 是指用户在浏览器中输入 baibu.com 回车,这个域名会先问浏览器有没有DNS缓存,如果没有缓存就会问操作系统有没有DNS缓存,如果还没有,则向ISP(移动、联通、电信等网络运营商)发送请求,运营商会返回一个对应的 IP,浏览器拿到这个 IP 就可以开始建立 TCP 连接了。通过域名拿到对应的 IP,着整个流程就是 DNS。hosts:Host 指的就是操作系统中的 DNS 缓存。TCP之三次握手:假设 A

2021-08-11 20:52:55 584

原创 TypeScript基础知识

前言TS是 JS 的泛型,你可以理解为可以把 TS 当成 JS 来用也没问题,只是TS 比 JS 多了一些额外的用法。TS 的用法TS 有 JS 没有的东西anylet a:any = 'hi'b.nameany没有任何限制,都可以。unknowntype B = {name: string}let a:unknown = JSON.parse('{"name":"tione"}')console.log((b as B).name) // 断言同

2021-08-10 20:11:45 127

原创 房地产营销19讲之读书笔记

器、术、道我本人虽然目前从事的称之所谓程序员的工作,看似与销售风马牛不相及,但是在术与道的层面上,不同行业中很多道理是想通的,读完了房地产营销19讲,被作者的文字所触动,案例详实,考究严谨,每一讲或者说每一条抽象凝练的理论都有案例、数据支撑,读的很过瘾,很有启发,我将一些对我很有启发的笔记摘抄如下:第一讲:地产营销“逻辑树”房地产营销同样可以采用麦肯锡“逻辑树”的方法将其分成若干个树枝,然后再大树枝上面有分出若干个小树枝,小树枝上面又继续分出若干个小树枝,直到无法穷尽,最后吧营销工作细分成直

2021-07-21 21:28:25 1160

原创 大屏可视化之适配和布局

前言在做可视化大屏的时候,我们首先要保证UI图的比例不变,例如16:9的UI图,但大屏的比例可能是2:1,很多时候大屏的比例往往很少能与UI图的比例一模一样的,这个时候我们就要利用公式换算来适配大屏。例如16:9的UI图:适配大屏当页面首次加载时,判断视口的宽高,如果视口的宽/高 > 16/9 则说明视口宽度比较设计图宽,实际的显示宽度应该等于视口的高度*16/9。如果视口的宽/高 < 16/9 则说明视口高度比设计图高,实际的显示宽度应该等于视口的宽度,显示高度应等

2021-06-30 15:33:07 4987 1

原创 Webpack之优化

单独打包 runtime什么是runtime?为了让某个东西能够运行而提供的代码叫runtime,这里指为了能让IE运行而提供的代码。通过单独打包runtime,在代码和依赖没有变化的情况下,此后即可不再被重复打包,节省时间。webpack.config.jsmodule.exports = { optimization: { runtimeChunk: 'single', },}单独打包 node 依赖webpack.config.jsmodule.e

2021-06-24 19:54:11 346

原创 webpack配置打包支持scss、自动import全局文件、分享变量、单独提取css文件、自动生成HTML页面

支持scsswebpack.config.js { test: /\.s[ac]ss$/i, use: [ 'style-loader', 'css-loader', 'sass-loader', ], },scss自动import全局文件webpack.config.js use: [ 'style-loader',

2021-06-23 20:22:54 1894

原创 webpack配置打包js,jsx,ESLint插件、TypeScript、TSX

前言webpack输入代码支持IE用babel-loader打包JS用babel-loader打包JSX给webpack

2021-06-18 15:41:37 2422

原创 Webpack之plugin浅析

Webpack流程图plugin思路自己写webpack pluginloader与

2021-06-16 15:18:57 360

原创 Webpack之源码浅析

前言用了很长时间webpack,lodaer、plugin也用的很多了,但始终好奇webpack的内部运行机制是怎样的,我花了些时间看了些webpack源码,在这里用文字将他们记录下来。准备工作创建三个文件demo、webpack、webpack-cli 三个项目,其中demo 项目用于调用 demo/node_modules/webpack-cli 将 src/index.js 打包为 dist/main.js webpack 项目盛放的是从 github 下载的 webpack 源码.

2021-06-11 17:26:55 1548

原创 前端使用sentry来做线上监控

前言如果线上出现报错,不是后端的问题而是前端的问题,请问如何定位?这是我们目前项目中比较尴尬的一个点,有几次线上排查问题,问题定位到前端这个环节,因为没有日志的原因,很难确定bug的出处。于是我决定使用一个工具能打印出线上报错的日志。调研了一番,最后决定使用sentry。什么是sentry?无论测试如何完善的程序,bug总是免不了会存在的,有些bug不是每次都会出现,测试时运行好好的代码可能在某个用户使用时就歇菜了,可是当程序在用户面前崩溃时,你是看不到错误的,当然你会说:”Hey,

2021-05-11 17:14:29 1315 1

原创 在nuxt.js框架下阻止路由跳转

前言在nuxt.js框架中,是自带了路由处理的,但是它自带的路由功能并没有vue-router的功能强大。例如我们的要做一个路由守卫,在路由发生跳转前做一些判断,如果判断不通过则不给路由跳转。怎么做?仅仅只用nuxt.js框架很难解决,但我们可以通过nuxt.js中的plugin插件系统引入vue-router。解决文件路径:src/plugins/router.jsexport default ({ app ,store }) => { app.route.

2021-04-29 09:51:24 1914

原创 发送和接收二进制数据(Blob),也就是流

前言可以通过设置一个XMLHttpRequest对象的responseType属性来改变一个从服务器上返回的响应的数据类型。可用的属性值为空字符串 (默认),"arraybuffer", "blob", "document","json" 和 "text".response属性的值会根据responseType属性包含实体主体(entity body)。它可能会是一个ArrayBuffer,Blob,Document,JSON, string,或者为NULL(如果请求未完成或失败)...

2021-04-25 15:44:59 2815

原创 Webpack之loader

前言基于上次实现的简易打包器,我们只需在获取文件的位置区分是js文件还是css文件,如果是css文件则走css相关逻辑。核心代码:let code = readFileSync(filepath).toString() if(/\.css$/.test(filepath)){ code = ` const str = ${JSON.stringify(code)} if(document){ const style = document.c

2021-04-17 20:16:43 96

原创 Webpack之核心——打包

为什么要打包因为要解决两个关键问题:因为某些浏览器不支持: import和export关键字。 防止文件过多。import b from './b.js'const a = { value: 'a', getB: () => b.value + ' from a.js'}export default a1、浏览器不支持 import和export关键字虽然谷歌浏览器支持 <script type="module"></script> 写法,可

2021-03-30 20:31:01 483

原创 nuxt.js之SSR服务端内存泄漏导致CPU过高的解决过程

问题最近在公司维护nuxt项目时,线上遇到了一个问题——访问网站,网站会报502或者JS、css资源报502。去运维那一查pm2,项目node服务器的CPU达到了100%,实际上这段时间并没有人访问,那是为什么CPU会100%从而导致node服务器无法正常运行?分析太多的分析就不说了,期间向几个方向都排查过:nuxt社区有人说是nuxt框架问题,某些版本会出现node服务端内存泄漏。 第三方组件未在destroy时进行释放,或者事件监听,页面关闭后未解绑事件。 代码的书写问.

2021-03-24 11:19:24 5325 6

原创 Webpack之AST、Babel、依赖

什么是ASTBabel相关使用通过检测key来避免重复循环依赖

2021-03-20 17:08:25 594

原创 在Nuxt项目中使用Nginx

Nginx的好处性能:静态文件(CSS、JS)直接走Nginx读取,无需再走3000端口消耗node服务。请求接口走3000端口到node服务。总的来说可以为node服务节省一部分静态资源的性能。 拓展性:为后期反向代理,负载均衡做准备。可在Nginx上配置转发多个node服务,实现全年365天*24小时无间隙服务器运转。使用Nginx配置静态文件走gzip压缩,在Nginx上配置。server { listen 80; //ipv4 listen [:.

2021-03-16 19:49:57 1023 1

原创 《交互设计——以用户体验为中心的设计》读书笔记

以用户为中心的设计是什么?以用户为中心的设计是一种将产品、应用以及用户体验的使用者置于设计过程中心的位置的设计哲学。实际使用中,你的用户会不断对你设计的用户界面进行再设计。用户会成为与你共同进行设计的同事。你的团队与客户合作与客户合作至关重要,如果你问了你客户一些事情,他们所说的让你很吃惊,那么很可能表示你现在所做的事情可能是不正确的。了解你的用户最成功的产品或项目能够满足实实在在的人的需求。拥有不同的背景,不同的经验,不同水平专业知识的用户,他们喜欢和想要的东西也不相同。..

2021-02-28 20:00:58 567 2

原创 Docker化Node应用

docker化前准备根目录添加:.dockerignore文件node_modules*.logDockerfile文件FROM node:12# Create app directoryWORKDIR /usr/src/appCOPY package.json ./COPY yarn.lock ./RUN yarn installCOPY . .EXPOSE 3000CMD [ "yarn", "start" ]docker化Node应用build应.

2021-02-25 14:28:15 142

原创 nuxt框架偶发报错Loading chunk {n} failed

最近在维护公司项目中的website网站时,发现刷新加载页面时js或css资源会偶发性地出现以下图片报错。该项目是基于nuxt框架搭建的SSR服务器预渲染。于是我思考是不是因为网速慢异步加载导致的报错,我将网速调整成3g网络刷新试验,结果并没有预料中频发。于是我又尝试将项目中的link标签引用的一些css、js文件中异步引用的文件直接打包成一个文件,重新发布后测试仍会偶发。会是哪里出问题了呢?去nuxt社区瞧瞧。找到了一个遇到同样问题的人,这个人2017年就遇到了这个报错并向作者提出。作者答

2021-02-18 15:19:21 801 2

原创 《人月神话》读后感

本人在做软件开发以来,一直对开发当中的种种现象保持疑惑,程序员与项目之间需要保持一个怎样的关系才能获得美妙的平衡?敏捷开发中所倡导的两周一个迭代,增量开发极限编程是如何演变而来的?这些名词一直跟随着我,经过最初的疑惑后也忘了去深究,直到读到《人月神话》这本1975年写的老书,原来道理自在其中,1975年就有人分析了软件开发过程中存在的问题,并给与了一些建议和预言,有些预言甚至在今天都仍然有效。焦油坑一个能用的简单工具程序,一个程序员独立开发一两天就可以完成。但一个成熟的软件产品,拥有上百个功能和.

2021-01-29 15:59:33 381 2

原创 next.js中createConnection热加载报错的解决方法

前言最近在使用next做个人项目中遇到了一个BUG,就是在使用创建typeorm数据库连接的一个API(createConnection)时,当我在本地跑起来后第一次进入页面没有问题,当我修改代码保存后页面再刷新就报错了,非常影响开发的体验,于是我打算看看能不能解决这个问题。解决过程可能的原因:首先我们理一理整个过程,找下报错可能的原因。当我们修改代码后保存,createConnection API当前的页面会再次被执行,那么相应的createConnection API又会被重新.

2021-01-15 17:39:47 627

原创 git-secrets安装教程

前言最近在公司项目中commit代码时加强了检测机制,增加了pre-commit钩子用来检测代码。package.json文件:"pre-commit": "lint-staged""lint-staged": { "linters": { "*": "git secrets --scan-history" }}其中代码检测用到了git secrets,git-secrets是什么呢?主要是防止将密码和其它敏感信息提交到git的一个插件,我在这个安装这个

2021-01-12 14:52:16 853

原创 webstorm模板快速生成

前言我们在使用webstorm开发项目的时候,有时会重复写多个很相似的代码块,经常要从别的代码处复制粘贴后修修改改。那么能不能将这些重复经常写的代码块抽象出来输入一行命令就能展示呢?可以,webstorm内置了这个功能,我们来说下如何使用。步骤1、在webstorm设置中搜索live templates2、找到需要设置的模板类型,我这里选择的是JavaScript(typeScript也包含在js模板设置中),3、添加模板,输入你要取的快捷名,模板介绍等等。...

2021-01-07 16:44:37 1267

原创 HTTP基础知识(三)

基于HTTP的功能追加协议消除HTTP瓶颈的SPDY:Google在2010年发布了SPDY(取自SPeeDY),其开发目标旨在解决HTTP的性能瓶颈,缩短Web页面的加载时间。HTTP的瓶颈,以下的HTTP标准会成为瓶颈:一条连接上只可发送一个请求。 请求只能从客户端开始。客户端不可以接收除响应以外的指令。 请求/响应首部未经压缩就发送。首部信息越多延迟越大。 发送冗长的首部。每次互相发送相同的首部造成的浪费较多。 可任意选择数据压缩格式。非强制压缩发送。暂时的解决方法:Aj

2021-01-04 17:35:50 108

原创 在next.js中使用TypeORM数据库

背景目前TypeORM版本为0.2.29,还未发布v1.0.0 默认支持TypeScript 支持关联(Associations) 支持事务(Transaction) 支持数据库迁移(Migration)启动数据库项目目录里创建blog-data目录 启动PostgreSQL:docker run -v "$PWD/blog-data":/var/lib/postgresql/data -p 5432:5432 -e POSTGRES_USER=blog -e POSTGRE.

2020-12-29 17:14:52 1586

原创 HTTP基础知识(二)

HTTP首部HTTP协议的请求和响应报文中必定包含HTTP首部。首部内容为客户端和服务器分别处理和响应提供所需要的信息。对于客户来说,这些中的大部分内容都无须亲自查看。HTTP请求报文:在请求中,HTTP报文友方法、URI、HTTP版本、HTTP首部字段等部分构成。HTTP响应报文:在响应中,HTTP报文由HTTP版本、状态码(数字和原因短语)、HTTP首部字段3部分构成。HTTP首部字段HTTP首部字段传递重要信息,HTTP首部字段是构成HTTP报文的要素之一。在客户端

2020-12-22 17:23:45 106

原创 前端接收下载流文件如何处理(如Excel文件)?

function getExcel(url, name, type, method) { return Axios[method || 'get']((baseUrl + url), { // 处理二进制对象 responseType: 'blob', }).then((res) => { const blob = new Blob([res.data], {type: type || 'application/vnd.openxml..

2020-12-20 22:05:34 1628

原创 HTTP基础知识(一)

了解Web及网络基础HTTP版本:HTTP于1990年问世,HTTP/0.9 HTTP正式标准公布在1996.5月,HTTP/1.0 1997.1月公布的HTTP/1.1,为当前的主流版本 HTTP/2.0已在2015年5月正式发布,但要达到较高的使用覆盖率,仍需要时间TCP/IP协议族:常用使用的网络是在TCP/IP协议族的基础上运作的,HTTP属于TCP/IP它内部的一个子集 TCP/IP是互联网相关的各类协议族的总称TCP/IP的分层管理:应用层:决定了向用户提供应用服务时

2020-11-30 11:37:23 151

原创 node.js Next框架的三种渲染方式:客户端渲染、SSG、SSR

前言next是一款用JS开发的全栈框架,它是基于express框架基础上开发而成,可以用react写客户端,node.js写服务端。一份代码可在前后端同时运行,这在next中称之为同构!一些next.js框架基础介绍创建项目:npm init next-app 项目名,项目创建好后next会帮你搭好基础通用的模板,大多常用的api以及写法都能在模板中找到。自定义head:使用<Head>组件Next.js APINext.js 三种渲染...

2020-11-23 23:02:45 8321

原创 数据可视化Echarts介绍

前言Echarts原先是由百度开源的一款数据可视化库,现在由Apache Software Foundation (ASF) 孵化管理。它是一款文档非常健全的数据可视化库,你只需要按照文档一步步做,就能做出你想要的可视化效果。那么我们现在开始吧。安装Echarts在项目中安装:yarn add echartsyarn add --dev @types/echarts在项目中引用:import echarts from 'echarts’最后使用echar.

2020-10-31 21:09:08 994

原创 Node.js Express与koa的区别

相同点作者:都是TJ所写,Express在前,Koa在后。功能:都是基于 Node.js 开发的Web框架,API差不多。不同点对Node的支持Express:都支持 Koa:2015年2月,Koa放弃对Node v0.11 以下支持,并开始支持io.js。2015年10月,Koa放弃对Node v4.0以下的支持,并用ES6重写所有的代码,发布v2.0.0内测版。当前Koa 依赖node v7.6.0或 ES2015及更高版本和 async 方法支持。生态Ex...

2020-10-27 17:12:37 581

原创 Node.js Express之API介绍

前言Express一共提供了五个大类的API,每个大类其核心只有几个需要记忆,其它API触类旁通即可(官方文档)。五大类APIexpress.xxx app.xxx request.xxx response.xxx router.xxx一些概念:子应用:let app = express() // 主应用let admin = express() // 另一个应用app.use('/admin', admin) // admin 作子应用挂载点:‘/.

2020-10-26 10:31:42 511

原创 Node.js Express框架入门

为什么会有Web框架?理念:Web框架的主流思路都是MVC Model处理数据相关逻辑 View处理视图相关逻辑,前后端分离之后,View不重要 Controller负责其它逻辑功能:更方便地处理HTTP请求与响应 更方便地链接数据库、Redis 更方便的路由 其它:HTML模板架构示意图框架的封装拿处理HTTP请求与响应举个例子最基础的封装:将请求封装为 [['get', '/xxx'], {请求头},'请求体'] 将响应封装为 [status..

2020-10-23 11:03:59 183

原创 Node.js child_process进程

什么是进程例如我们有一个Chrome.exe的一个程序,不是进程。双击Chrome.exe时,操作系统会开启一个进程。进程是程序的执行实例 程序在CPU上执行时的活动叫做进程 实际上并没有明确的定义,只有一些规则特点:一个进程可以创建另一个进程(父进程与子进程) 通过任务管理器可以看到进程什么是阻塞进程首先我们要了解CPU,它的特点是:一个单核CPU,在一个时刻,只能做一件事情 那么如何让用户同时看电影,听歌、写PPT呢? 在不同进程中快速切换什么是多程序并发执行?.

2020-09-28 11:25:43 570

原创 Node.js Stream流

本文内容大部分从 Node’s Streams文章中翻译得来。Node Streams因难以使用甚至难以理解而享有盛誉。好了,我对你有个好消息-情况不再如此。多年来,开发人员在那里创建了许多程序包,其唯一目的是使使用流变得更加容易。但是,在本文中,我将重点介绍本机Node Streams API。Stream到底是什么?流是数据的集合–就像数组或字符串一样。不同之处在于,流可能不会一次全部可用,并且不必容纳在内存中。当处理大量数据或一次来自一个外部chunk的大量数据时,这使流真正变..

2020-09-25 11:01:14 227

原创 Node.js 数据库基础

第一范式 1NF定义:字段不可再分这是一张选课表,没有违反第一范式,但是存在以下问题:数据冗余、创建时插入异常。删除学生会导致系消失、学生转系时会改动多处。结论:第一范式不够强第二范式 2NF定义(不够严谨):在1NF的基础上,要有键(键可由多个字段组合) 所有字段分别完全依赖于键 如果键是多个字段组合,则不允许部分依赖于该键依赖关系:给出键,就能唯一确定字段的值 如给出学号,就能唯一确定姓名,反之则不行 则称姓名依赖于学号不满足第二范式的地方:上.

2020-09-22 17:01:20 182

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除