在 web 性能优化中, 我们总想尽办法,加速首屏的资源加载与渲染。preload 和 prefetch的出现,为我们提供了 更加细粒度的控制浏览器加载资源的方法。
prefetch和preload都是HTML中的链接标签,用于优化资源的预加载,以提高页面加载速度和性能。它们的主要区别在于加载时机和优先级。

阅读全文 »


之前从阮一峰老师的博客,了解了github 推出的 github actions,有尝试过一点好玩的定时任务。最近想起,自己好久没有更新博客了,于是想来用 github actions 实现基于 hexo 框架的博客自动部署。(你看到的就是通过github actions 自动部署的~~)。

阅读全文 »

Nginx概述

Nginx (engine x) 是一款轻量级的 Web 服务器 、反向代理服务器及电子邮件(IMAP/POP3)代理服务器。

由伊戈尔·赛索耶夫创建并于2004年首次公开发布。2011年成立同名公司以提供支持。2019年3月11日,Nginx公司被F5 Networks以6.7亿美元收购。

Nginx是免费的开源软件,根据类BSD许可证的条款发布。一大部分Web服务器使用Nginx,通常作为负载均衡器。

阅读全文 »

最近在参与部门的app 重构,其中有一个是根据后台版本配置与当前 app 版本的表来提示用户是否有新版本,需要更新的提示。然后发现旧的代码直接使用的字符串比较:

1
2
3
const v1 = '1.0.1';
const v2 = '1.0.2';
console.log(v1 > v2); // false

乍一看,好像没问什么问题。但是当出现下面版本时,问题就来了:

1
2
3
const v1 = '1.2.1';
const v2 = '1.12.1';
console.log(v1 > v2); // true

阅读全文 »

在日常开发工作中,相信大家对于 package.json 并不陌生,但对于 package.json的各属性的含义,是否都详细了解呢?如果对于它了如指掌了,那么可忽略本文。对于尚不太熟悉的人,请继续阅读。

对于应用程序,package.json 文件中的内容没有固定的要求。 唯一的要求是必须遵守 JSON 格式,否则,尝试以编程的方式访问其属性的程序则无法读取它。

它必须是实际的JSON,而不仅仅是JavaScript对象文字。

阅读全文 »

require方能看到的只有 module.exports 这个对象,它是看不到 exports 对象的,而我们在编写模块时用到的 exports 对象,实际上只是对 module.exports 的引用。

阅读全文 »

做技术分享时,对于研发来讲,经常会有大量的代码介绍,那么如何快速在keynote中插入代码呢?

阅读全文 »

在Typescript里,如果没有明确指出类型的地方,类型推论会帮助提供类型。

1
let x = 3;

变量x的类型被推断为数字。 这种推断发生在初始化变量和成员,设置默认参数值和决定函数返回值时。

最佳通用类型

当需要从几个表达式中推断类型时候,会使用这些表达式的类型来推断出一个最合适的通用类型。

1
let x = [0, 1, null];

为了推断x的类型,我们必须考虑所有元素的类型。 这里有两种选择: number和null。 计算通用类型算法会考虑所有的候选类型,并给出一个兼容所有候选类型的类型。

由于最终的通用类型取自候选类型,有些时候候选类型共享相同的通用类型,但是却没有一个类型能做为所有候选类型的类型。

上下文类型

TypeScript类型推论也可能按照相反的方向进行。 这被叫做“按上下文归类”。按上下文归类会发生在表达式的类型与所处的位置相关时。

使用枚举我们可以定义一些带名字的常量。 使用枚举可以清晰地表达意图或创建一组有区别的用例。 TypeScript支持数字的和基于字符串的枚举。

阅读全文 »

前段时间重新安装了下MySQL,升级到了8.0,发现执行Group By会报错:

1
ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'database_tl.emp.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
阅读全文 »