<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    jinfeng_wang

    G-G-S,D-D-U!

    BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
      400 Posts :: 0 Stories :: 296 Comments :: 0 Trackbacks

    http://hi.baidu.com/yanhua365/blog/item/a05930ad04b777094a36d662.html

    頁(yè)面中太多的自定義標(biāo)簽會(huì)不會(huì)影響性能?

    太多的自定義標(biāo)簽(尤其是這種包含了一部分業(yè)務(wù)邏輯的標(biāo)簽)會(huì)不會(huì)影響性能呢?下面一段文字是我以前寫(xiě)的,可以說(shuō)明一些問(wèn)題,但真正對(duì)性能會(huì)不會(huì)產(chǎn)生太大的影響,還要看具體的情況,如果有必要的話,做一下性能測(cè)試得出的結(jié)果才是可靠的。

    我們知道,JSP歸根到底是Servlet,也就是說(shuō)最終是要編譯成Servlet的。如果是在Servlet的service方法中new一個(gè)Tag處理類(lèi)來(lái)處理出現(xiàn)的標(biāo)簽的話,那就意味著每一次客戶的請(qǐng)求都會(huì)生成新的Tag處理類(lèi),這樣對(duì)服務(wù)器的性能和資源影響都很大。而如果把Tag處理類(lèi)的對(duì)象做為Servlet的一個(gè)屬性的話,又會(huì)遇到線程安全等問(wèn)題。據(jù)說(shuō),不同的JSP容器有不同的處理方式,有的容器下,一個(gè)頁(yè)面上出現(xiàn)太多的自定義標(biāo)簽,響應(yīng)速度就會(huì)很慢。真擔(dān)心太多的JSP和太多的自定義標(biāo)簽會(huì)使服務(wù)器承受不了啊。--今天突然想到,可以看一下Tomcat是怎么把包含有自定義標(biāo)簽的JSP頁(yè)面編譯成Servlet的,也許就清楚自定義標(biāo)簽對(duì)性能的影響有多大了!
    原來(lái),Tomcat用了緩沖池的概念來(lái)解決。。。
    比如我在JSP中用到了一個(gè)Struts標(biāo)簽<html:text property="username"></html:text>那么,在對(duì)應(yīng)的JSP編譯的Servlet中會(huì)有一個(gè)這樣的屬性private org.apache.jasper.runtime.TagHandlerPool _jspx_tagPool_html_text_property;可以看出來(lái),這是Tomcat提供的一個(gè)標(biāo)簽處理的緩沖池,在下面會(huì)用到它。在Servlet中會(huì)生成下面這個(gè)方法:
     private boolean _jspx_meth_html_text_0(javax.servlet.jsp.tagext.JspTag _jspx_th_html_form_0, PageContext pageContext)
              throws Throwable {
        JspWriter out = pageContext.getOut();
        /* ----  html:text ---- */
        org.apache.struts.taglib.html.TextTag _jspx_th_html_text_0 = (org.apache.struts.taglib.html.TextTag) _jspx_tagPool_html_text_property.get(org.apache.struts.taglib.html.TextTag.class);
        _jspx_th_html_text_0.setPageContext(pageContext);
        if (_jspx_th_html_form_0 instanceof javax.servlet.jsp.tagext.SimpleTag)
          _jspx_th_html_text_0.setParent(new javax.servlet.jsp.tagext.TagAdapter((javax.servlet.jsp.tagext.SimpleTag) _jspx_th_html_form_0));
        else
          _jspx_th_html_text_0.setParent((javax.servlet.jsp.tagext.Tag) _jspx_th_html_form_0);
        _jspx_th_html_text_0.setProperty("username");
        int _jspx_eval_html_text_0 = _jspx_th_html_text_0.doStartTag();
        if (_jspx_th_html_text_0.doEndTag() == javax.servlet.jsp.tagext.Tag.SKIP_PAGE)
          return true;
        _jspx_tagPool_html_text_property.reuse(_jspx_th_html_text_0);
        return false;
      }
    可以看出,在這個(gè)方法中,對(duì)標(biāo)簽處理類(lèi)做了緩沖池處理,可以大大提高性能。
    當(dāng)然,_jspx_tagPool_html_text_property這個(gè)Servlet的屬性,要在初始化時(shí)賦值,在最后釋放掉。
    public void _jspInit() {
            _jspx_tagPool_html_text_property = org.apache.jasper.runtime.TagHandlerPool.getTagHandlerPool(getServletConfig());

     public void _jspDestroy() {
            _jspx_tagPool_html_text_property.release();

    需要說(shuō)明的是,這種緩沖池是在這個(gè)JSP生命周期的范圍內(nèi)的,也就是說(shuō),另一個(gè)JSP頁(yè)面用到了相同的標(biāo)簽,也會(huì)重新建立一個(gè)緩沖池,和這個(gè)頁(yè)面毫無(wú)關(guān)系。還有一點(diǎn),就是在同一個(gè)JSP頁(yè)面中,也不是一個(gè)標(biāo)簽對(duì)應(yīng)一個(gè)緩沖池,比如說(shuō)我用到了link標(biāo)簽的兩種形式,它們屬性的個(gè)數(shù)是不一樣的:
       <html:link action="/test">Test with a link</html:link>
        <html:link action="/test" paramId="username" paramName="haha">
    那就會(huì)生成兩個(gè)緩沖池:
        private org.apache.jasper.runtime.TagHandlerPool _jspx_tagPool_html_link_action;
       private org.apache.jasper.runtime.TagHandlerPool _jspx_tagPool_html_link_paramName_paramId_action;
    這樣,雖然服務(wù)器上會(huì)有很多這樣的緩沖池,不過(guò)相對(duì)于每次請(qǐng)求創(chuàng)建Tag處理類(lèi)來(lái)說(shuō),這不算什么,大大提高了性能和利用了服務(wù)器資源。
    我們這里說(shuō)的都是Tomcat的解決方案,至于其它容器,也許有不同的解決方案。

    posted on 2008-03-05 16:10 jinfeng_wang 閱讀(1308) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): javaZZ
    主站蜘蛛池模板: 女人被男人躁的女爽免费视频| 免费无码黄网站在线看| 国内精品乱码卡1卡2卡3免费| 亚洲国产成人片在线观看| 你是我的城池营垒免费观看完整版 | 国产AV旡码专区亚洲AV苍井空| 天天影院成人免费观看| 伊人免费在线观看高清版| 亚洲精品无码久久久| 狠狠躁狠狠爱免费视频无码| 亚洲中文字幕无码久久综合网| 中文字幕免费在线看电影大全| 最新国产AV无码专区亚洲| A国产一区二区免费入口| 亚洲午夜未满十八勿入网站2| a级在线观看免费| 久久久久久亚洲Av无码精品专口| 鲁大师在线影院免费观看| 日本久久久久亚洲中字幕| 最近中文字幕无免费| 最新国产精品亚洲| 免费a级毛片大学生免费观看| 国产99久久久久久免费看| 亚洲va中文字幕无码久久| 免费A级毛片无码A∨| 国产成人精品日本亚洲18图| 超pen个人视频国产免费观看| 一级特黄色毛片免费看| 亚洲精品自产拍在线观看动漫| xx视频在线永久免费观看| 亚洲AV成人无码网天堂| 亚洲乱码一区二区三区在线观看| 亚洲精品视频在线免费| 婷婷亚洲综合五月天小说在线| 久久久久噜噜噜亚洲熟女综合| 13一14周岁毛片免费| 韩国亚洲伊人久久综合影院| 亚洲精品~无码抽插| 成人免费在线观看网站| 成人无码视频97免费| 亚洲av片不卡无码久久|