Jun

(() => '\u5b66\u4e60\u8ba9\u6211\u5feb\u4e50\uff0c\u5de5\u4f5c\u4f7f\u6211\u5f00\u5fc3')()


  • 首页

  • 标签

  • 归档

  • 代码片段

  • 关于

  • 搜索

关于换工作

发表于 2021-01-05

今天看到一个公众号的文章,搜到了关于是否该换工作的判断标准,做下记录

消耗感

第一个是消耗感,什么意思呢?

就是你在你现在的公司一直在用已经熟练的技能、方法被动地完成事情,不再有新的思考和成长,也就是“吃老本”。

持续吃老本是一个危险信号,这就说明你处在营养流失阶段,一点点被消耗。如果你经常有这种感觉,那这个地方已经不适合你了,你需要新的领域施展拳脚~

盖洛普的12个问题

第二个是盖洛普的12个问题。这12个问题可以用来测试你对当前工作环境的满意度。12 个问题如下:

  • 我知道公司对我的工作要求吗?
  • 我有做好我的工作所需要的材料和设备吗?
  • 在工作中,我每天都有机会做我最擅长做的事吗?
  • 在过去的七天里,我因工作出色而受到表扬吗?
  • 我觉得我的主管或同事关心我的个人情况吗?
  • 工作单位有人鼓励我的发展吗?
  • 在工作中,我觉得我的意见受到重视吗?
  • 公司的使命目标使我觉得我的工作重要吗?
  • 我的同事们致力于高质量的工作吗?
  • 我在工作单位有一个最要好的朋友吗?
  • 在过去的六个月内,工作单位有人和我谈及我的进步吗?
  • 过去一年里,我在工作中有机会学习和成长吗?

如果有超过一半的答案都是笃定的no,说明这份工作对你的成长帮助微乎其微,而且你已然毫无眷恋,完全可以跳槽。

原文地址:https://mp.weixin.qq.com/s/--CS5PWfSEBO6RZl6lV6-Q

Cannot read property 'range' of null

发表于 2021-01-05

Cannot read property ‘range’ of null

引用问题:

https://github.com/babel/babel-eslint/issues/681
https://github.com/babel/babel-eslint/issues/530

这个问题有点烦,在 mono repo 中新增了一个 package 后,eslint 开始抛出这个异常。

按上面的问题描述,大概就是一些版本不一致导致的问题。
尝试了升级eslint、babel eslint等相关版本,clean && install 了无数次,一会儿好一会坏…

解决

最后用这个方案解决了。
https://github.com/babel/babel-eslint/issues/530#issuecomment-438635426

1
2
3
yarn clean
删除所用 lock 文件
yarn install

手写Promise

发表于 2020-09-12

在前面的文章说了要来手写promise,这里整理下实现思路。

概述

class内使用这些属性或者方法描述

  • promiseState 保存当前状态 pending fulfilled rejected
  • promiseResult 保存执行结果
  • promiseFulfillReactions 保存pending之前注册的成功回调方法
  • promiseRejectReactions 保存pending之前注册的失败回调方法
  • onFulfilled promise then onFulfilled 方法
  • onRejected promise then onRejected 方法

Promise A+ 规范参见这里:https://promisesaplus.com/#point-49

有些规范内提到的场景并未实现,比如对 thenable 的支持等,实现的部分包含如下所列出

异步执行回调

Promise的规范并没有要求一定要使用微任务,浏览器原生都是基于微任务这里也做类似实现,首先需要实现一个微任务管理器来管理微任务,像Vue nextTick 那样。

微任务有浏览器中的各类 Observer (MutationObserver InterSectionObserver PerformanceObserver) 和 Promise 的回调,以及Node中的 process.nextTick

实现 nextTick 大致可以两种:

  • 一种就是像 Vue nextTick 会将当前事件循环中加入的所有 fn 保存在一个队列,然后在一个微任务中执行清空一起洗澡,比如下图:
阅读全文 »

hack Vue AsyncComponent 兼容VueRouter 组件内hook

发表于 2020-08-29

知识点

Vue支持对异步组件的加载状态处理,参见这里 Vue异步组件处理加载状态

背景

其实我们大部分使用场景都是结合路由异步加载一起使用,然后可能会导致 Vue组件内的路由钩子无法触发,以前遇到时用了别的方案绕过去了,现在有其它同事也遇到类似问题那就兼容一下

原因是因为:路由组件钩子是触发在路由所指向的跟组件上,所以你触发不到了..,解决方案就是在中间 functional 组件把钩子转发到实际的视图组件。

阅读全文 »

window scroll 事件

发表于 2020-08-14

scroll 事件最熟悉不过的,我自己其实一直有一些疑问:

  • scroll 事件不支持冒泡,那 window 上的 scroll 事件又是如何捕获到的?
  • 为何可以对 document 添加 scroll 事件,怎么又冒泡到了 window 上?
  • window scrollTop 的值到底在 html 还是 body 上 ?
  • …

原本想找到一些官方的规范或者说明文档,但是并没有 …
以下所有测试都是在 DOCTYPE 声明为 html5 的情况下,旧的不在关注

Scroll Bubbles

