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

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

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

    First they ignore you
    then they ridicule you
    then they fight you
    then you win
        -- Mahatma Gandhi
    Chinese => English     英文 => 中文             
    隨筆-221  評論-1047  文章-0  trackbacks-0
    grails-cache插件項目發起于2007年7月,由于James和我兩人都很忙,中間中斷過一些時間。

    幾個星期前,我將整個grails-cache重寫了一下,這周末將我們Team新成員Bakhtiyor所寫的另外一個插件的一些功能整合進來,并作了一些小重構。

    現在對該插件的功能做一些介紹:
    1,緩存靜態內容,比如js文件,css文件,圖片文件等,grails-cache會對js文件和css文件優化壓縮,并設置header以確保沒有stale的文件不會再次從服務器端傳給客戶端,換句話說,如果服務器端的靜態比如js文件,css文件和圖片文件沒有修改,那么客戶端的瀏覽器一旦第一次接收到請求文件后,就將它們緩存起來,服務器不需要一而再,再而三地將相同的文件發送給它們了,這樣就可以顯著地減少帶寬占用,提升服務器的性能。要知道在客戶的大部分時間都用在等待靜態文件的下載,一旦省去了這些文件的下載,客戶就可以很快看到頁面。

    2,緩存動態內容,比如生成的頁面片段。使頁面展現緩慢的另外一個因素就是生成頁面本身就十分耗時,所以緩存這些耗時的生成結果對于提升性能是十分可觀的。還有些動態內容生成一次就夠,沒必要重復生成,這樣也可以起到提升性能的效果。grails-cache同樣提供了相關解決方案。

    此外,考慮到部分Grails開發人員對gsp不太熟悉,我重寫gsp標簽的同時,也實現了相同功能的jsp標簽。

    下面是grails-cache的使用:

    1,簡單地緩存靜態文件(緩存制定目錄(dir)下的制定文件(file)):
    <%@?page?language="java"?import="java.util.*"?pageEncoding="GB18030"%>
    <%@?taglib?uri="http://grails.codehaus.org/tags"?prefix="g"?%>

    <%
    String?path?=?request.getContextPath();
    String?basePath?=?request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>

    <!DOCTYPE?HTML?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN">
    <html>
    ??
    <head>
    ????
    <base?href="<%=basePath%>">
    ????
    ????
    <title>My?JSP?'test.jsp'?starting?page</title>
    ????
    ????
    <meta?http-equiv="pragma"?content="no-cache">
    ????
    <meta?http-equiv="cache-control"?content="no-cache">
    ????
    <meta?http-equiv="expires"?content="0">????
    ????
    <meta?http-equiv="keywords"?content="keyword1,keyword2,keyword3">
    ????
    <meta?http-equiv="description"?content="This?is?my?page">
    ????
    <!--
    ????<link?rel="stylesheet"?type="text/css"?href="styles.css">
    ????
    -->
    <link?href="${cache(dir:'css',file:'toCache.css')}"?rel="stylesheet"?type="text/css"?/>
    <script?type="text/javascript"?src="${cache(dir:'js',?file:'toCache.js')}"></script>
    ??
    </head>
    ??
    ??
    <body>
    ??????
    <h1>Test</h1>
    ??????
    ????
    <a?href="javascript:sayHello();">sayHello</a>?<br>
    ????
    <img?src="${cache(dir:'images',?file:'hat.gif')}">
    ??
    </body>
    </html>

    2,合并緩存靜態文件(合并指定的目錄(dir)下的制定類型(type)的靜態文本文件,注意:沒有遞歸合并子目錄內容,這是出于性能考慮)
    <%@?page?language="java"?import="java.util.*"?pageEncoding="GB18030"%>
    <%@?taglib?uri="http://grails.codehaus.org/tags"?prefix="g"?%>

    <%
    String?path?=?request.getContextPath();
    String?basePath?=?request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>

    <!DOCTYPE?HTML?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN">
    <html>
    ??
    <head>
    ????
    <base?href="<%=basePath%>">
    ????
    ????
    <title>My?JSP?'testMerge.jsp'?starting?page</title>
    ????
    ????
    <meta?http-equiv="pragma"?content="no-cache">
    ????
    <meta?http-equiv="cache-control"?content="no-cache">
    ????
    <meta?http-equiv="expires"?content="0">????
    ????
    <meta?http-equiv="keywords"?content="keyword1,keyword2,keyword3">
    ????
    <meta?http-equiv="description"?content="This?is?my?page">
    ????
    <!--
    ????<link?rel="stylesheet"?type="text/css"?href="styles.css">
    ????
    -->
    ????
    ????
    <link?href="${cache(dir:'css',?type:'text/css')}"?rel="stylesheet"?type="text/css"?/>
    ????
    <script?type="text/javascript"?src="${cache(dir:'js',?type:'text/js')}"></script>
    ??
    </head>
    ??
    ??
    <body>
    ?????
    <h1>Test</h1>
    ?????
    <a?href="javascript:sayHello();">testMerge</a>?<br>
    ??
    </body>
    </html>

    3,緩存耗時的生成結果(g:cacheFragment標簽有3個屬性: key, ttl, group,其中key是必須的。key是緩存內容的一個在group中的id,ttl可以理解為緩存多久,group類似于命名空間防止id與id之間發生沖突)
    <%@?page?language="java"?import="java.util.*"?pageEncoding="GB18030"%>
    <%@?taglib?uri="http://grails.codehaus.org/tags"?prefix="g"?%>

    <%
    String?path?=?request.getContextPath();
    String?basePath?=?request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>

    <!DOCTYPE?HTML?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN">
    <html>
    ??
    <head>
    ????
    <base?href="<%=basePath%>">
    ????
    ????
    <title>My?JSP?'testFragment.jsp'?starting?page</title>
    ????
    ????
    <meta?http-equiv="pragma"?content="no-cache">
    ????
    <meta?http-equiv="cache-control"?content="no-cache">
    ????
    <meta?http-equiv="expires"?content="0">????
    ????
    <meta?http-equiv="keywords"?content="keyword1,keyword2,keyword3">
    ????
    <meta?http-equiv="description"?content="This?is?my?page">
    ????
    <!--
    ????<link?rel="stylesheet"?type="text/css"?href="styles.css">
    ????
    -->

    ??
    </head>
    ??
    ??
    <body>?
    ????This?is?my?JSP?page.?
    <br>
    ????
    <g:cacheFragment?key="for-loop"?ttl="3600">
    ????????
    <%
    ????????
    for?(i?in?0..10000)?{
    ????????????println?
    "<font?color='#57${i?%?10}BB8'>${i}</font>"
    ????????}
    ????
    %>
    ????
    </g:cacheFragment>
    ??
    </body>
    </html>


    我們正對該插件進行性能測試,相信該插件的發布也快了。


    附:朝花夕拾——Groovy & Grails
    posted on 2008-03-30 23:16 山風小子 閱讀(3662) 評論(5)  編輯  收藏 所屬分類: Groovy & Grails
    主站蜘蛛池模板: 亚洲伦乱亚洲h视频| 亚洲手机中文字幕| 一级毛片免费观看不卡的| 亚洲成人网在线观看| 国产jizzjizz免费视频| 日韩av无码免费播放| 在线aⅴ亚洲中文字幕| 狠狠亚洲婷婷综合色香五月排名| 4455永久在线观免费看| 深夜A级毛片视频免费| 91亚洲国产成人久久精品网站 | 日韩一级免费视频| 99在线免费视频| 亚洲日本天堂在线| 亚洲成色WWW久久网站| 日本无吗免费一二区| 日本黄色动图免费在线观看| 日本亚洲免费无线码| 亚洲av中文无码乱人伦在线咪咕| 日本免费无遮挡吸乳视频电影| 在线成人精品国产区免费| 久久无码av亚洲精品色午夜 | 黄网站色视频免费看无下截| 91亚洲精品视频| 亚洲熟妇中文字幕五十中出| 国产成人3p视频免费观看| 2019中文字幕免费电影在线播放| 无码免费又爽又高潮喷水的视频| 亚洲婷婷第一狠人综合精品| 亚洲国产精品SSS在线观看AV| 日韩在线免费播放| 免费国产作爱视频网站| 污污网站18禁在线永久免费观看| 人妻巨大乳hd免费看| 亚洲AV电影天堂男人的天堂| 亚洲三级中文字幕| 亚洲高清免费在线观看| 亚洲av午夜成人片精品网站| 国产亚洲精品线观看动态图| 免费无遮挡无码视频网站| 波多野结衣在线免费视频|