加速到极致——使用对象存储托管Gzip压缩的js文件

举报
华为云存储 发表于 2019/06/03 00:04:51 2019/06/03
【摘要】 现代的网站大量依赖Javascript代码, 以至于一些网站Javascript过于臃肿,导致网站加载非常缓慢。后来就有了将JS代码精简到最简的".min.js", 而这还不够,因为浏览器支持Gzip的解压,所以又有人利用HTTP协议的解压Gzip功能,实现了网络传输的进一步缩减。例如JQuery3.3.1, 原始的大小为265.38KB, 经过.min.js最简化后,大小为84.89KB...

现代的网站大量依赖Javascript代码, 以至于一些网站Javascript过于臃肿,导致网站加载非常缓慢。

后来就有了将JS代码精简到最简的".min.js",  而这还不够,因为浏览器支持Gzip的解压,所以又有人利用HTTP协议的解压Gzip功能,实现了网络传输的进一步缩减。


例如JQuery3.3.1, 原始的大小为265.38KB, 经过.min.js最简化后,大小为84.89KB,缩小68%


更进一步地, 通过Gzip,可以缩小到38KB的水平,较.min.js又缩小55% !

这还没有结束,据各路英雄通过各种方式压缩, 将JQuery 3.3.1 的gzip文件压缩到了28.5KB的水平

详见图:

image.png

这基本是极限了  相对于原始的265.38KB压缩了89.2% , 相对于.min.js文件压缩66%

这对网站速度提升可谓非常巨大, 上面这个例子只是JQuery, 实际上所有js文件都可以通过这种技术实现网页加速



那么,怎么通过托管到OBS来实现网页加速呢?


我们可以看到, 通过OBS Util上传后的文件有着这样的元数据:

image.png

打开链接则直接弹出下载框,这显然不是我们需要的


而通过Console上传,元数据是这样的:

image.png


试图打开链接,同样弹出下载框。


这里直接先给出答案,需要min.js.gz这种压缩格式能直接访问,需要添加以下Metadata:


image.png


如果已经上传了大量的JS文件,不方便手动修改, 需要使用SDK或者API批量操作,这里给出一个Python修改脚本:

#!/usr/bin/python
# -*- coding:utf-8 -*-

AK = 'XXXXXXXXXXXXXXXXXX'
SK = 'XXXXXXXXXXXXXXXXXX'

server = 'https://obs.myhuaweicloud.com'  #换成你的
bucketName = '桶名'

from obs import *
# Constructs a obs client instance with your account for accessing OBS
obsClient = ObsClient(access_key_id=AK, secret_access_key=SK, server=server)

# List all objects in folder 
resp = obsClient.listObjects(bucketName, 'path/to/js/xxxx/')
for content in resp.body.contents:
    if content.key.endswith('.gz'):
        headers=CopyObjectHeader()
        headers.directive='REPLACE'
        headers.contentType='text/html'
        headers.contentEncoding='gzip'
        res=obsClient.copyObject(bucketName,content.key,bucketName,content.key,headers=headers)
        print res






【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。