当前位置: 首页 > 后端技术 > PHP

GWA2奇瓦兔介绍JsDelivr公共CDN的开发和配置

时间:2023-03-29 20:19:09 PHP

新冠肺炎疫情已经持续快一年了,疫苗已经在望。希望人类早日战胜这种疾病。GWA2奇瓦瓦持续更新升级。此次在升级、更新、优化的道路上更进一步,尝试引入公共CDN(ContentDeliveryNetwork,内容分发网络)。这样,基于GWA2的各种应用程序和网页可以更快地响应用户的请求。这种进步源于我们不懈的追求——更高、更快、更强。根据之前整理的提速优化思路(-gMISGmis升级:增加缓存、按时间快速搜索和全局SessionId等,https://ufqi.com/blog/gmis-up...),我们在缓存和减少方面,连续两天对页面进行了各种优化改进。其中,在缓存优化的方向上,已经进行了客户端缓存和服务端缓存,只缺少网络层缓存(CDN)。很久没有启动网络层缓存的升级操作了。第一,CDN与代码层的开发关系不大,甚至没有关系;第二,网络层的CDN几乎相当于增加服务器和带宽。没有合适的机会。据V2EX技术专家介绍,我们考察了JsDelivr公共CDN后发现,这是一个很好的开源CDN解决方案,可以实现静态资源免费分发,无需备案。WITH1.使用JsDelivr的准备JsDelivr允许托管和分发网页文件类型,包括JavaScript(.js)、CSS(.css)和一些小尺寸的图像(.jpg、.png等)。JsDelivr可以读取以上发布在npm、GitHub和WordPress上的相关静态文件。为了方便管理和更新GWA2使用的所有静态资源文件,我们选择将上述文件放在GitHub的公共项目(Repository)上。在GitHub上为某个项目、网站或App创建对应的Repos,将GWA2的view子目录下的所有非html文件上传到GitHub上对应的Repos。这些文件包括.js、.css、.ico、.jpg、.png等。由于JsDelivr的目标是分发静态资源文件,加载.html文件时,其content-type为text/plain,所以目前无法使用JsDelivr分发.html。从另一个角度来说,.html文件通常包括业务逻辑或者模板语言,最好放在自己的服务器上。经过上面的准备步骤,现在就可以通过以下路径访问到已经放在CDN网络中的静态文件了。例如https://cdn.jsdelivr.net/gh/UserName/ReposName/view/SiteName/abc.css其中gh代表JsDelivr上下文中的GitHub,UserName为当前资源文件在GitHub上的用户名,ReposName为GitHub上当前资源文件的项目名,view是GWA2的子目录,负责视图,文件结构与本地服务器一致。2.将CDNGWA2引入GWA2从一开始就采用了MVC分层设计,因此视图文件的修改比较集中。所有视图文件的加载都由一个名为$viewdir的全局变量控制。$viewdir告诉服务器或模板引擎视图文件所在的位置。如果要引入JsDelivr,只需要在项目中适当修改$viewdir的指向即可。通常涉及的文件在comm/footer.inc中。GWA2PHP:$cdnStaticPrefix=”//cdn.jsdelivr.net/gh/UserName/ReposName”;$viewdir=$cdnStaticPrefix.”/”.$viewdir;GWA2Java://-+cdn,12:342020-12-04StringcdnStaticPrefix="//cdn.jsdelivr.net/gh/UserName/ReposName";viewdir=cdnStaticPrefix+"/"+viewdir;3、速度明显提升。用户反馈很好。经过以上修改,程序同步和html或模板更新后,页面浏览加载的感觉会有明显提升。直观上,会有所谓的“秒开”。这一点在国内浏览海外服务器相关网站时尤为明显。从理论上讲,在HTML文件中,实际HTML代码的大小非常小。网上有一些这方面的资料,可能在10%左右,更多的是需要渲染页面的.js、.css和各种代码。类页面元素等。如果把后面的静态资源文件交给CDN网络,提速效果自然会有突飞猛进的提升。另外,将原本需要本地服务器解析请求和响应的内容,完全交给CDN网络,这无疑大大减轻了本地服务器的负载,减少了本地网络的带宽占用。相应的,这些丰富的资源可以更好更快的响应HTML页面的输出。这样潮起潮落,基本上国内的用户在浏览海外服务器的网站时,页面秒开是很有可能的。这里的“二次打开”应该主要是指第一次打开一个全新的页面。由于GWA2已经在客户端进行了大量的缓存,在第二次打开或刷新页面后,这些静态的.js、css和图片文件等,大部分都会被浏览器调用到本地缓存中去实现响应,那将是页面的极速加载。有时候幸福来得太突然,海外服务器的页面可以秒开,而且由于这个CDN不涉及具体的内容文件,所以不需要在国内备案,而且也是免费的——GitHub存储静态资源文件供free,JsDelivr负责免费分发到离用户最近的地方——据说全球有数百个CDN节点,几乎可以媲美一流的CDN服务。4、CDN回滚和容错作为一个可靠的庞大的CDN网络,JsDelivr是稳定的,但也需要防范以防万一。如果JsDelivr突然因为某种不明原因不可用,如何快速平滑地切换回本地服务器?也就是说,CDN服务需要能够在必要的时候回滚或者降级,以实现容错。这个改动在GWA2中比较简单。参考上面添加CDN时的操作。如果觉得CDN不可用,可以清除其分配,将资源文件请求切换到本地服务器。也就是说,正常情况下所有的CDN都是坏掉的。GWA2PHP:$cdnStaticPrefix="";#failover$viewdir=$cdnStaticPrefix."/".$viewdir;GWA2Java://-+cdn,12:342020-12-04StringcdnStaticPrefix="";#failoverviewdir=cdnStaticPrefix+"/”+viewdir;5.多源CDN和应用层CDN队列显然,GWA2可以在代码层实现多源CDN集群配置,我们可以定义$cdnStatixPrefix为当前CDN的符号程序中分配网络,同样可以定义N个不同的CDN网络,比如$cdnStaticPrefix2,$cdnStaticPrefix3...$cdnStaticPrefixN,当有这样的组队列CDN可用时,可以使用随机算法或者权重算法来将请求分发到这个CDN池中,从而实现更可靠的内容分发,当然也可以加入一定的心跳检测设备,自动剔除掉线和无效的CDN,同样的,基于心跳检测,正常的CDN网络会加入队列,实现网络的自动化、智能化运行。如上,完成引入JsDelivr公共CDN的GWA2吉娃兔的开发配置。-GWA2吉娃兔是《通用Web应用架构,https://ufqi.com/dev/gwa2/)》,基于-GWA2可以轻松构建各种网络应用,包括复杂的网上商城、在线医疗、在线教育、旅游交易平台、社区或社交网站和新闻网站等,以及企事业单位的各种在线门户、在线交互和服务操作系统等。它还可以包括服务器端对NativeApp的支持,甚至所有Web应用程序。-GWA2是为数不多的支持跨开发语言的应用程序框架之一,目前支持-Java、-PHP、-Perl、-Aspx和-Python。-GWA2是一种“通用Web应用程序架构”,基于-GWA2开发者可以轻松构建各种网络应用,包括复杂的网上商城、在线医疗服务、在线教学、旅游交易平台、社区或社交网站和新闻资讯网站等。应用还包括企事业单位的各种在线门户网站,在线交互和服务操作系统。而且它包含对NativeApp,甚至所有WebApp的服务器端支持。-GWA2是提供跨语言支持的Web框架之一-Java,-PHP,-Perl,-Aspx一个d-Python目前。-GWA2是E.A.S.Y**EasyAlong,SwiftYield**容易启动,快速输出。JSDelivr:开源的免费CDN快速、可靠、自动化服务~940亿请求/月服务~2990TiB/月2012GWA2以来ChiwaRabbit介绍了JsDelivr公共CDN-R/S2SQ的开发和配置