jscode

            //1.0 思路
            //VH.PutSet(TagFields.PageName, PageName.Index);
            //VContent.Put(TagFields.JsCode, VH.OutString(string.Concat(this.PcMobile, "common/_Self_Js.html"), true));

面临问题:以前的的代码只能放在页面的底部,虽然可以每个页面载入自己的代码,但是代码摆放的位置不够灵活
而且代码没有压缩功能。还可能由于页面没有载入完全导致js代码执行起来有问题。看了下兰亭的网页,他们把大量的js代码,甚至JQuery库都输出在了页面上
后来想了一下为什么这样做?
可以减少不必要的js额外请求;不会因为库没有下载下来导致一些代码没有执行
实现要求:使用${jscode}标签在页面中的任意位置,输出该页面自定义的js代码,并提供对代码的压缩功能
第一个版本思路
NVelocity有一个助手,在初始化完成之后指定一个模板的名字,就可以输出这个模板的字符串,有了字符串就可以对字符串进行压缩处理
所以尝试了下
  1. #region 代码
  2. /*VelocityHelper vh = new VelocityHelper();
  3. string pathTemplate = ConfigHelper.BaseDirectory + "themes\\" + ConfigManager.GetConfig().Theme
  4. + ConfigManager.GetConfig().PCthemeDir.Replace("/", "\\") + "common\\";
  5. vh.Init(pathTemplate);
  6. vh.PutSet(TagFields.PageName, PageName.Index);
  7. string jsString = vh.OutString("_Self_Js.html");
  8. VContent.Put("jsstring", ZipHtml.GZipHtml(jsString));*/
  9. #endregion
第一:每个页面都要编写上面的代码增加了额外的开销
第二:麻烦
第三:手机模板和PC模板各自定义的js代码有可能不一样,所以_Self_Js.html不在同一个目录下,所以不行

第二个版本思路
尝试将VelocityHelper封装到页面的基类中去,变成一个静态的变量,这样不用增加额外的对象开销,而且内部的引擎不用做过多的初始化
在static HttpCustom()中尝试将其初始化,模板路径和HttpCustom路径保持一致,并且只初始化一次
这样在每个页面中 只需要调用就可以生成这个页面的js代码,同时传递了PcMobile目录,就可以为PC和Mobile生成各自的js代码 【比第一版的思路好多了】

  1. VH.OutString(string.Concat(this.PcMobile, "common/vmjs.vm"), true)
坏处:每个页面都需要编写这个代码,代码还得需要编译
每个页面还需要PutSet这个页面的类型,才能动态的加载js代码
不灵活 也比较麻烦

第三版
既然可以在html中调用对象的方法,那么应该讲VH对象添加到数据上下文当中去
在html页面中调用这个方法
同时做进一步的封装string.Concat(this.PcMobile, "common/vmjs.vm") 封装到 VH的内部处理
将PcMobile 封装成它的一个属性,在HttpCustom识别出访问设备,也就是PcMobile初始化之后
也将VH的PcMobile 初始化,如此一来
在页面中就可以这样调用
    $VH.PutSet("pagename","index")
    $VH.OutString(true)

好处:灵活了许多
pagename 不仅仅是系统中固定的那几个值了,可以自定义
而且可以自定义是否压缩js代码
到此完成!

总结:封装思想  确定需求






