高分悬赏:动态生成部分html代码:js生成 VS jstl标签生成

二当家的黑板报 2014-08-17 09:24:01
很多情况下,我们的项目都需要动态地生成部分的html代码,之前一直用jq生成,不断的append进去,但有一次被项目主管批评过,说用jq生成大量的html代码不好。
而且,我个人感觉,这样做也是不好维护,毕竟维护html代码,需要去jq那里看,而且也不好看。
第二种方法,就是jsp的标签库如jstl,用一个foreach就可以循环生成一些html了,而且好看好维护,但是,有一个缺点就是,jsp标签库本质上是java代码来的,性能上应该比不上js生成的速度吧(因为js生成是:服务器传js代码过来,客户端生成html;而jstl标签生成是:服务器生成html,再将html传到客户端)。
所以,现在就纠结了。
不惜重分求看法。
...全文
425 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
Uncle_Jeffery 2014-08-27
  • 打赏
  • 举报
回复
凑个热闹
  • 打赏
  • 举报
回复
引用 21 楼 xiaopeipei2004 的回复:
$('#scriptid').html(); 可以这样使用。 有两个优点, 代码整齐可读性强; 浏览器不加载,不影响性能(与display=none的div等container相比较)
受教了
rmn190 2014-08-27
  • 打赏
  • 举报
回复
1. 量多时,不建议用JS。 太不直观,难维护了。 2. 建议用标签,一般情况下, 生成html的资源消耗可忽略。 由标签生成HMTL后, 可考虑静态化,那样, 一次生成后,后面直接取就行了。(当然得有一个静态化文件的维护问题)。 另外,可考虑用其他的模板技术,如velocity、freemarker等, 他们在执行上好像是快于JSP。
grapepaul 2014-08-26
  • 打赏
  • 举报
回复
$('#scriptid').html(); 可以这样使用。 有两个优点, 代码整齐可读性强; 浏览器不加载,不影响性能(与display=none的div等container相比较)
  • 打赏
  • 举报
回复
你说的list 集合 数据量大吗??如果很大很容易导致浏览器崩溃的,另外响应速度也慢, 而且在显示方面你还要先在后台转成json格式再传给前台。。 jstl在服务器上 性能很差吗??可以优化代码或者数据库表的呀。。
  • 打赏
  • 举报
回复
引用 11 楼 ldh911 的回复:
补充一句。方案没有绝对优劣,都是为目标服务的。 在你的系统没有很高兴能要求的情况下,尽量选择通用性强、复杂度低、成熟性高 的大众技术方案。 因为没有看到你顶楼提及性能要求,所以我比较赞成你主管的观点。
有道理
  • 打赏
  • 举报
回复
引用 12 楼 xiaopeipei2004 的回复:
解决可读性。

<script type='anything' id='sth'>
<div>any HTML code</div>
</script>
对于你说的可维护性,jq代码对于前端开发人员来说很容易维护... 可能是因为我不懂jstl,所以这样觉得
有道理 请教一下,你那段script怎么用的
  • 打赏
  • 举报
回复
引用 17 楼 ch656409110 的回复:
你说的list 集合 数据量大吗??如果很大很容易导致浏览器崩溃的,另外响应速度也慢, 而且在显示方面你还要先在后台转成json格式再传给前台。。 jstl在服务器上 性能很差吗??可以优化代码或者数据库表的呀。。
你误解我的意思了 客户端浏览网页,需要从服务器获取html、js和css等代码到客户端解析显示吧 先补充一个基础知识:自定义jsp标签(如:jstl)的实质是在jsp上写<% java代码 %>,也就是servlet根据jsp里面的java逻辑生成html代码返回客户端;jsp里面的html代码也是servlet生成返回到客户端的; 但其实html代码不一定要从服务器返回的,可以根据服务器返回的js,客户端再根据js生成html代码。 所以现在的问题是那部分循环重复的html代码是服务器生成返回(即jstl生成),还是客户端生成(js生成),那个好? 从代码实现上看,jstl更容易看懂,更好维护。 但从返回的html代码量上看,明显客户端生成(即js生成),服务器返回的数据量更少。
wanghualeilei 2014-08-25
  • 打赏
  • 举报
