在 web 性能优化中, 我们总想尽办法,加速首屏的资源加载与渲染。preload 和 prefetch的出现,为我们提供了 更加细粒度的控制浏览器加载资源的方法。
prefetch和preload都是HTML中的链接标签,用于优化资源的预加载,以提高页面加载速度和性能。它们的主要区别在于加载时机和优先级。
利用github actions实现hexo博客的自动部署
之前从阮一峰老师的博客,了解了github 推出的 github actions,有尝试过一点好玩的定时任务。最近想起,自己好久没有更新博客了,于是想来用 github actions 实现基于 hexo 框架的博客自动部署。(你看到的就是通过github actions 自动部署的~~)。
初识Nginx
由app版本高低判断延伸到javascript字符串比较
最近在参与部门的app 重构,其中有一个是根据后台版本配置与当前 app 版本的表来提示用户是否有新版本,需要更新的提示。然后发现旧的代码直接使用的字符串比较:
1 | const v1 = '1.0.1'; |
乍一看,好像没问什么问题。但是当出现下面版本时,问题就来了:
1 | const v1 = '1.2.1'; |
package.json指南
在日常开发工作中,相信大家对于 package.json 并不陌生,但对于 package.json的各属性的含义,是否都详细了解呢?如果对于它了如指掌了,那么可忽略本文。对于尚不太熟悉的人,请继续阅读。
对于应用程序,package.json 文件中的内容没有固定的要求。 唯一的要求是必须遵守 JSON 格式,否则,尝试以编程的方式访问其属性的程序则无法读取它。
它必须是实际的JSON,而不仅仅是JavaScript对象文字。
module.exports和exports的区别
require方能看到的只有 module.exports 这个对象,它是看不到 exports 对象的,而我们在编写模块时用到的 exports 对象,实际上只是对 module.exports 的引用。
在keynote中插入高亮代码
做技术分享时,对于研发来讲,经常会有大量的代码介绍,那么如何快速在keynote中插入代码呢?
Typescript学习笔记-类型推论
在Typescript里,如果没有明确指出类型的地方,类型推论会帮助提供类型。
1 | let x = 3; |
变量x的类型被推断为数字。 这种推断发生在初始化变量和成员,设置默认参数值和决定函数返回值时。
最佳通用类型
当需要从几个表达式中推断类型时候,会使用这些表达式的类型来推断出一个最合适的通用类型。
1 | let x = [0, 1, null]; |
为了推断x的类型,我们必须考虑所有元素的类型。 这里有两种选择: number和null。 计算通用类型算法会考虑所有的候选类型,并给出一个兼容所有候选类型的类型。
由于最终的通用类型取自候选类型,有些时候候选类型共享相同的通用类型,但是却没有一个类型能做为所有候选类型的类型。
上下文类型
TypeScript类型推论也可能按照相反的方向进行。 这被叫做“按上下文归类”。按上下文归类会发生在表达式的类型与所处的位置相关时。
Typescript学习笔记-枚举
使用枚举我们可以定义一些带名字的常量。 使用枚举可以清晰地表达意图或创建一组有区别的用例。 TypeScript支持数字的和基于字符串的枚举。
MySQL sql_mode=only_full_group_by错误修复
前段时间重新安装了下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 |