范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

天人合一物我相融,站点升级Web应用PWA(ProgressiveWebApps)实践

  PWA(Progressive web apps,渐进式 Web 应用)使用现代的 Web API 以及传统的渐进式增强策略来创建跨平台 Web 应用程序,说白了,PWA可以让我们的站点以原生APP的形式运行,但相比于安装原生APP应用,访问PWA显然更加容易和迅速,还可以通过链接来分享PWA应用。
  有许多知名的网络平台已经将 PWA 方案落地,比如Twitter。选择增强的网站体验而不是原生应用。事实上使用PWA也确实从中获得了显而易见的益处。https://www.pwastats.com 这个网站上分享了许多案例研究,PWA相比于传统应用有以下好处:
  1、减少应用安装后的加载时间,通过 Service Workers 来进行缓存,以此来节省带宽和时间。
  2、当应用有可用的更新时,可以只更新发生改变的那部分内容。相比之下,对于一个原生应用而言,即便是最微小的改动也需要强制用户去进行热更新或者再次下载整个应用。
  3、外观和使用感受与原生平台更加融为一体——应用图标被放置在主屏幕上,应用可以全屏运行等。
  凭借系统通知和推送消息与用户保持连接,对用户产生更多的吸引力,并且提高转换效率。
  诚然,从零开始研发PWA应用会有一定的成本,但如果我们本身就拥有基于Web的站点,那么就可以通过增加对应的配置文件和服务进行升级操作,直接拥有PWA应用。 HTTPS服务
  首先PWA要求站点的请求方式为HTTPS,如果是生产环境,可以通过为Nginx服务器配置SSL的方式进行适配,但是线下环境测试PWA时就有点费劲了,所以通过openssl工具为本地域名localhost做自签证书: openssl req -x509 -out localhost.crt -keyout localhost.key    -newkey rsa:2048 -nodes -sha256    -days 3650    -subj "/CN=localhost" -extensions EXT -config <(     printf "[dn] CN=localhost [req] distinguished_name = dn [EXT] subjectAltName=DNS:localhost keyUsage=digitalSignature extendedKeyUsage=serverAuth")
  产出:localhost.crt和localhost.key文件,key是私用密钥openssl格式,通常是rsa算法。csr是证书请求文件,用于申请证书,在制作csr文件的时,必须使用自己的私钥来签署申,还可以设定一个密钥。
  将文件放到项目的根目录下,随后在构建项目服务的时候配置即可,以Tornado为例: server = httpserver.HTTPServer(app,xheaders=True,ssl_options={         "certfile": "./localhost.crt",         "keyfile": "./localhost.key",     })  # 指定端口 server.listen(443)
  这里通过设置ssl_options参数来导入私钥和证书,同时将端口改为HTTPS默认端口号443。如此,在本地也可以对PWA进行测试了,当然了,如果不需要本地操作,也可以跳过这步。 manifest.json配置文件
  为了实现 PWA 应用添加至桌面的功能,除了要求站点支持 HTTPS 之外,还需要准备 manifest.json 文件去配置应用的图标、名称等信息。
  以本站为例,在站点根目录创建manifest.json文件: {     "name": "刘悦的技术博客",     "short_name": "刘悦的技术博客",     "description": "刘悦的技术博客",     "icons": [         {             "src": "https://v3u.cn/v3u/Public/images/pwa192.png",             "sizes": "192x192",             "type": "image/png"         },         {             "src": "https://v3u.cn/v3u/Public/images/pwa512.png",             "sizes": "512x512",             "type": "image/png"         }     ],     "background_color": "#FFF",      "theme_color": "#FFF",      "display": "standalone",      "orientation": "portrait",     "start_url": "/",      "scope": "/"  }
  由上至下,依次是 PWA 应用的名称、描述、图标文件、banner颜色、显示方式、开始页面的链接和 PWA 的作用域。为此我们需要提供两张不同分辨率的站点图标文件:
  ServiceWorker服务
  Service Worker是一个注册在指定源和路径下的事件驱动型Web Worker。它充当了Web应用程序与浏览器之间的代理服务器,进行资源在文件级别下的缓存与操控,拦截页面请求,实现在不同的情况下对不同请求的响应策略。
  Service Worker本质上就是一个Web Worker,因此它具有Web Worker的特点:无法操作DOM、脱离主线程、独立上下文。
  Service Worker还具有这些特点:只能在Https下使用、运行在浏览器后台,不受页面刷新影响、更强大的离线缓存能力(使用Cache API)、请求拦截能力、完全异步,不能使用同步API、持续运行,第一次访问页面后,Service Worker就会安装激活并持续运行,直到手动销毁。
  以本站为例,在站点根目录创建sw.js文件,注意Service Worker文件位置一定得在根目录,如果不在根目录也要通过重写或者url映射让其可以通过根目录路径进行访问,如:https://v3u.cn/sw.js,否则浏览器会检测不到Service Worker服务: var CACHE_NAME = "v3u-cache-v1"; var urlsToCache = [     "/",     "/v3u/Public/css/tidy_min.css" ];  self.addEventListener("install", function (event) {     event.waitUntil(         caches.open(CACHE_NAME).then(function (cache) {             console.log("Open cache");             return cache.addAll(urlsToCache);         }).then(function () {             self.skipWaiting();         })     ); });
  当我们为页面注册Service Worker后,Service Worker开始进行安装,安装成功之后,会在worker中触发install事件;如果安装失败,则进入废弃状态。
  如果Service Worker逻辑文件更新(相关资源文件变动或者内部逻辑更新等),Service Worker会重新安装,如果这个时候,页面依然存在激活状态下的worker(旧的Service Worker),那么新的worker会进入waiting状态进行等待,直到我们主动去操作worker强制其更新,或者等待用户关闭所有页面,这个时候新的worker才会进入到激活状态。
  在install事件中,我们使用caches.open方法打开cache对象,并通过cache.addAll缓存所有我们列出的文件。如果Service Worker存在更新,我们使用skipWaiting跳过等待,直接强制新的worker进入激活状态。
  随后,添加fetch事件: self.addEventListener("fetch", function(event){         if(event.request.method !== "GET") return;         event.respondWith(             caches.match(event.request).then(function(response){                 if(response){                     console.log("return caches");                     return response;                 }else{                     return fetch(event.request).catch(function(){                         if(/.html$/.test(event.request.url))                             return caches.match("/html/neterror.html");                     });                 }             })         )     });
  这里只监听了全站的GET请求方式,即我们只希望控制资源请求。通过caches.match检查请求是否命中了缓存,如果命中,则直接返回缓存给用户,防止重复请求,节约资源。如果没有命中,则将使用fetch方法请求网络资源并返回给用户。当网络状态异常时(fetch().catch()),返回404页面的缓存给用户,告知用户当前处于无网络状态,不能访问相关页面。指定了一些页面和文件进行缓存,我们希望用户在无网络的情况下只能访问到我们指定缓存的页面。
  当然,还有另外一种情况,我们指定了一些页面进行缓存(常用页面),当用户访问到一些不常用页面时,再对其进行缓存。这样,我们可以对资源配置进行优化,不过多的占用用户本地资源去缓存所有页面,因为PWA的缓冲本身是存储到客户端的,对于非所有用户的常用页面,按需缓存: self.addEventListener("fetch", function(event){         if(event.request.method !== "GET") return;         event.respondWith(             caches.match(event.request).then(function(response){                 if(response){                     console.log("return caches");                     return response;                 }else{                     return fetch(event.request).then(function(res){                         var responseToCache = res.clone();                         caches.open(CACHE_NAME).then(function(cache){                             catch.put(event.request, responseToCache);                         })                         return res;                     });                  }             })         )     });
  至此,ServiceWorker服务文件就撰写完成了。 生产环境上线配置:
  分别将manifest.json和sw.js文件分别上传到生产环境之后,在页面的head标签中进行声明: 
  声明后,注意访问一下是否正确返回:https://v3u.cn/manifest.json
  随后在页面中注册Service Worker服务:
  这里首先判断当前浏览器的navigator是否支持serviceWorker,随后使用navigator.serviceWorker.register函数来注册Service Worker。其中,参数为要执行的worker逻辑文件路径,注意这个路径是基于origin的,而非当前文件。
  接着键入组合键,打开chrome浏览器的开发者工具:
  Mac系统上的" + +I"
  Win系统上的"F12+Ctrl+Shift+I"
  在Chrome 的应用标签下进行检查,看应用清单有没有读出你的 PWA 应用信息配置文件:
  随后在serviceWorker标签下检查serviceWorker是否正确运行:
  接着访问站点,在地址栏即可添加PWA应用:
  访问效果:
  结语
  渐进式增强和响应式设计已经可以让我们构建对移动端非常友好的站点,而PWA则又在我们的身后轻轻地推了一把,黄河之水源可滥觞,星星之火正在燎原,一年以内,我们都将感到PWA的灼人温度。