【思路】-jscode的更多相关文章

  1. Spring Security 整合 微信小程序登录的思路探讨

    1. 前言 原本打算把Spring Security中OAuth 2.0的机制讲完后,用小程序登录来实战一下,发现小程序登录流程和Spring Security中OAuth 2.0登录的流程有点不一样 ...

  2. .net点选验证码实现思路分享

    哈哈好久没冒泡了,最进看见点选验证码有点意思,所以想自己写一个. 先上效果图 如果你被这个效果吸引了就请继续看下去. 贴代码前先说点思路: 1.要有一个汉字库,并按字形分类.(我在数据库里是安部首分类 ...

  3. TYPESDK手游聚合SDK服务端设计思路与架构之一:应用场景分析

    TYPESDK 服务端设计思路与架构之一:应用场景分析 作为一个渠道SDK统一接入框架,TYPESDK从一开始,所面对的需求场景就是多款游戏,通过一个统一的SDK服务端,能够同时接入几十个甚至几百个各 ...

  4. 整理下.net分布式系统架构的思路

    最近看到有部分招聘信息,要求应聘者说一下分布式系统架构的思路.今天早晨正好有些时间,我也把我们实际在.net方面网站架构的演化路线整理一下,只是我自己的一些想法,欢迎大家批评指正. 首先说明的是.ne ...

  5. js数组去重几种思路

    在一些后台语言中都内置了一些方法来处理数组或集合中重复的数据.但是js中并没有类似的方法,网上已经有一些方法,但是不够详细.部分代码来源于网络.个人总计如下:大致有4种思路 1)使用两次循环比较原始的 ...

  6. [Django]用户权限学习系列之设计自有权限管理系统设计思路

    若在阅读本片文章遇到权限操作问题,请查看本系列的前两章! http://www.cnblogs.com/CQ-LQJ/p/5609690.html和http://www.cnblogs.com/CQ- ...

  7. 分享一个CQRS/ES架构中基于写文件的EventStore的设计思路

    最近打算用C#实现一个基于文件的EventStore. 什么是EventStore 关于什么是EventStore,如果还不清楚的朋友可以去了解下CQRS/Event Sourcing这种架构,我博客 ...

  8. ENode框架单台机器在处理Command时的设计思路

    设计目标 尽量快的处理命令和事件,保证吞吐量: 处理完一个命令后不需要等待命令产生的事件持久化完成就能处理下一个命令,从而保证领域内的业务逻辑处理不依赖于持久化IO,实现真正的in-memory: 保 ...

  9. WebGIS中快速整合管理多源矢量服务以及服务权限控制的一种设计思路

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在真实项目中,往往GIS服务数据源被其他多个信息中心或者第三方 ...

随机推荐

  1. windows平台整合Apache与tomcat

    Apache与Tomcat整合的好处 Apache主要用来解析静态文本,如html.Tomcat虽然也有此功能,但Apache效率大大高于Tomcat,尤其是对于并发数较大的企业级应用,能更好的显示A ...

  2. linux下发现可疑用户时处理办法

    如果发现了linux被可疑用户远程登录了,怎么解决呢? 1.先查看最近系统的登录情况 last -10 表示最近10个用户登录的信息,如果发现有可疑账户,就是密码被破解了 [root@localhos ...

  3. 关于OJ1028的参考解法

    其中运用了最小公倍数与最大公约数乘积等于两数相乘的定理. #include <stdio.h> int main(int argc, char *argv[]) { int a,b,c,d ...

  4. Kanzi Q&A

    Q:为什么我的kanzi studio安装完后无法编译apk? A:请安装jdk,并设置环境变量,并更新thirdpartsdk. Q:为什么使用路径无法读取到列表listbox内的列表项? A:列表 ...

  5. jpg/png格式图片转eps格式的方法总结

    jpg/png格式图片转eps格式的方法总结 转自http://blog.sina.com.cn/s/blog_5410e7b50101lme2.html 用latex写论文的筒子应该遇到这样的问题: ...

  6. Codeforces 722C. Destroying Array

    C. Destroying Array time limit per test 1 second memory limit per test 256 megabytes input standard ...

  7. RabbitMQ详解

    本文地址:http://www.host900.com/index.php/articles/351/ 介绍RabbitMQ前,有必须先了解一下AMQP协议.AMQP协议是一个高级抽象层消息通信协议, ...

  8. 转 unity 优化

    最近研究U3D开发,个人认为,精通一种新的技术,最快最好的方法就是看它的document,而且个人习惯不喜欢看中文的资料,原汁原味的东西是最正确的,一翻译过来很多东西就都不那么准确了.于是通读了uni ...

  9. 承接unity外包:2016年VR产业八大发展趋势

    在上周进行的2016年全球游戏开发者大会(GDC)期间,虚拟现实技术是一个重要议题.英文科技媒体VentureBeat近日刊出了一篇文章,对2016年VR产业的发展趋势进行了预测.游戏陀螺对文章分享的 ...

  10. 锁相关知识 & mutex怎么实现的 & spinlock怎么用的 & 怎样避免死锁 & 内核同步机制 & 读写锁

    spinlock在上一篇文章有提到:http://www.cnblogs.com/charlesblc/p/6254437.html  通过锁数据总线来实现. 而看了这篇文章说明:mutex内部也用到 ...