亚州城ca88手机版_亚洲城官方网站|www.yzc889.com

热门关键词: 亚州城ca88手机版,亚洲城官方网站,www.yzc889.com

应用Service worker完结加速/离线访问静态blog网站

2019-06-07 21:36栏目:www.yzc889.com
TAG:

接纳Service worker实现加快/离线访问静态blog网址

2017/02/19 · JavaScript · Service Worker

初稿出处: Yang Bo   

明天极流行基于Github page和markdown的静态blog,极其适合技巧的想想和习于旧贯,针对差别的言语都有局地爱不忍释的静态blog系统出现,如Jekyll/Ruby,Pelican/Python,Hexo/NodeJs,由于静态内容的特征极其适合做缓存来加快页面的走访,就利用Service worker来落到实处加快,结果是除了PageSpeed,CDN那些大规模的服务器和网络加快之外,通过客户端达成了更加好的访问体验。

采用 Service worker 成立3个极度简单的离线页面

2016/06/07 · JavaScript · 1 评论 · Service Worker

本文由 伯乐在线 - 刘健超-J.c 翻译,艾凌风 校稿。未经许可,禁止转发!
英文出处:Dean Hume。欢迎加入翻译组。

让我们想像以下情状:大家那儿在一辆通往农村的列车的里面,用移动设备望着一篇很棒的小说。与此同不平时候,当您点击“查看更加多”的链接时,轻轨忽然进入了隧道,导致移动设备失去了网络,而 web 页面会展现出类似以下的内容:

图片 1

那是10分令人消极的经验!幸运的是,web 开采者们能透过有个别新特色来改进那类的用户体验。我多年来间接在折腾 ServiceWorkers,它给 web 带来的无尽可能性总能给本身欣喜。瑟维斯 Workers 的美好特质之1是同意你质量评定网络请求的气象,并令你作出相应的响应。

在那篇小说里,作者计划用此天性检查用户的当下互连网连接意况,假使没连接则赶回3个最好轻松的离线页面。就算那是贰个可怜基础的案例,但它能给你带来启发,让您通晓运行并运维该天性是何等的简短!假使你没明白过 Service Worker,小编提出您看看此 Github repo,了然越来越多相关的消息。

在本案例开始前,让大家先简单地探访它的劳作流程:

  1. 在用户首次访问我们的页面时,大家会设置 ServiceWorker,并向浏览器的缓存增多大家的离线 HTML 页面
  2. 下一场,借使用户企图导航到另三个 web 页面(同一个网址下),但此时已断网,那么我们将重临已被缓存的离线 HTML 页面
  3. 不过,假如用户准备导航到此外贰个 web 页面,而那时互联网已接连,则能照常浏览页面

Service Worker入门

2015/03/26 · JavaScript · Service Worker

初稿出处: Matt Gaunt   译文出处:[w3ctech

  • 十年踪迹]()   

原生App具有Web应用普通所不有所的富离线体验,按期的默不做声更新,音信布告推送等效果。而新的Serviceworkers标准让在Web App上具有那一个功用成为大概。

连不上网?United Kingdom卫报的本性离线页面是这样做的

2015/11/20 · HTML5 · Service Worker, 离线页面

本文由 伯乐在线 - Erucy 翻译,weavewillg 校稿。未经许可,禁止转发!
英文出处:Oliver Ash。接待参与翻译组。

我们是什么样使用 service worker 来为 theguardian.com 营造四个自定义的离线页面。

图片 2

theguardian.com 的离线页面。插图:奥利弗 Ash

你正在朝着公司途中的大巴里,在二哥大上张开了 Guardian 应用。大巴被隧道包围着,不过这一个应用能够健康运维,就算未有互连网连接,你也能获得完整的功用,除了出示的内容大概有一些旧。假设您品味在网址上也这么干,可惜它完全没办法加载:

图片 3

安卓版 Chrome 的离线页面

Chrome 中的那一个彩蛋,繁多少人都不通晓》

Chrome 在离线页面上有个暗藏的玩耍(桌面版上按空格键,手机版上点击那只恐龙),这某个能减轻一点你的郁闷。可是大家得以做得越来越好。