游戏内外云茹大小姐的御林军,心灵终结焚风通用步兵焚风,心灵终结里唯一一个不存在于红警原版游戏的阵营,如果说盟军主打激光科技苏联强调口径既正义厄普西隆精通生物科技,那焚风就是专精纳米技术网络技术等离子技术等未来科技。焚风是为了对抗VR射击游戏Onward将于7月31日不再支持Quest1头显近日,Meta旗下游戏工作室DownpourInteractive宣布,其VR射击游戏Onward将于2023年7月31日之后停止支持Quest1头显。据了解,Onward于202惊!汽车变身游戏天堂?车载游戏,正踏着新年的节拍舞动。本田和索尼共同组建的电动汽车合资企业SHM(SonyHondaMobility)推出Afeela品牌原型车,主打车载游戏科技巨头英伟达宣布旗下GeF梦幻西游花888买138级号,一件灵饰回本,血赚一把不磨武器!在藏宝阁买号捡漏是很常见的事情,经常有玩家捡漏到那些没有清理过的垃圾号,比如像138级这种冷门的等级,号主一般都是用来当作仓库或者摆摊号,所以在上架出售的时候容易遗忘仓库或者背包里圣塔神记评测巧妇难为无米之炊挺有趣,但还是太糙了从最初公布开始,豪华开发者阵容就一直是圣塔神记的重点宣传内容。参与过ChronoCross角色设计的结城信辉在异度神剑的美术方面活跃的风间雷太负责了歧路旅人部分解谜VR游戏分享盘点,5款解谜休闲MetaQuestSteamVR游戏下载推荐解谜可以说是电子游戏的一个重要元素,但凡大火的游戏,其游戏内必定有着设计巧妙的谜题。现在,海量趣味十足的休闲解谜VR游戏登录了VR平台,转动你的大脑,在这如现实般的VR世界中解开一科技前沿美军云计算技术应用现状及发展趋势2006年8月9日,Google首席执行官埃里克施密特(EricSchmidt)在搜索引擎大会(SESSanJose2006)首次提出云计算(CloudComputing)的概念。还记得它们吗?这些已经消失的小众手机品牌前不久,游戏手机品牌黑鲨被曝出拖欠离职员工补偿金的消息,可能你已有所耳闻,其CEO罗语周的微博评论区甚至成了讨薪现场,还有消息指出黑鲨手机的研发团队已被裁撤,一些粉丝所期待的黑鲨610万以内落地三款自主品牌紧凑型代步轿车推荐虽然如今新能源车越来越受欢迎,但对于很多预算不足的家庭来讲,他们购车的首选还是一台10万元以内的燃油代步车,毕竟这个价位的新能源车要么尺寸太小,不适合家用,要么续航太短,没有实用性媒体釜底抽薪,内援脚踏多只船,山东泰山引援再次受挫山东泰山引援再受挫根据此前的媒体消息,山东泰山一直都是休赛季中超转会市场的大卖家,很多转会消息都和山东泰山有关系,从韦世豪加盟山东泰山到童磊孙国文加盟山东泰山几乎到了板上钉钉的样子全职宝妈,一定要做自媒体!我是一名全职宝妈,每天从早到晚一直重复着起床做早饭送孩子上学做家务做午饭接孩子放学做晚饭辅导孩子做作业这些事,这是我的日常,也是所有宝妈的日常。我们兼职着保姆保洁家教厨师等等多重职
快过年了,盘点一下几乎零差评的三款手机,高配低价值得入手下个月就要过年了,很多朋友有年前购买新手机的打算,最近也是很多网友私信我,说可供选择的机型太多了,为了避免踩坑要我推荐几款。于是今天我盘点了一下,选出了三款高配低价的手机,推荐给大因专家判断失误,王刚误把价值2亿的古董砸碎,后来怎么处理?看过铁齿铜牙纪晓岚的小伙伴应该都记得,和珅这个角色,其演绎者就是王刚,他的演技是观众们有目共睹的,王刚除了是演员,还是有名的主持人。比如天下收藏就是他主持的。据传现实生活中,王刚也令人惊叹的螺旋星系和闪闪发光的恒星是哈勃2021年的恒星照片之一虽然强大的詹姆斯韦伯太空望远镜今年开始进入深空拍摄极其详细的照片,从而抢走了聚光灯,但它的前身仍然很强大。哈勃太空望远镜拍摄了一些令人瞠目结舌的旋转星系闪亮星团和星云的图像,这些图给大家拜个早年,国家航天局发布天问一号探测器传回图像2022年元旦来临之际,国家航天局发布我国首次火星探测任务天问一号探测器从遥远火星传回的一组精美图像,向全国人民报告天问一号平安,致以节日问候。TheChinaNationalSp比起月球上的中国国旗,美国国旗却在飘动?难道登月是假的?人类的航天事业发展了大概60年左右,目前来说除了美国以外,包括前苏联如何的俄罗斯,以及欧盟成员中国日本等等国家,都还没有实现载人登月的计划。迄今为止登陆月球的12名人类根据我国神舟小米小屏旗舰曝光,上下折叠,后置副屏最近某知名数码博主爆料称,小米接下来将会推出一款折叠屏小屏旗舰,最近也曝光的手机的设计图和专利图,整体设计看起来还是非常不错的。大家可以把这款折叠屏手机看成是小米6复刻版。因为前段诺基亚G50将推出最新版Android12升级包据www。gsmarena。com1月1日报道,HMDGlobal最近为诺基亚X10和X20推出了Android12升级版,现在轮到诺基亚G50体验最新版Android12。HMDOPPO又有新专利?直屏手机配副屏,息屏状态下完全隐身折叠屏手机带来的双屏体验,早已俘获了大批消费者的芳心,这也给手机厂商一个寻求手机形态突破的契机,那就是直屏手机也能增加副屏。像魅族Pro7系列加持的2英寸副屏,就是对手机新形态的探挑战者杯TLG惜败TESA,小鹏三杀打破黑马幻想?拖米KPL是座大山随着KPL秋季赛的落幕,职业联赛暂时进入了休赛期阶段,不过王者荣耀的玩家们并不用担心,同样紧张激烈的王者荣耀挑战者杯在12月31日火热来袭,这也将是2022开年第一战,各大战队都希艾尔登法环获ESRB评级附带部分内容细节描述艾尔登法环的信息近日出现在ESRB评级网站中,并获得M17评级。同时,如图所示,该页面上附有对游戏内容的一些针对性的介绍,包含特色玩法血腥暴力表现等等。具体如下这是一款角色扮演游戏女儿国国王上架不到1小时,销量直接突破百万,充值系统已经崩溃王者荣耀中甄姬是一个控制力比较强的法师英雄,甄姬的女儿国国王已经在正式服上架,相信很多喜欢甄姬的玩家都已经入手了这款史诗限定皮肤,西游记联动皮肤在游戏里面的折扣力度是比较大的,相比