这篇文章讨论如何过度优化静态博客的加载速度。

闲的无聊,于是思考,怎样才能让zrt.io/blog加载的更快呢?

这个blog是由hexo生成,所以可以看作纯静态的一堆html。

script defer

最简单的技巧是把script标签都放到body底部,这样script加载的过程就不会阻塞页面渲染。

进阶的方法是使用script标签的async属性,能够让script标签异步加载。

但是异步加载的标签并不能保证执行顺序,比如有一个script是jquery,一个是jquery.fancybox,后面的依赖前面的,async就有可能出错,这时可以考虑用defer属性,这个属性可以让标签在页面渲染完后依次加载。

HTTP/2 PUSH

由于用的Apache2服务器配置好了HTTP/2,而HTTP/2又有Server Push这个功能,可以尝试主动推送静态文件。

一般HTTP/1.1的情况下,发现script或css需要从src加载时,这时就会又发起一个请求去下载该静态资源,然后进行页面加载,这样会和服务器通信好几个来回,在延迟较高的情况下会导致网页加载较慢。

HTTP/2的Server Push是服务器在一次请求的返回信息里不仅返回请求的页面,还返回许多其他的静态资源,相当于告诉浏览器先收着这些你会需要这些资源的。

配置好了http2,通过curl -v –http2发现并没有走h2,在/var/log/大概报个这样的warning:

1
[http2:warn] AH10034: The mpm module (prefork.c) is not supported by mod_http2. The mpm determines how things are processed in your server. HTTP/2 has more demands in this regard and the currently selected mpm will just not do. This is an advisory warning. Your server will continue to work, but the HTTP/2 protocol will be inactive.

大概是mpm的prefork模式和http2不兼容。Google到修补方法:修改mpm模式为event。
参考https://http2.pro/doc/Apache#prefork-http2

写了个脚本利用抓到的cookie。
大概长这样:

1
2
3
4
5
6
7
8
9
10
def cookie_to_js(s):
res = ''
a=s.split(';')
for x in a:
if '=' in x:
res+='document.cookie="%s";'%(x)

return res

print(cookie_to_js('a=b;c=d;'))

Memobird咕咕机是一个热敏纸打印机。官网

官方提供了开发的web API接口: 开放平台API文档

通过web API可以做许多奇怪的事了。

不过官方并没有提供示例程序,于是我按照接口说明写了一下Python3的代码实现。

发到这里希望能帮到你。

bind_new(): 绑定新的设备。
print_str(i,s): 对第i个设备打印字符串s。

Code:

因为刚到的memobird需要用无需认证的wifi环境才能用,然而发现寝室并没有这样的wifi,于是打算改造一下已经废了的201A_5G。

大概思路是先把路由器刷成PandoraBox,然后用opkg安装openvpn,然后接入vpn9,此处感谢贵系科协,最后路由器用iptables转发一下连接路由器的流量。

注意我的路由器版本是小米路由器mini,其他版本应该类似。

0x00

把路由器刷成小米的开发版系统:

这里的ROM分支下下载对应路由器版本的开发版ROM。

然后路由器后台->系统更新->手动更新->选择刚刚下的文件->自动重启。

0x01

得到ssh权限以及root密码:

先用手机端把路由器和小米账户绑定。

然后在这里获取ssh权限。

需要用u盘刷一个ssh小包,按照提示操作即可。

也会告诉root密码。

0x02

刷PandoraBox:

然后ssh连到路由器上。

大概是这样:

下载PandoraBox,对应的ROM在这里

wget到/tmp就好。

然后刷:mtd -r write /tmp/xxx.bin OS1

然后自动重启。

Mastodon