【思路】-jscode

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代码

到此完成!

总结:封装思想  确定需求

来自为知笔记(Wiz)

时间: 2024-11-09 07:36:59

【思路】-jscode的相关文章

linux开机获取不到IP排查思路

最近发现linux主机重启老是获取不到IP,每次都要手动dhclient eth0一下,很麻烦. 想了下,可能有问题 于是乎,就有这个排查思路: 1.查看开机时是否将网卡连接上来: 2.在虚拟机内使用命令查看,是否开机启动network服务,主要看3,5两个级别,最好开启: 3. 另外还需要看下网卡配置文件,是否配置正确,主要看 ONBOOT:开机启动网卡.这一项要是yes BOOTPROTO:网络分配方式,静态,这里需要小写,例如dhcp(dhcp自动获取),static(以静态IP方式存在)

《好好说话》:常见沟通场景的应对误区与应答思路、应答句式。4星。

全书针对谈话的常见场景,分析双方的本质问题和应答方的常见应对误区.应该的应答思路与句式.对沟通双方的思路的分析比较有功力. 感觉是从大专辩论赛的角度来组织全书的结构的.我更同意马东在序言中的说法,这本书更应该叫<好好思考>.不过如果从“好好思考”的角度来写书,全书的结构和重点要做一些变化. 书中把语言沟通的五种常见场景(沟通.说服.谈判.演讲.辩论)称作五个维度,还画了一个五边形,我认为这是全书最大的败笔,这里说“五种场景”比“五个维度”跟合适,用表格比用五边形更合适. 个人感觉:在大部分的场

Nginx+PHP (Fastcgi)常见502和504解决思路分享

公司一台测试服务器,最近出现504和502问题:(环境LNMP,php编译安装,Fastcgi模式),问题不难解决,但这里分享一下自己的排查思路和处理问题的方式. 504 Gateway Time-out,nginx 502 bad gateway 一.分析问题: Nginx 504 Gateway Time-out的含义是没有请求到可以执行的PHP-CGI. Nginx 502 Bad Gateway的含义是请求的PHP-CGI已经执行,但是由于读取资源的等没有执行完毕而导致PHP-CGI进程

大量逻辑判断优化的思路——责任链模式复习总结及其和状态模式对比

俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的总结知识点如下: 责任链模式概念和例子 使用的条件 和状态模式的比较分析 责任链的优缺点 纯的责任链和不纯的责任链 javax.servlet.Filter#doFilter()方法源码分析 基于AOP思想,模拟一个拦截器 前面说了一个状态模式,总结过程中发现和这个责任链的使用场景很类似,都是为了解耦大量复杂业务逻辑判断的,那么他们有什么不同呢?回忆状态模式——状态模式允许通过改变对象的内部状态而改变对象自身的行为,这个对象

五子棋计算思路

五子棋分为有禁手和无禁手,有禁手就是在无禁手的规则的基础上加上禁手规则,具体是规则不讲了.所以就人机对战来讲,从无禁手来做,比较好做.这里只讲无禁手的情况.无禁手就是只要能连成5个子,或者5个子以上,就算赢.    而计算机博弈要解决的问题,抽象地讲只有一个问题“下一步怎么走”,对五子棋来讲,就是下一步在哪个点落子.一般的思路在 棋类人机对战的一般原理 - BillySir - 博客园  已经有说.下面重点讲五子棋特有的算法思路. 下一步怎么走,总体思路:    1.如果下一步能赢,就走这一步 

Web 开发后端缓存思路

数据写入缓存: 在数据库与服务端之间利用 redis 这是一个很常见的场景.比如文章的浏览数,每次文章被浏览时,浏览数都 +1.如果每次都回写数据库,不免数据量太大.加上数据库看似简单,其实做了不少关于一致性(请看官了解一下所谓[一致性],[base],[acid])的检查. 而同时,浏览数并不要求保证一致性,只要大概准确就行了. 所以这时候,我们可以先将浏览数写入 redis,满足一定条件后,再回写数据库. 比如,在 controller 中,让每次浏览都在 redis 上 +1,+1 完成后

使用RNN解决NLP中序列标注问题的通用优化思路

/* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 .*/ author: 张俊林 序列标注问题应该说是自然语言处理中最常见的问题,而且很可能是最而没有之一.在深度学习没有广泛渗透到各个应用领域之前,传统的最常用的解决序列标注问题的方案是最大熵.CRF等模型,尤其是CRF,基本是最主流的方法.随着深度学习的不断探索和发展,很可能RNN模型会取代CRF的传统霸主地位,会成为解决序列标注问题的标配解决方案. 本文主要抽象出利用RNN解决序列标注问题的通用优化思路.这个RNN优化思路应该

政府采购电子办公系统总结-思路篇

前言 政府采购电子办公系统是实现招标,投标,评标等过程的电子化管理.在这个系统中我所负责的是招标文件制作和档案管理.这篇文章里我主要介绍一下对于这两部分业务的实现思路. 招标文件制作 实现思路 提炼出招标文件中相对来说容易变化的内容,这些内容因不同的招标项目而异.如:招标项目名称,采购单位,招标开始日期等.这些信息做成表单由用户来填写. 制作一个招标文件模板,在出现上述可变内容的地方写成"{}". 在生成招标文件时获得用户的信息,利用Aspose.Word替换上述模板中的"{

头像服务端设计思路

思路 一 把图片上传到服务端.命名以用户的(用户名md5)作为文件名.要是以前有文件,覆盖以前的文件 二编写一个servlet处理获取头像请求. servlet接收一个用户名md5+大小的参数 根据 用户名md5+大小生成对应的图片 例如 用户名为ada 上传到服务端的位置为 /gravatar/ada.jpg 请求地址:/webstore/headimg/ada.jpg?s=120 对应的服务端文件地址 /gravatar/ada.jpg(原图片) /gravatar/ada/120.jpg