回复
我说的标签不是指jstl 是自定义taglib
  • 打赏
  • 举报
回复
引用 15 楼 wanghualeilei 的回复:
我说的标签不是指jstl 是自定义taglib
jstl标签难道不是taglib标签的一种
grapepaul 2014-08-22
  • 打赏
  • 举报
回复
解决可读性。

<script type='anything' id='sth'>
<div>any HTML code</div>
</script>
对于你说的可维护性,jq代码对于前端开发人员来说很容易维护... 可能是因为我不懂jstl,所以这样觉得
MiceRice 2014-08-22
  • 打赏
  • 举报
回复
补充一句。方案没有绝对优劣,都是为目标服务的。 在你的系统没有很高兴能要求的情况下,尽量选择通用性强、复杂度低、成熟性高 的大众技术方案。 因为没有看到你顶楼提及性能要求,所以我比较赞成你主管的观点。
  • 打赏
  • 举报
回复
引用 13 楼 wanghualeilei 的回复:
你确定用标签生成 会有性能问题?
也不能说性能有问题,但是我两种都做了,对比了一下,js生成是比jstl生成要快。
wanghualeilei 2014-08-22
  • 打赏
  • 举报
回复
你确定用标签生成 会有性能问题?
  • 打赏
  • 举报
回复
引用 6 楼 Inhibitory 的回复:
需要看你的数据是怎么来的,有些时候用JSTL,有些时候用JQ,的看数据是怎么来的,我们两种方式都用 JSTL一个foreach搞定,JQ不也是一个for搞定吗?
对,我也是两种混合着用的; 但是就是对于循环的这种情况,我到底用jstl的foreach还是用jq的for呢
Inhibitory 2014-08-18
  • 打赏
  • 举报
回复
需要看你的数据是怎么来的,有些时候用JSTL,有些时候用JQ,的看数据是怎么来的,我们两种方式都用 JSTL一个foreach搞定,JQ不也是一个for搞定吗?
  • 打赏
  • 举报
回复
引用 9 楼 shijing266 的回复:
数据量很大么? 如果很大,大到会影响服务器反应速度,导致网页一直在load, 那么你可以用js去生成, 但是你想过js的维护了么? 可能你自己写的,你能看懂,但是如果换一个人接手,他能看懂么? 如果不是很复杂,建议使用jstl
有道理
  • 打赏
  • 举报
回复
数据量很大么? 如果很大,大到会影响服务器反应速度,导致网页一直在load, 那么你可以用js去生成, 但是你想过js的维护了么? 可能你自己写的,你能看懂,但是如果换一个人接手,他能看懂么? 如果不是很复杂,建议使用jstl
MiceRice 2014-08-18
  • 打赏
  • 举报
回复
项目管理要综合考虑技术通用性、后续维护成本之类的问题。 比如: ◎ 发明该技术的人如果离职了,其它人接手是否很快很方便? ◎ 该项目以后可不可以交给成本更低的人维护,比如来个大专毕业生? ◎ 经常性的有些需求小变化,是否可以很快调整?调试复杂度高么?部署快么?
zy_think123 2014-08-17
  • 打赏
  • 举报
