日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

基于S2SH的电子商务网站系统性能优化

發布時間:2023/12/2 windows 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于S2SH的电子商务网站系统性能优化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

對于經常逛網頁的人來說最受不了的事情就是訪問的網頁加載太慢,除去網絡的原因網站的系統性能對加載的快慢非常重要,

網上有個統計:

????????每慢500ms ?Google訪問量降低20%

????????每慢400ms Yahoo 訪問量降低5-9%

?????????每慢100ms?Amazon銷售額降低1%

對于商務網站來說用戶的多少就表示著網站的命運 所以對網站的系統性能的優化格外重要;

假如當網站在一段時間內有10w個用戶訪問網站的一個商品時, 網站就會和數據庫交互10w次 ?數據庫也只是一個應用而已 它存在數據庫瓶頸問題 數據庫每次只能同時保持大概2000個連接數 所以對于這些訪問者來說只有20%的人能很快訪問到網頁,50%的人在較慢的一段時間內還是能訪問到網頁的,但剩下的30%的訪問者就會收到連接超時的異常

對于這種由于訪問數據庫的次數太多的解決方案有:

A.頁面情態化成html

頁面情態化就是將原來的本應該每次都要訪問數據庫再生成情態html文件返回,而現在就是只生成一次html下次再訪問服務器只要訪問該html文件就行不用再訪問數據庫了,對于這個技術對系統的性能提升很大,但是這個技術只能用于不怎么變化的模塊:例如像商品的詳細介紹頁面:

像這種的頁面的信息一周甚至一個月都不會變化,將類似這種模塊情態化最合適;

實現這個技術的方法是使用模版技術:Velocity 或 freemarket?

????這兩種技術都出現了10多年了freemarket比velocity出現的晚幾年 聲稱比velocity功能強大 ?現在的struts2也使用了freemarket 但是velocity擴展性更好 我這使用的是velocity

基本語法:

1、"#"用來標識Velocity的腳本語句,包括#set、#if 、#else、#end、#foreach、#end、#iinclude、#parse、#macro等;
如:
#if($info.imgs)
<img src="$info.imgs" border=0>
#else
<img src="noPhoto.jpg">
#end

2、"$"用來標識一個對象(或理解為變量);
如:$i、$msg、$TagUtil.options(...)等。

3、"{}"用來明確標識Velocity變量;
比如在頁面中,頁面中有一個$someonename,此時,Velocity將把someonename作為變量名,若我們程序是想在someone這個變量的后面緊接著顯示name字符,則上面的標簽應該改成${someone}name。

4、"!"用來強制把不存在的變量顯示為空白。
如當頁面中包含$msg,如果msg對象有值,將顯示msg的值,如果不存在msg對象同,則在頁面中將顯示$msg字符。這是我們不希望的,為了把不存在的變量或變量值為null的對象顯示為空白,則只需要在變量名前加一個“!”號即可。
如:$!msg

使用方法:

1.在http://velocity.apache.com下載velocity-*.rar 解壓

可以將velocity-*-dep.jar放帶WEB-INF的lib目錄下即可 也可以使用velocity-*.jar但是這時要將co'm'mons-connections-*.jar和commons-lang-*.jar和oro-*.jar也加入lib目錄下

2.配置velocity的一些屬性:

我使用的是在filter中加入相應的配置如:

1 try{ 2 Properties prop = new Properties(); 3 prop.put("runtime.log", config.getServletContext().getRealPath("/WEB-INF/log/velocity.log")); 4 prop.put("file.resource.loader.path", config.getServletContext().getRealPath("/WEB-INF/vm")); 5 prop.put("input.encoding", "GB18030"); 6 prop.put("output.encoding", "GB18030"); 7 Velocity.init(prop); 8 }catch( Exception e ){ 9 e.printStackTrace(); 10 }

file.resource.loader.path ? 配置的是模版所在的位置?input.encoding ,output.encoding 配置的是相應的輸入輸出的編碼要跟你模版中的編碼一樣?

3.編寫模版生成的代碼:我使用的是在商品添加或修改時就生成該商品的html情態文件