关于 Scroll 事件冒泡机制这里先做个说明:

  • Element 元素 scroll 事件确实 不冒泡 传播事件,也就是我们的日常体验,比如一个div元素内的滚动事件你无法去委托事件。
  • Ducument 文档 scroll 事件是 冒泡事件,所以在window上去监听 scroll 事件,event target 为 document

这里要注意的就是 Ducument文档 的scroll事件是支持冒泡的,可以在 测试Demo 中代码运行。

阅读全文 »

基于JSON Schema的前端可视化活动编辑器

发表于 2020-07-27

先看效果,为一个可视化活动编辑器。

vue-editor

演示地址:https://form.lljj.me/vue-editor.html#/editor
项目地址:https://github.com/lljj-x/vue-json-schema-form/

基于 JSON Schema 开箱即用的简单活动可视化编辑器。

背景

在做生成一个可视化店铺装修系统的时候,需要解决配置数据表单的通用性,参阅了一些现用的解决方案,最终通过 JSON Schema 来生成对应的表单和校验规则。

参考资料:https://github.com/CntChen/cntchen.github.io/issues/15

JSON Schema 主要运用在如下几点:

  • 基于 JSON Schema 来动态生成数据配置表单和数据校验
  • 结合发布流程同步 JSON Schema 到后端系统做接口数据校验
  • 活动版块对应一个 JSON Schema 和一份视图 View组件 即可
阅读全文 »

一道面试题联想到请求拦截器和取消请求的实现

发表于 2020-07-19

背景

来自一道同事的面试题,如下:

有一个 函数数组,里面可能是同步,也可能是异步的 Promise,怎么保持顺序执行并且让前一个函数的返回值作为后一个函数执行的参数。

理解了下就是一个异步函数数组要顺序执行,当时想了下答案,基于 Promise 的链式调用,所以没直接递归而是通过 while 循环来实现,代码大致如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// 任务列表
const fnList = [
() => 1,
p => Promise.resolve(p + 1),
p => p + 2,
p => Promise.resolve(p + 3),
p => Promise.resolve(p + 4),
p => p + 5,
p => p
];

let preResult;
while (fnList.length > 0) {
const curFn = fnList.shift();
if (preResult) {
preResult = preResult.then((res) => {
console.log(res);
return curFn(res);
});
} else {
// 首次调用无参数
preResult = Promise.resolve(curFn());
}
}

输出结果: 1 2 4 7 11 16

vue resource / axios 拦截器实现

这里和拦截器的实现有什么关系呢 ?

阅读全文 »

一个老页面 - 一加手机韩寒广告

发表于 2020-07-08

今天翻看之前coding.net git 仓库,看到了一个15年的代码,模拟当前韩寒一加手机的广告页面,虽然代码比较小学生,不过效果还是挺满意的,那个时候才学习canvas,然后刚好赶上这个比较火的效果。

按下 下面按钮开始打字机效果,右小角图标开启关闭背景音乐.

一步一步看清韩寒
阅读全文 »

香港oss/cos免备案 + github actions workflow + free ssl 实现静态网站https自动部署

发表于 2020-06-24

coding、github、netlify 这些静态页面的速度感觉越来越慢,再加上备案过期不想重新备案,想着通过香港地区的对象存储来存放,这里推荐阿里云oss,自定义域名支持上传ssl证书,费用基本可以忽略(一个月一块以内)。

缺点:没法配置服务器自定义域名强制https,所以目前通过js做了https跳转 …

实现步骤如下:

域名

首先要有自己可解析的域名即可,比如我的 https://lljj.me/

对象存储oss/cos

可以选择阿里云oss或者腾讯云cos。腾讯云可以免费半年,但不备案是没办法做到https,这里以阿里云为例。

开启oss

登录阿里云账号,然后在 控制台 页面左上角 产品与服务 中找到 对象存储 OSS 开启即可。

阅读全文 »

结合 lerna 和 yarn workspace 管理多项目工作流

发表于 2020-06-18

名词解释

  • 多个项目的代码放在在同一存储库中这种开发策略称之为 Monorepo
  • lerna Babel开发用来管理多包的工具,基于 Monorepo 理念在工具端的实现
  • yarn Facebook 贡献的 Javascript 包管理器
  • commitlint 用来规范git commit信息

背景

在 vue-json-schema-form 项目中,需要把 lib、doc、demo 放在同一个项目中管理,彼此独立,又可以相互依赖。

使用 yarn workspace 可以很好的解决上面的问题,搭配 lerna 做npm发布管理。目前大型仓库都使用这种方式,比如 Vue Vuepress 等。

由于 yarn workspace 和 lerna 有较多的功能重叠,这里重叠的部分优先使用 workspace 。最后就是只有发布管理使用了 learn 其它使用 workspace

详细的可参考 https://github.com/lljj-x/vue-json-schema-form 配置。

阅读全文 »
12…6

Jun

记录前端开发领域相关的知识点,包含不限于Javascript、前端工程、Vue开发 等

57 日志
88 标签
Creative Commons
Links
  • MDN
  • mermaid
© 2023 Jun
由 Hexo 强力驱动 v3.9.0
|
主题 – NexT.Muse v7.0.0