作为一个工作一年的菜鸟,在公司做了几个外包项目,也接触到了不同形式的web开发。其实也没多少,就是javaweb开发和HTML5移动开发,这两者在页面展示的时候的解决方案还是有所不同的。

1、vo+el表达式

  在javaweb开发中,我们使用的是SSM框架(Spring,SpringMVC,Mybatis)。一些页面的跳转,我们通过返回SpringMVC的ModelAndView来实现,并采用这种方式来展示页面。

  其基本思想是:后端构造实体类,这个实体类里面包含目标页面所需要的所有属性,这个实体类由一张表或多张表中对应的字段组成,俗称vo(value object)。属性的值可以是String,int,Map,List等等,也就是说vo里面又可以套vo,因此这种方式非常灵活好用。

  但是这种方式,把要展示的内容和控制混杂在一起,html里边混杂了大量el控制标签,很不美观。并且,利用el表达式生成html代码,这是一个在服务器端执行的动作,在服务器端解析完成之后,才发送到客户端浏览器上,这样做会占用大量服务器资源,而且速度缓慢。

示例如下:

<c:forEach var="advert" items="${advertInfo.getList()}">
    <tr class="text-c">
        <td>${advert.advert_id}</td>
        <td>${advert.advert_name}</td>
        <td><img src="${advert.advert_img}" width="100" alt="广告图片"/></td>
        <td>${advert.advert_url}</td>
        <td>
            <c:if test="${advert.advert_usable eq 0}"><span class="usable-close">不可用</span></c:if>
            <c:if test="${advert.advert_usable eq 1}"><span class="usable-start">可用</span></c:if>
        </td>
        <td>${advert.advert_index}</td>
        <td><fmt:formatDate value="${advert.create_time}" pattern="yyyy-MM-dd"/></td>
        <td class="td-manage">
            <c:if test="${advert.advert_usable eq 0}">
                <a class="ml-5 advert-usable" data-state="1" title="开启" href="javascript:;"><span class="Hui-iconfont Hui-iconfont-shenhe-tongguo"></span></a>
            </c:if>
            <c:if test="${advert.advert_usable eq 1}">
                <a class="ml-5 advert-usable" data-state="0" title="关闭" href="javascript:;"><span class="Hui-iconfont Hui-iconfont-shenhe-tingyong"></span></a>
            </c:if>
            <a class="ml-5 advert-delete" title="删除" href="javascript:;"><span class="Hui-iconfont Hui-iconfont-del2"></span></a>
        </td>
    </tr>
</c:forEach>

2、ajax+JSON拼接html

  HTML5开发移动端界面,我们采用这种方式进行前后端交互,这也是目前比较热门一种方式。

  其基本思想是:通过ajax发起请求,服务端返回一个json字符串,这个json字符串中包含前端需要展示的信息,前端拿到json串后,通过拼接html来完成界面的展示。

示例如下:

$.ajax({
    url: "localhost:8080/demo/advertList.do",
    type: "post",
    async: true,
    dataType: "json",
    success: function(data) {
        var content = "";
        for (var i = 0, len = data.length; i < len; i++) {
            content += '<div class="mui-slider-group mui-slider-loop">' +
                '<div class="mui-slider-item mui-slider-item-duplicate"><a><img name="' + res[i].advertUrl + '" class="img_slider" src="' + res[i].advertName + '" /></a></div>' +
                '<div class="mui-slider-item"><img name="' + res[i].advertUrl + '" class="img_slider" src="' + res[i].advertName + '" /></div>' +
                '<div class="mui-slider-item"><a><img name="' + res[i].advertUrl + '" class="img_slider" src="' + res[i].advertName + '" /></a></div>' +
                '<div class="mui-slider-item"><a><img name="' + res[i].advertUrl + '" class="img_slider" src="' + res[i].advertName + '" /></a></div>' +
                '<div class="mui-slider-item mui-slider-item-duplicate"><a><img name="' + res[i].advertUrl + '" class="img_slider" src="' + res[i].advertName + '" /></a></div>' +
                '</div><div class="mui-slider-indicator"><div class="mui-indicator mui-active"></div>' +
                '<div class="mui-indicator"></div><div class="mui-indicator"></div></div>';
        }
        document.getElementById("ul_list").innerHTML = content;
    },
    error: function(xhr, type, errorThrown) {
        console.log(type);
    }
});

  这样做的好处就是,服务端只负责返回数据,而页面的展示由前端来完成,服务器承受的压力明显减少。但是缺点也很明显,那就是字符串中拼接了大量的html标签,可维护性极低。拼接html,打乱了html原有的层次结构,根本看不出来原来的结构,整个就是一坨字符串堆积在那里。

3、javascript模板引擎

  javascript模板引擎可以很好的保留html原有格式,并且保留js构建html速度快的特点。我们之前做移动端开发,了解了几款模板引擎后,选择了artTemplate.js,因为他更加符合我们的需求并且性能相对较高。

示例如下:

html部分

<script type="text/html" id="advert_tmpl">
    {{each list as value i}}
    <div class="mui-slider-group mui-slider-loop">
        <div class="mui-slider-item mui-slider-item-duplicate">
            <a><img name="{{value.advertName}}" lass="img_slider" src="{{value.advertUrl}}" />{{value.advertName}}</a>
        </div>
    </div>
    {{/each}}
</script>

javascript部分:

var advertList = template("advert_tmpl", data);
document.getElementById("ul_list").innerHTML = advertList;

  可以很明显地看到,采用javascript模板引擎来实现页面的展示。不仅html结构清晰,而且javascript部分只需要处理逻辑,不需要进行过多的html拼接操作。而且artTemplate.js文件只有6KB左右,同时具有良好的可扩展性,是一款不可多得的javascript模板引擎。

  

JavaScript模板引擎artTemplate.js——为什么使用模板引擎?的更多相关文章

  1. JavaScript模板引擎artTemplate.js——如何引入模板引擎?

    artTeamplate.js在github上的地址:artTemplate性能卓越的js模板引擎 引入模板引擎,就是引入外部javascript啦,并且artTemplate.js不依赖其他第三方库 ...

  2. JavaScript模板引擎artTemplate.js——引入子模板

    之前的例子都是单一结构的对象,如果遇到复杂对象结构,我们可以通过引入子模板来实现html的渲染. 依旧以之前的数据作为例子: <div id="content">< ...

  3. JavaScript模板引擎artTemplate.js——结语

    再次首先感谢模板的作者大神,再次放出github的地址:artTemplate性能卓越的js模板引擎 然后感谢博客园的一位前辈,他写的handlebars.js模板引擎教程,对我提供了很大的帮助,也是 ...

  4. JavaScript模板引擎artTemplate.js——两种方法实现性别的判定

    template.helper(name, callback) name:必传,辅助事件的名称. callback:必传,辅助事件的回调函数. return:undefined 所谓的辅助事件,主要用 ...

  5. JavaScript模板引擎artTemplate.js——template.compile()方法

    template.compile(source, options) source:必传,渲染模板的内容. options:可选,通常不传.(其实是我还没研究明白) return:一个渲染函数. 示例如 ...

  6. JavaScript模板引擎artTemplate.js——template()方法

    template(id, data)方法: id:必传,渲染模板的id. data:可选,一个Object对象. return:传data—>渲染完成html代码:不传data—>一个渲染 ...

  7. JavaScript模板引擎artTemplate.js——是否编码输出html字符

    template.config(name, value)方法用于更改引擎的默认配置. 其中字段escape,类型为boolean,默认为true. 首先,我们不修改配置信息输出一段带有html标签的字 ...

  8. JavaScript模板引擎artTemplate.js——template.helper()方法

    上一篇文章我们已经讲到了helper()方法,但是上面的例子只是一个参数的写法,如果是多个参数,写法就另有区别了. <div id="user_info"></d ...

  9. 前端模板引擎artTemplate.js

    . 关于artTemplate模板引擎的详细原理请移步高性能JavaScript模板引擎原理解析,本文只探讨如何使用.初学前端的人一般对于绑定数据都是使用原生js或者jquery来拼接字符串,此为ha ...

随机推荐

  1. Objective-C语言--属性和实例变量

    看到一篇讲解特别清晰的blog,与大家共享:http://blog.csdn.net/addychen/article/details/39525681

  2. 使用Intellij IDEA搭建Ext JsMVC web项目

    由于自己从android开发转来学习web开发,最近在学习Jsp,之前接触过一点Extjs,所以用jsp来配合ext试试. Ext JS介绍 extjs是一个javascript框架,它的好处就是有它 ...

  3. Android Studio 恢复小窗口停靠模式(Docked Mode)

    安卓studio在使用小窗口时,如果我们点击取消了窗口的docked mode模式,窗口就会变成,你一旦触发窗口以外的区域,窗口就会龟缩回去.此时,如果你想要恢复回原来的docked mode的话,具 ...

  4. Android measure过程分析

    作为一名Android开发人员,我们都知道一个View从无到有,会经历3个阶段: 1. measure/测量阶段,也就是确定某个view大小的过程: 2. layout/布局阶段,也就是确定其左上右下 ...

  5. Android开发--异步加载

    因为移动端软件开发思维模式或者说是开发的架构其实是不分平台和编程语言的,就拿安卓和IOS来说,他们都是移动前端app开发展示数据和用户交互数据的数据终端,移动架构的几个大模块:UI界面展示.本地数据可 ...

  6. 使用Filter跟踪Asp.net MVC页面加载时间

    最近,客户一直反馈系统使用慢,有时候能够指出具体是哪个页面,有时候又只是笼统地反馈慢.这种问题就像是幽灵一样,非常不好处理.因为导致这种问题的因素非常之多,而且在开发工程中,很难模拟出实际运行是的环境 ...

  7. Linux下解压超过4G的zip文件

    从Windows平台通过FTP上传一个大小约为6G的zip文件到Linux系统(Oracle Linux Server release 5.7)上,解压过程中出现如下错误: 1: [root@gsp ...

  8. x01.os.19: linux 0.0

    linux 0.0 是一个丢失的版本,但赵炯老师又在 linux 0.11 的基础上,使它起死回生.www.oldlinux.org 有大量资源可供下载,值得一看. 1.要编译运行,首先需安装:sud ...

  9. 2-3 Linux文件管理命令详解

    1. 复制文件 cp: copy 格式  SRCFILE         DEST 一个文件到一个文件 多个文件到一个目录 注,cd 后面什么都不加,是进入用户的家目录 如果目标文件不存在,则先创建文 ...

  10. Android欢迎界面

    欢迎界面,最典型的表现: 1.是整个应用的启动界面: 2.没有标题栏: 3.几秒之后才进入主界面. 所以实现上面3点,一个最基本的欢迎界面就做出来了. 首先,新建一个Activity,命名为Splas ...