Service workers 允许网址小编拦截本人站点的具有互连网请求,那也就表示大家得以提供周全的离线体验,就如原生应用同样。在 Guardian 网址,我们多年来上线了1个自定义的离线体验效果。当用户离线的时候,他们会看出3个带有 Guardian 标记的页面,上面带有三个轻易易行的离线提醒,还应该有2个填字游戏,他们能够在等候网络连接的时候玩玩那个找点乐子。那篇博客解释了我们是何许创设它的,可是在起先在此以前,你能够先自个儿尝试看。

加速/离线访问只需三步

  • 首页增添注册代码

JavaScript

<script> if ('serviceWorker' in navigator) { navigator.serviceWorker.register('/sw.js'); } </script>

1
2
3
4
5
<script>
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/sw.js');
}
</script>
  • 复制代码

将保存到你的网址根目录下

  • 修改不缓存域名列表及离线状态页面

在你的sw.js中修改

JavaScript

const ignoreFetch = [ /https?://cdn.bootcss.com//, /https?://static.duoshuo.com//, /https?://www.google-analytics.com//, /https?://dn-lbstatics.qbox.me//, ];

1
2
3
4
5
6
const ignoreFetch = [
  /https?://cdn.bootcss.com//,
  /https?://static.duoshuo.com//,
  /https?://www.google-analytics.com//,
  /https?://dn-lbstatics.qbox.me//,
];

打开Chrome Dev Tools->Source,看看自身的blog都引用了如何第3方能源,各种加到忽略列表里。

图片 4

在根目录下增多offline.html,在未曾互连网且缓存中也从有时接纳,效果如下:

图片 5

在根目录下增加offline.svg,在无互连网时图片财富请求再次来到该文件。

让大家开端吧

倘若你有以下 HTML 页面。那纵然10分基础,但能给你完整思路。

XHTML

<!DOCTYPE html>

1
<!DOCTYPE html>

紧接着,让我们在页面里登记 Service Worker,这里仅成立了该指标。向刚刚的 HTML 里加多以下代码。

JavaScript

<script> // Register the service worker // 注册 service worker if ('serviceWorker' in navigator) { navigator.serviceWorker.register('/service-worker.js').then(function(registration) { // Registration was successful // 注册成功 console.log('ServiceWorker registration successful with scope: ', registration.scope); }).catch(function(err) { // registration failed :( // 注册失利 :( console.log('瑟维斯Worker registration failed: ', err); }); } </script>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<script>
// Register the service worker
// 注册 service worker
if ('serviceWorker' in navigator) {
    navigator.serviceWorker.register('/service-worker.js').then(function(registration) {
    // Registration was successful
    // 注册成功
    console.log('ServiceWorker registration successful with scope: ', registration.scope);
}).catch(function(err) {
    // registration failed :(
    // 注册失败 :(
    console.log('ServiceWorker registration failed: ', err);
   });
}
</script>

接下来,大家须求创建 Service Worker 文件并将其取名字为‘service-worker.js‘。我们策动用那几个 Service Worker 拦截任何网络请求,以此检查网络的连接性,并依赖检查结果向用户重返最契合的开始和结果。

JavaScript

'use strict'; var cacheVersion = 1; var currentCache = { offline: 'offline-cache' cacheVersion }; const offlineUrl = 'offline-page.html'; this.addEventListener('install', event => { event.waitUntil( caches.open(currentCache.offline).then(function(cache) { return cache.addAll([ './img/offline.svg', offlineUrl ]); }) ); });

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
'use strict';
 
var cacheVersion = 1;
var currentCache = {
  offline: 'offline-cache' cacheVersion
};
const offlineUrl = 'offline-page.html';
 
this.addEventListener('install', event => {
  event.waitUntil(
    caches.open(currentCache.offline).then(function(cache) {
      return cache.addAll([
          './img/offline.svg',
          offlineUrl
      ]);
    })
  );
});

在上边的代码中,大家在安装 Service Worker 时,向缓存增添了离线页面。借使大家将代码分为几小块,可观察前几行代码中,作者为离线页面钦点了缓存版本和U安德拉L。要是您的缓存有两样版本,那么您只需立异版本号就可以简单地铲除缓存。在大致在第二二行代码,作者向那些离线页面及其能源(如:图片)发出请求。在获取成功的响应后,大家将离线页面和有关财富丰富到缓存。

现行反革命,离线页面已存进缓存了,我们可在急需的时等候检查索它。在同二个 ServiceWorker 中,大家须求对无互联网时回来的离线页面增加相应的逻辑代码。

JavaScript

this.add伊夫ntListener('fetch', event => { // request.mode = navigate isn't supported in all browsers // request.mode = naivgate 并未获得全体浏览器的扶助 // so include a check for Accept: text/html header. // 因而对 header 的 Accept:text/html 举办查验 if (event.request.mode === 'navigate' || (event.request.method === 'GET' && event.request.headers.get('accept').includes('text/html'))) { event.respondWith( fetch(event.request.url).catch(error => { // Return the offline page // 重临离线页面 return caches.match(offlineUrl); }) ); } else{ // Respond with everything else if we can // 重返任何大家能回到的东西 event.respondWith(caches.match(event.request) .then(function (response) { return response || fetch(event.request); }) ); } });

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
this.addEventListener('fetch', event => {
  // request.mode = navigate isn't supported in all browsers
  // request.mode = naivgate 并没有得到所有浏览器的支持
  // so include a check for Accept: text/html header.
  // 因此对 header 的 Accept:text/html 进行核实
  if (event.request.mode === 'navigate' || (event.request.method === 'GET' && event.request.headers.get('accept').includes('text/html'))) {
        event.respondWith(
          fetch(event.request.url).catch(error => {
              // Return the offline page
              // 返回离线页面
              return caches.match(offlineUrl);
          })
    );
  }
  else{
        // Respond with everything else if we can
        // 返回任何我们能返回的东西
        event.respondWith(caches.match(event.request)
                        .then(function (response) {
                        return response || fetch(event.request);
                    })
            );
      }
});

为了测试该成效,你能够接纳 Chrome 内置的开荒者工具。首先,导航到你的页面,然后假诺设置上了 ServiceWorker,就展开 Network 标签并将节流(throttling)改为 Offline。(译者注:若将节流设置为 Offline 没效果,则可透过关闭互联网也许经过360平安警卫禁止 Chrome 访问网络)

图片 6

借令你刷新页面,你应有能看到相应的离线页面!

图片 7

若是你只想大概地测试该意义而不想写任何代码,那么你能够访问笔者已成立好的 demo。此外,上述总体代码能够在 Github repo 找到。

本人知道用在此案例中的页面不会细小略,但你的离线页面则在于你和煦!假设您想深远该案例的剧情,你可以为离线页面增加缓存破坏( cache busting),如: 此案例。

Service Worker 是什么?

一个 service worker 是1段运营在浏览器后台进程里的台本,它独立于当下页面,提供了那1个没有需求与web页面交互的法力在网页背后悄悄推行的力量。在后天,基于它能够完毕新闻推送,静默更新以及地理围栏等服务,可是当前它首先要具备的效率是阻止和拍卖互连网请求,包涵可编制程序的响应缓存管理。

干什么说那一个API是三个这几个棒的API呢?因为它使得开荒者可以支撑极度好的离线体验,它赋予开发者完全调控离线数据的力量。

在service worker提出在此之前,别的二个提供开垦者离线体验的API叫做App Cache。可是App Cache有个别局限性,比方它能够很轻易地化解单页应用的标题,可是在多页应用上会很辛勤,而Serviceworkers的面世就是为了减轻App Cache的痛点。

上面详细说一下service worker有何必要注意的地点:

  • 它是JavaScript Worker,所以它无法一向操作DOM。然而service worker能够因此postMessage与页面之间通信,把新闻通告给页面,假如须要的话,让页面本人去操作DOM。
  • Serviceworker是1个可编制程序的互连网代理,允许开拓者调节页面上管理的网络请求。
  • 在不被接纳的时候,它会协和终止,而当它再一次被用到的时候,会被另行激活,所以您不可能借助于service worker的onfecth和onmessage的管理函数中的全局状态。假设您想要保存一些悠久化的音信,你能够在service worker里使用IndexedDB API。
  • Serviceworker多量使用promise,所以只要您不打听怎么是promise,那你须求先读书这篇文章。

试试看

您需求3个支撑 Service Worker 和 fetch API 的浏览器。甘休到本文编写时只有Chrome(手机版和桌面版)同期接济那两种 API(译者注:Opera 如今也支撑这两边),然而 Firefox 相当慢就要援助了(在每天更新的版本中早已支撑了),除去 Safari 之外的全体浏览器也都在尝试。别的,service worker 只可以登记在应用了 HTTPS 的网址上,theguardian.com 已经开头稳步搬迁到 HTTPS,所以大家只可以在网址的 HTTPS 部分提供离线体验。就当下来讲,我们选用了 开垦者博客 作为我们用来测试的地方。所以假设你是在大家网址的 开荒者博客 部分阅读那篇小说的话,很幸运。

当你利用辅助的浏览器访问我们的 开垦者博客 中的页面包车型大巴时候,1切就希图妥当了。断开你的互连网连接,然后刷新一下页面。如若您本人没规范尝试的话,能够看一下这段 示范录像(译者注:需梯子)。

加紧效果

首页加快后,网络请求从16降为一,加载时间从贰.2九陆s降为0.65四s,获得了刹那间加载的结果。

图片 8

基于webpagetest

查看测试结果

拓展阅读

除此以外,还也许有多少个很棒的离线功用案例。如:Guardian 创设了二个怀有 crossword puzzle(填字游戏)的离线 web 页面 – 由此,即便等待网络重连时(即已在离线状态下),也能找到一点乐趣。笔者也引入看看 Google Chrome Github repo,它含有了成都百货上千不及的 Service Worker 案例 – 个中有的选取案例也在那!

然而,倘令你想跳过上述代码,只是想大致地由此三个库来处理有关操作,那么本身推荐你看看 UpUp。那是二个轻量的本子,能让您更轻易地运用离线功能。

打赏援助本身翻译越来越多好文章,多谢!

打赏译者

Service Worker的生命周期

Service worker具备2个完全部独用立于Web页面包车型客车生命周期。

要让1个service worker在你的网址上生效,你须要先在您的网页中登记它。注册1个service worker之后,浏览器会在后台默默运转三个service worker的装置进程。

在安装进程中,浏览器会加载并缓存一些静态能源。纵然全部的文本被缓存成功,service worker就安装成功了。假如有任何公文加载或缓存失利,那么安装进程就能够战败,service worker就不能被激活(也即没能安装成功)。假如发生如此的主题材料,别顾虑,它会在后一次再品尝安装。

当安装到位后,service worker的下一步是激活,在这一等第,你还是能够进步三个service worker的本子,具体内容我们会在前面讲到。

在激活之后,service worker将接管全部在和谐管辖域范围内的页面,但是倘使一个页面是刚刚注册了service worker,那么它这一遍不会被接管,到下三遍加载页面包车型大巴时候,service worker才会生效。

当service worker接管了页面之后,它也可以有三种状态:要么被甘休以节本省部存储器,要么会处理fetch和message事件,那四个事件分别发生于三个互连网请求出现依旧页面上发送了3个音信。

下图是三个简化了的service worker初次安装的生命周期:

图片 9

做事规律

经过一段轻易的 JavaScript,咱们能够提醒浏览器在用户访问页面包车型地铁时候即刻登记大家团结的 service worker。最近帮助 service worker 的浏览器没有多少,所感觉了制止不当,大家需求接纳天性检查评定。

JavaScript

if (navigator.serviceWorker) { navigator.serviceWorker.register('/service-worker.js'); }

1
2
3
if (navigator.serviceWorker) {
    navigator.serviceWorker.register('/service-worker.js');
}

Service worker 安装事件的1有的,我们得以行使 新的缓存 API 来缓存大家网址中的各类内容,比方 HTML、CSS 和 JavaScript:

JavaScript

var staticCacheName = 'static'; var version = 1; function updateCache() { return caches.open(staticCacheName version) .then(function (cache) { return cache.addAll([ '/offline-page.html', '/assets/css/main.css', '/assets/js/main.js' ]); }); }; self.addEventListener('install', function (event) { event.waitUntil(updateCache()); });

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var staticCacheName = 'static';
var version = 1;
 
function updateCache() {
    return caches.open(staticCacheName version)
        .then(function (cache) {
            return cache.addAll([
                '/offline-page.html',
                '/assets/css/main.css',
                '/assets/js/main.js'
            ]);
        });
};
 
self.addEventListener('install', function (event) {
    event.waitUntil(updateCache());
});

当安装到位后,service worker 能够监听和垄断 fetch 事件,让我们能够完全调控之后网址中生出的持有互连网请求。

JavaScript

self.addEventListener('fetch', function (event) { event.respondWith(fetch(event.request)); });

1
2
3
self.addEventListener('fetch', function (event) {
    event.respondWith(fetch(event.request));
});

在这里我们有很利索的空间能够发挥,比方上面那几个关键,能够通过代码来生成我们自个儿的呼吁响应:

JavaScript

self.addEventListener('fetch', function (event) { var response = new Response('<h1>Hello, World!</h1>', { headers: { 'Content-Type': 'text/html' } }); event.respondWith(response); });

1
2
3
4
5
self.addEventListener('fetch', function (event) {
    var response = new Response('&lt;h1&gt;Hello, World!&lt;/h1&gt;',
        { headers: { 'Content-Type': 'text/html' } });
    event.respondWith(response);
});

再有这一个,假诺在缓存中找到了请求相应的缓存,大家能够直接从缓存中回到它,倘诺没找到的话,再经过互联网获得响应内容:

JavaScript

self.addEventListener('fetch', function (event) { event.respondWith( caches.match(event.request) .then(function (response) { return response || fetch(event.request); }) ); });

1
2
3
4
5
6
7
8
self.addEventListener('fetch', function (event) {
    event.respondWith(
        caches.match(event.request)
            .then(function (response) {
                return response || fetch(event.request);
            })
    );
});

那么大家什么样行使那一个意义来提供离线体验吧?

第二,在 service worker 安装进程中,大家须求把离线页面供给的 HTML 和能源文件通过 service worker 缓存下来。在缓存中,大家加载了上下一心付出的 填字游戏 的 React应用 页面。之后,大家会阻碍全数访问 theguardian.com 互连网请求,包罗网页、以及页面中的能源文件。管理那个请求的逻辑大概如下:

  1. 当我们检查实验到传播请求是指向我们的 HTML 页面时,大家总是会想要提供新型的内容,所以大家会尝试把那几个请求通过网络发送给服务器。
    1. 当大家从服务器得到了响应,就足以平昔回到那一个响应。
    2. 一经互联网请求抛出了极度(举例因为用户掉线了),大家捕获那么些充裕,然后利用缓存的离线 HTML 页面作为响应内容。
  2. 不然,当大家检查实验到请求的不是 HTML 的话,我们会从缓存中查找响应的央求内容。
    1. 假定找到了缓存内容,我们得以从来回到缓存的剧情。
    2. 要不然,我们会尝试把这一个请求通过互连网发送给服务器。

在代码中,大家应用了 新的缓存 API(它是 Service Worker API 的一某些)以及 fetch 作用(用于转移网络请求),如下所示:

JavaScript

var doesRequestAcceptHtml = function (request) { return request.headers.get('Accept') .split(',') .some(function (type) { return type === 'text/html'; }); }; self.addEventListener('fetch', function (event) { var request = event.request; if (doesRequestAcceptHtml(request)) { // HTML pages fallback to offline page event.respondWith( fetch(request) .catch(function () { return caches.match('/offline-page.html'); }) ); } else { // Default fetch behaviour // Cache first for all other requests event.respondWith( caches.match(request) .then(function (response) { return response || fetch(request); }) ); } });

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
var doesRequestAcceptHtml = function (request) {
    return request.headers.get('Accept')
        .split(',')
        .some(function (type) { return type === 'text/html'; });
};
 
self.addEventListener('fetch', function (event) {
    var request = event.request;
    if (doesRequestAcceptHtml(request)) {
        // HTML pages fallback to offline page
        event.respondWith(
            fetch(request)
                .catch(function () {
                    return caches.match('/offline-page.html');
                })
        );
    } else {
        // Default fetch behaviour
        // Cache first for all other requests
        event.respondWith(
            caches.match(request)
                .then(function (response) {
                    return response || fetch(request);
                })
        );
    }
});

就只须求这么多!theguardian.com 上的 具备代码都是在 GitHub 上开源 的,所以您能够去那儿查看大家的 service worker 的总体版本,或然直接从生产情状上访问 。

笔者们有丰硕的说辞为那几个新的浏览器手艺欢呼喝彩,因为它能够用来令你的网址像明天的原生应用相同,具有完美的离线体验。今后当 theguardian.com 完全迁移到 HTTPS 之后,离线页面包车型客车主要性性会显明扩充,我们能够提供尤其完美的离线体验。设想一下您在上下班途中网络很差的时候访问 theguardian.com,你相会到特意为你订制的特性化内容,它们是在您前边访问网址时由浏览器缓存下来的。它在设置进度中也不会发生别的困难,你所须要的只是访问这么些网址而已,不像原生应用,还亟需用户有2个使用商铺的账号本事安装。Serviceworker 一样能够扶持大家提高网址的加载速度,因为网址的框架能够被保证地缓存下来,就如原生应用一样。

壹旦您对 service worker 很感兴趣,想要精晓越来越多内容的话,开荒者 MattGaunt(Chrome的克尽职守支持者)写了1篇越发详实地 介绍 Service Worker的文章。

打赏援救自身翻译更加多好文章,谢谢!

打赏译者

加紧/离线原理探求

打赏协助我翻译更加多好小说,感谢!

任选壹种支付办法

图片 10 图片 11

1 赞 3 收藏 1 评论

在大家开头写码从前

从这个项目地址拿到chaches polyfill。

这个polyfill支持CacheStorate.match,Cache.add和Cache.addAll,而现在Chrome M40实现的Cache API还未曾协理这么些点子。

将dist/serviceworker-cache-polyfill.js放到你的网址中,在service worker中通过importScripts加载进来。被service worker加载的台本文件会被电动缓存。

JavaScript

importScripts('serviceworker-cache-polyfill.js');

1
importScripts('serviceworker-cache-polyfill.js');

需要HTTPS

在开垦阶段,你能够经过localhost使用service worker,可是假若上线,就供给你的server帮衬HTTPS。

您能够由此service worker勒迫连接,伪造和过滤响应,非常逆天。尽管你能够约束自个儿不干坏事,也可以有人想干坏事。所感觉了避防外人使坏,你不得不在HTTPS的网页上注册service workers,那样大家能力够幸免加载service worker的时候不被渣男篡改。(因为service worker权限异常的大,所以要严防它自身被坏蛋篡改利用——译者注)

Github Pages恰好是HTTPS的,所以它是1个理想的原貌实验田。

譬如你想要令你的server帮衬HTTPS,你须要为您的server拿到三个TLS证书。区别的server安装方法差异,阅读支持文书档案并经过Mozilla’s SSL config generator叩问最好实施。

打赏援救笔者翻译更加多好小说,感谢!

图片 12

1 赞 收藏 评论

什么是 Service worker

图片 13

如上图,Service worker 是1种由Javascript编写的浏览器端代理脚本,位于你的浏览器和服务器之间。当三个页面注册了3个 Service worker,它就足以挂号一名目许多事件管理器来响应如互连网请求和消息推送那么些事件。Service worker 能够被用来保管缓存,当响应二个网络请求时得以布置为回到缓存依旧从网络获得。由于Service worker 是基于事件的,所以它只在拍卖那些事件的时候被调入内部存款和储蓄器,不用操心常驻内部存款和储蓄器占用财富导致系统变慢。

关于笔者:刘健超-J.c

图片 14

前端,在路上... 个人主页 · 笔者的小说 · 19 ·     

图片 15

使用Service Worker

当今大家有了polyfill,并且化解了HTTPS,让大家看看终归怎么用service worker。

关于我:Erucy

图片 16

曾经的SharePoint喵星程序员(一时还挂着微软MVP的名头),未来的Azure/.Net/MongoDB/Cordova/前端技术员,不经常写小说 个人主页 · 作者的稿子 · 46 ·   

图片 17

版权声明:本文由亚州城ca88手机版_亚洲城官方网站|www.yzc889.com发布于www.yzc889.com,转载请注明出处:应用Service worker完结加速/离线访问静态blog网站