自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 收藏
  • 关注

原创 使用LightHouse分析性能

我们可以通过npm进行安装npm install -g lighthouse使用非常简单,直接命令行 lighthouse + 测试网址就可以,在这里我们以bilibilli主页为例lighthouse http://www.bilibili.com它会自动开启一个chrome窗口进行测试,等待片刻看到这两句时,代表测试已经结束了,我们将结果中的html文件地址拷贝至浏览器打开中间这一部分是工具提供的优化建议,例如:避免多个页面的重定向、去除未使用的js代码、对大图进行预加载等,并在右方

2021-06-30 08:55:17 32

原创 使用WebPageTest评估Web网站性能

在线版本登录https://webpagetest.org,输入需要测试的网站,然后还可以选对应的请求地址和浏览器我们还可以点击Advanced Settings,选择更多高级选项在这里举几个例子:Connection:模拟用户网络的情况Desktop Browser Dimensions:浏览器分辨率Number of Tests to Run:测试次数RepeatView:这两条的区别主要是看浏览器的缓存是否有效First View and Repeat View:会有重复访问

2021-06-29 22:46:51 21 1

原创 RAIL测量模型

R:Response 响应 处理事件应在50ms以内完成A:Animation 动画 每10ms产生一帧1s/60帧 ≈ 16ms/帧 - 6ms动画绘制时间 = 10ms/帧I:Idle 空闲 尽可能增加空闲时间L:Load 加载 在5s内完成内容加载并可以交互...

2021-06-29 21:34:28 4

原创 Chrome浏览器查看当前帧数

打开F12调试工具输入command + shift + p输入frame, 找到show frames per second FPS meter,然后回车浏览器左上角就会出现帧数的显示

2021-06-29 20:58:53 140

原创 GO 正则表达式的基础使用

const text = "My email is lyn@gmail.com" + "My email is lyn2@gmail.com" + "y email is lyn3@gmail.com"func main() { // 通过pattern生成一个匹配器(正则表达式可能有错误) re1, _ := regexp.Compile("lyn@gmail.com") // 通过pattern生成一个匹配器(正则表达式准确无错误) re2 := regexp.MustCompile

2021-06-21 19:10:34 19

原创 GO 获取网页信息时自动转换编码格式

我们需要先下载两个库,/net/html用于解析网页对应的编码格式,/text用于将网页对应的编码格式转换为utf8go get golang.org/x/textgo get golang.org/x/net/html代码如下:func main() { resp, err := http.Get(url) if err != nil { return nil, err } defer resp.Body.Close() if resp.StatusCode != http.St

2021-06-18 21:52:44 22

原创 GO + Redis 使用KeyspaceNotifications完成延时任务

在使用之前需要先开启Redis的键空间通知开关,可参考 《Redis 键空间通知》,另外java版本的可以查看《Springboot + Redis:整合键消息通知》我们利用redis键空间通知,订阅string的过期时间,来完成延时任务的操作import ( "fmt" "github.com/gomodule/redigo/redis" "strconv" "time" "unsafe")type PSubscribeCallback func (pattern, channel,

2021-06-18 11:24:23 42

原创 GO panic与recover

func tryRecover() { defer func() { r := recover() if err, ok := r.(error); ok { fmt.Println("Error occurred:", err) } else { panic(r) } }() panic(errors.New("this is ad error")) // 直接抛错:Error occurred: this is ad error b := 0 a := 5 /

2021-06-15 10:19:43 9

原创 GO 接口(interface)的基础使用

目录结构如上,我们先定义一个Retriever接口,分别实现一个真实的Retriever和一个mock请求mockRetrievertype Retriever struct { Contents string}func (r Retriever) Get(url string) string { return r.Contents}realRetrievertype Retriever struct { UserAgent string TimeOut time.Durat.

2021-06-11 15:25:08 9 1

原创 GO channel的基础使用

实现的是创建10个channel,分别打印不同的str// 从channel内接受数据func worker(id int, c chan int) { for { fmt.Printf("Worker %d, print %c\n", id, <-c) }}func chanDemo() { // 创建10个channel var channels [10]chan int for i := 0; i < 10; i++ { channels[i] = make(c

2021-06-09 18:20:35 18

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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