回复
看个人取舍了
加载更多回复(4)
JSTLJSP Standard Tag Library ,JSP标准标签库)是一个不断完善的开放源代码JSP标签库,是由apache的jakarta小组来维护的。JSTL只能运行在支持JSP1.2和Servlet2.3规范的容器上,如tomcat 4.x。在JSP 2.0中也是作为标准支持的。   JSTL 1.0 发布于 2002 年 6 月,由四个定制标记库(core、format、xml 和 sql)和一对通用标记库验证器(ScriptFreeTLV 和 PermittedTaglibsTLV)组成。core 标记库提供了定制操作,通过限制了作用域的变量管理数据,以及执行页面内容的迭代和条件操作。它还提供了用来生成和操作 URL 的标记。顾名思义,format 标记库定义了用来格式化数据(尤其是数字和日期)的操作。它还支持使用本地化资源束进行 JSP 页面的国际化。xml 库包含一些标记,这些标记用来操作通过 XML 表示的数据,而 sql 库定义了用来查询关系数据库的操作。   两个 JSTL 标记库验证器允许开发人员在其 JSP 应用程序中强制使用编码标准。可以配置 ScriptFreeTLV 验证器以在 JSP 页面中禁用各种类型的 JSP 脚本元素 — scriptlet、表达式和声明。类似地,PermittedTaglibsTLV 验证器可以用来限制可能由应用程序的 JSP 页面访问的定制标记库集(包括 JSTL 标记库)。   尽管 JSTL 最终将会成为 J2EE 平台的必需组件,但目前只有少数应用程序服务器包括它。JSTL 1.0 的参考实现可作为 Apache 软件基金会(Apache Software Foundation)的 Jakarta Taglibs 项目(请参阅参考资料)的一部分而获得。可以将该参考实现中的定制标记库合并到任何支持 JSP 1.2 和 Servlet 2.3 规范的服务器,以添加对 JSTL 的支持。   如果要使用JSTL,则必须将jstl.jar和 standard.jar文件放到classpath中,如果你还需要使用XML processing及Database access (SQL)标签,还要将相关JAR文件放到classpath中,这些JAR文件全部存在于下载回来的zip文件中。这个zip文件可以从http://jakarta.apache.org/builds/jakarta-taglibs/releases/standard/jakarta-taglibs-standard-1.0.zip下载。 .
今天做项目,用到了el表达式和jstl,在tomcat6.0上跑得好好的,没想到copy到tomcat5.5后,服务器起不来了,是tomcat版本的问题。查阅了不少资料,现在总结如下: 错误信息: java.lang.NoClassDefFoundError: javax/el/ExpressionFactory 分析:少包,上网查阅后发现解决方法 解决方法:将javaee.jar包再copy一份放在tomcat目录的common\lib下 如上完成后即解决了该异常,大以为大功告成,没想到又出现了新异常 错误信息:java.lang.NoSuchMethodError: javax.servlet.JSP.PageContext.getELContext()LJAVAx/el/ELContext 分析:这个问题网上找了半天没看到解决方法,只好自己想办法。想起先前看到的一个知识点:tomcat 6 实现了 servlet 2.5 和JSP2.1的规范相应的 tomcat 5 实现的是 2.4和2.0,想到tomcat5不支持JSTL1.2,于是替换JSTL1.1的包试试看后,问题解决 解决方法:移出工程lib目录中的JSTL1.2.jar,添加standard-1.1.jar和JSTL1.1.jar 总结: jstl1.1版本由2个必要包构成:standard-1.1.jar和JSTL1.1.jar;而jstl1.1版本只有一个必要包JSTL1.2.jar。(一开始在替换的过程中想当然的用JSTL1.1.jar换JSTL1.2.jar,然后遗漏了standard-1.1.jar,耽搁了不少时间。) 经测试,tomcat6.0支持JSTL1.2版本,也支持JSTL1.1版本;tomcat5.5只支持JSTL1.1(JSTL1.1一下版本未测试) 不建议将2个版本的3个包同时放在工程中,可能会发生版本冲突。(另外,实际操作的时候发现JSTL1.2.jar和JSTL1.1.jar这2个包放一起可以在tomcat5.5和tomcat6.0上跑,鉴于JSTL1.1.jar里面没有c.tld等文件,猜测JSTL1.1.jar里面只是放置了1.1的专用的类和信息)

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