這樣就能完成向/WEB-INF/vm/product/productview.html這個模版中寫入數據 現在來看下模版文件怎么接受數據的吧: 1 <form action="/shopping/cart" method="post" name="cart"> 2 <INPUT TYPE="hidden" NAME="productid" value="${product.id}" /> 3 <div id="browse_left"> 4 5 <div class="right_left"> 6 <div class="right_right"> 7 <div class="right_title"><b>${product.name}</b></div> 8 <div class="right_desc"> 9 <ul> 10 <li class="li2">商品編號:${product.id}<font color="#CC0000">(電話訂購專用)</font></li> 11 #if($!{product.brand}) <li>品牌:$product.brand.name</li> #end </ul> 12 </div> 13 <div class="right_desc"> 14 #if($product.productStyles.size()==1) 15 <INPUT TYPE="hidden" NAME="styleid" value="$product.productStyles.iterator().next().id" /> 16 <li>顏色:紅色</li> 17 #else 18 <li>顏色:<SELECT name="styleid">#foreach($color in $product.productStyles) 19 <option value="$color.id">$color.name</option> 20 #end </SELECT></li> 21 #end 22 </div> 23 <ul> 24 <li>市場價:<s>${product.marketprice}</s><font color='#ff6f02'>本站價:<b>${product.sellprice} 元</b></font> 節省:<font color='#ff6f02'>${product.savedPrice}</font></li> 25 26 </ul> 27 </div> 28 </div> 29 <div id="browse_right"><div id="sy_biankuang"> 30 <div class="sy_xinpintuijian_font">本站尚未開張</div> 31 <div class="sy_dianhua" style="line-height:150%"><font color="#FF0000"> 32 全國:010-6466 3070</font><br/>MSN在線客服:*****@sohu.com<br/> 33 <font color="#3A8FAF">QQ在線客服:895957140</font></div> 34 </div></div> 35 </form>

?

${product.name}這樣的標簽就是顯示傳過來的product對象的name屬性值 重啟tomcat服務器后添加一個商品這樣關于product的一個情態html文件就生成在根目錄下的/WEB-INF/html/product/product的類別id/下面 B.緩存技術 對于頁面情態化它只適用于不怎么變化的模塊 而像

這樣 這樣的商品檢索頁面由于分類不同排序不同所生成的頁面用統計就知道太多了不適合使用頁面情態化,那么就可以使用緩存技術了 緩存技術有兩種:頁面緩存和二級緩存 頁面緩存的缺點就是不能實時更新,但是性能比二級緩存要好 頁面緩存的實現:使用oscache 1.下載相應的包

2.將oscache.proprities文件拷貝到項目的src目錄下:里面有一些屬性可以配置一下

2.如果你只是緩存一部分網頁那么只要使用部分緩存:

部分緩存只要像用標簽一樣 3.全局緩存:就是將整個頁面都緩存起來 使用方法:只要在web.xml中加入一個filter即可 <filter><filter-name>CacheFilter</filter-name><filter-class>com.opensymphony.oscache.web.filter.CacheFilter</filter-class><init-param><param-name>time</param-name><param-value>7200</param-value></init-param><init-param><param-name>scope</param-name><param-value>application</param-value></init-param></filter><filter-mapping><filter-name>CacheFilter</filter-name><url-pattern>/product/list/*</url-pattern></filter-mapping>

?

加人這個filter后所有url中以/product/list/開頭的連接即所有的商品列表都將放入緩存中它的key就是相應的URL默認的緩存時間是7200s即2小時 默認的存在范圍是Application范圍 4.注意的是當添加或修改商品時由于有緩存那么更新信息并不能馬上更新在頁面上 ?那么我們應該在更新了的時候更新緩存只要使用上面提到的flush屬性就行

B.二級緩存:重點是它能實時更新?

由于我沒使用二級緩存使用也不知道效果怎樣 C.數據源 :在spring的beans.xm的連接池里面放一些連接對象 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"><property name="driverClass" value="${driverClass}"/><property name="jdbcUrl" value="${jdbcUrl}"/><property name="user" value="${user}"/><property name="password" value="${password}"/><!-- 初始化時獲取的連接數,取值應在minPoolSize與maxPoolSize之間。Default: 3 --><property name="initialPoolSize" value="1"/><!-- 連接池中保留的最小連接數。 --><property name="minPoolSize" value="1"/> <!-- 連接池中保留的最大連接數。Default: 15 --><property name="maxPoolSize" value="300"/><!-- 最大空閑時間,60秒內未使用則連接被丟棄。若為0則永不丟棄。Default: 0 --><property name="maxIdleTime" value="60"/> <!-- 當連接池中的連接耗盡的時候c3p0一次同時獲取的連接數。Default: 3 --><property name="acquireIncrement" value="5"/> <!-- 每60秒檢查所有連接池中的空閑連接。Default: 0 --><property name="idleConnectionTestPeriod" value="60"/></bean>

?

這里用的是c3p0作為數據源 要加入c3p0的jar包 D.SSI 經過上面的優化性能上就能提高很多 SSI只能提高一點點 因為SSI指令執行Tomcat外部的JVM能釋放Tomcat自己的JVM的壓力

配置過程:

1).?先保證?Tomcat?可以運行,即能夠正常啟動

2).?(?5.x?版本)服務器根目錄下邊?$TOMCAT_HOME(?或者?$CATALINA_HOME)/server/lib/?目錄下邊有一個文件:

servlets-ssi.renametojar?,將這個文件名更名為一個?jar?后綴,當然最方便的方法是直接改掉文件后綴,按照?Tomcat?掃描jar?路徑類的原理來講,直接更名為?jar?應該也是可以的,不過我沒嘗試過,一般網上最常用的方法是改成:?servlets-ssi.jar。(?6.x?版本)服務器不需要去尋找?jar?文件了,直接進入下一步操作都可以。

3).?找到文件:?$TOMCAT_HOME(?或者?$CATALINA_HOME)/conf/web.xml?,這里面不需要我們自己寫入?SSI Servlet?和SSI Filter?的配置,首先我們要選擇使用哪種方式來配置:

Servlet?配置:

  在這個文件里面,找到以下注釋代碼段,將注釋代碼段去掉:

Servlet?配置——

<!--<servlet><servlet-name>ssi</servlet-name><servlet-class>org.apache.catalina.ssi.SSIServlet</servlet-class><init-param><param-name>buffered</param-name><param-value>1</param-value></init-param><init-param><param-name>debug</param-name><param-value>0</param-value></init-param><init-param><param-name>expires</param-name><param-value>666</param-value></init-param><init-param><param-name>isVirtualWebappRelative</param-name><param-value>0</param-value></init-param><load-on-startup>4</load-on-startup></servlet>-->

?

ServletMapping?配置——

<!--<servlet-mapping><servlet-name>ssi</servlet-name><url-pattern>*.shtml</url-pattern></servlet-mapping>-->

?

Filter?配置:

Filter?的相關配置——

<!--<filter><filter-name>ssi</filter-name><filter-class>org.apache.catalina.ssi.SSIFilter</filter-class><init-param><param-name>contentType</param-name><param-value>text/x-server-parsed-html(;.*)?</param-value></init-param><init-param><param-name>debug</param-name><param-value>0</param-value></init-param><init-param><param-name>expires</param-name><param-value>666</param-value></init-param><init-param><param-name>isVirtualWebappRelative</param-name><param-value>0</param-value></init-param></filter>-->

?

FilterMapping?相關配置——

<!--<filter-mapping><filter-name>ssi</filter-name><url-pattern>*.shtml</url-pattern></filter-mapping>-->

?

只是?Filter?配置里面還需要取消另外一個注釋,下邊的?MIME TYPE?的服務器支持相關注釋

<!--<mime-mapping><extension>shtml</extension><mime-type>text/x-server-parsed-html</mime-type></mime-mapping>-->

?

  ?上邊的注釋取消過后,配置就基本好了,在?Tomcat 5.x?的版本中配置的時候,到這個地步就結束了,但是在?Tomcat 6.x?版本中可能還會出現下邊的異常:

  ?java.lang.SecurityException: Filter of class org.apache.catalina.ssi.?SSIFilter?(SSIServlet)?is privileged and cannot be loaded by this web application

4).?所以正對這點?6.x?還有一個步驟,在?$TOMCAT_HOME(?或者?$CATALINA_HOME)/conf/context.xml?文件中在<Context>?結點添加一個屬性?privileged="true"?,然后再啟動就不會拋出上邊的異常了。

5).?若要解決亂碼問題,根據上邊文檔需要修改?SSI?中的啟動參數:添加如下代碼:

<init-param><param-name> inputEncoding </param-name><param-value> utf-8 </param-value></init-param><init-param><param-name> outputEncoding </param-name><param-value> utf-8 </param-value></init-param>

?

6)使用方式: 在html文件中就可以加入<!--#include virtual="/WEB-INF/page/share/Head.jsp" -->這樣的標簽了 轉載請注明出處:http://www.cnblogs.com/yixiwenwen/articles/2729079.html

轉載于:https://www.cnblogs.com/yixiwenwen/archive/2012/10/18/2729079.html

總結

以上是生活随笔為你收集整理的基于S2SH的电子商务网站系统性能优化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。