【西天取经】(骚操作)net core网站实现换皮肤主题
【西天取经】(骚操作)net core网站实现换皮肤
更换网站皮肤主题这项骚操作,看似简单却又非常复杂,目前网上见过的,用得最多的技术栈主要是以php解析型语言开发为主,因为php语言的特殊性质,决定php语言在实现网站更换皮肤主题的时候非常容易;反过来像java、c#这种编译型语言想要实现更换皮肤的操作却非常难做到。这也就是为啥全世界用php语言开发的网站数量是最多的,.net目前仅排在第二位,java甚至没有排进第三的位置,考虑java启动速度更慢、需要预热时间更长等因素所以在开发网站的排名里比较靠后,还有在全世界的这份排名里,我猜没有把国内java开发的网站算进去,因为国内java发展速度太快了与世界脱轨了。不管国内在怎么发展快,java在做更换网站皮肤主题这项功能时确实优势不明显,劣势很突出。
根据最新的 Web 开发统计数据,全球以.NET 开发而成的活动网站共有 2933 万 1196 个,而使用 PHP 语言构建的活动网站则有 3780 万 5937 个。
下面我要介绍一下我是怎么用.net core实现更换皮肤主题的操作,目前我们正在用的有三种方式:
1、只更换静态文件,例如:css和js,使用JQuery.EasyUI里面自带的皮肤包实现更换皮肤,这种实现方式最简单,因为EasyUI都给我们准备好了,只需要用js代码更换css样式文件就可以了。这种方式不需要.net core也能做,和后端编程语言没有关系,公司java的项目我也用了EasyUI做的前端框架。目前这种方式主要适合公司内部后台管理系统使用。
2、在第一种的基础上,增加更换读取cshtml的文件夹,这样就可以把写好的页面文件html统一放在自己指定的文件夹目录里面,这种方式不仅仅实现了更换css和js文件,还可以更换html文件。
使用C#编程实现更换.net core里面寻找视图cshtml文件的位置,需要实现IViewLocationExpander接口。
public class ViewLocationExpander : IViewLocationExpander
在这个IViewLocationExpander接口中定义了两个方法:
- ExpandViewLocations这个方法用来实现重新定位视图文件的位置;
- PopulateValues这个方法用来清理缓存,主要是切换完模版皮肤文件夹时,会出现缓存的问题,导致切换完之后马上看不到最新的页面样式。
第二种方式截止2020年09月30日之前,我们正在使用这种方式实现网站更换皮肤的功能,从2020年10月份开始我们就会换成下面第三种方式实现网站更换皮肤的操作了。
我目测博客园网站目前正在使用的更换博主blog的皮肤方案就是这第二种方式。
3、这种方式更换皮肤就是最狠的手段了,不仅更换css,js,html,甚至还要把dll文件也彻底换掉。实现第三种方式C#一共需要两步:
- 需要使用ApplicationPartManager更换dll,
- 需要使用app.UseStaticFiles(new StaticFileOptions())更改皮肤用到的静态文件资源的读取位置。
这种方式最难,最复杂,全部更换操作都是在网站启动的时候完成,一旦代码执行更换皮肤出了问题,后面所有业务代码也全部作废掉了,试问页面都没有了咋给用户展示业务功能呢?
如果还想加上我前两篇文章里写的对静态文件增加版本号和对SEO、CDN的友好支持,那就需要把这三篇文章里面的知识点加在一起一锅烩了。
从2020年10月份开始我们就要使用这种方式了。好处是,编程时模版的皮肤项目和webmvc项目分开,前端人员可以有单独的地方写html和css、js了,前端和后端程序员的项目不在一起搀和了,从而达到前端视图项目和后端业务项目彻底分离,这种前后端开发时分开的编程思想就像现在比较流行的Vue编程思想了。但这种方式它的最大缺点是,每次更换皮肤之后都需要重新启动网站,要不也没办法做到网站彻彻底底更换之前用过的dll文件和皮肤样式。
截止目前一共开发了4套皮肤样式,给用户进行选择和使用。
先休息一下
未完待续