`
whoosh
  • 浏览: 234600 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

巴巴运动网的性能优化

阅读更多

本文参考传智播客巴巴运动网的视频

 

系统性能优化:
1)大型网站系统>10万人 一个小时内,会跟数据库交互10万次,这就会出现数据库瓶颈,每个数据库最大连接数(socket)2000
在某一段短暂时间内1万人,会跟数据库发生1万次交互,2000-8000【30秒】 5000 3000
2000个用户很快就可以到页面
5000个用户访问页面比较慢
还有3000个用户会提示超时/服务器出现例外

这是访问性能的问题,原因是数据库瓶颈。


解决方案:
1>页面静态化
解决方案:使用模板技术(Velocity[9-10年]/Freemarket[5-6年])


2>缓存技术 (当数据更新比较快,几秒钟就更新一次,或者需要实时反映数据变化,或者页面具有很多种风格,不便于生成静态页面。如BBS)
    A.页面缓存(view,html代码)缺点:不能做到实时更新,优点:比二级缓存效率更高。
        在缓存的有效期内,显示的数据是没有变化的,只有当缓存过期以后才会有变化。
        页面缓存分为局部缓存和全局缓存,全局缓存是缓存整个页面的html代码,页面缓存是缓存页面中的某一块区域的html代码。
        缓存的范围:application范围(所有人都能共享,比如说产品列表显示)session(只针对某一个访问者,比如说缓存某个用户的个人信息)
        OSCache默认的范围是application范围,可以通过scope属性来修改。
        缓存默认的有效时间是3600秒,也就是一小时。可以通过time属性来修改。
        refresh属性h如果设置为true,则可以强行清楚缓存。
        key属性的作用:如果不设置key属性,就根据用户输入的url来做缓存,如果用户输入的url改变,缓存也会改变。oscatche会把所有的值放到一个map中,通过key value来做判断。

<body>
            <oscache:cache key="aaron" scope="session" time="15" refresh="${param.refresh }">
                <div>
                    <%=new Date() %>
                </div>
            </oscache:cache>
            <br>
            当前时间:<%=new Date() %>
        </body>
        人为清除缓存<flush/>标签:
        <oscache:flush scope="application" />清除application范围内的所有缓存
        <oscache:flush scope="session" key="foobar" />清除session范围内的key为foobar的缓存
        <oscache:flush scope="application" group="currencyData" />清除application范围内组名为currencyData的所有缓存。
        使用oscache实现页面的全局缓存
        <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>
 

        缓存的key将以请求的uri+查询字符窜组成,如果你访问/oscache/index.jsp?name=tt和/oscache/index.jsp?name=ppp将得到两分缓存。
        缓存在初次访问页面时进行,后续的请求将会返回缓存中的内容。缓存中存放的内容为页面返回给用户的html代码。
        OSCache配置属性介绍
        cache.memory=true指定是否使用内存缓存,配置默认为true,即使用内存缓存。
        cache.capacity=1000指定缓存的容量,默认的容量是无限的,我们可以为他设置缓存数量。
        如果要使用硬盘缓存,我们可以这样设置:
        cache.memory=false
        cache.path=d:\\cache(指定缓存保存的路径,注意:路径应该采用双\\符号)
        cache.persistence.class=com.opensymphony.oscache.plugins.diskpersistence.DiskPersistenceListener
        cache.persistence.class用于设计持久化类
        我们既要考虑页面的数量,也要考虑机器的内存,如果内存不多的话容易引起内存耗尽,系统的性能反而下降。
        但是最好还是用内存缓存,因为速度比较快,一般服务器的内存都大于10g,用于缓存产品列表页面够了。因为产品列表页面不会太多,假设我们有几万个的话,有一两个g就够了。
        CacheFilter的实现原理:

    CacheFilter{
            doFilter(request,response,chain){
                String urlpath=req....;
                if(oscache.contains(urlpath)){
                    String content=OsCache.getKey(urlpath);
                    response.write(content);
                }else{
                    CacheHttpServletResponseWrapper wrapper=new CacheHttpServletResponseWrapper(response)
                    chain.doFilter(request,wrapper);
                    String content=wrapper.getContent();//获取服务器网客户端输出的html代码
                    OScache.put(urlpath,content);
                    response.write(content);
                }
            }
           
            public CacheHttpServletResponseWrapper entends HttpServletResponseWrapper{
                private String content;
                public CacheHttpServletResponseWrapper(HttpServletResponse response){
                    ....
                }
                public void write(String  content){
                    this.content=content;
                }
                public String getContent(){
                    return content;
                }
            }
        }
 

        页面缓存比二级缓存快的原因:当请求来之后系统就会交给过滤器,过滤器得到路径以后就会把缓存返回给客户端。
        二级缓存要经过action service 和jsp
    B.二级缓存(model/业务层,domain对象)优点:实时更新
    EHCache OSCache jbossCache(分布式缓存)
    第一步:导入ehcache的ehcache.jar文件(hibernate中有)
    第二部:在persistence.xml文件中添加下面配置项:

<property name="hibernate.cache.provider_class" value="org.hibernate.cache.EhCacheProvider"/>
        <property name="hibernate.cache.use_second_level_cache" value="true"/>
        <property name="hibernate.cache.use_query_cache" value="false"/>
 

    第三步:在实体类上面标注@Cache(region="cn.aaron.bean.Person",usage=CacheConcurrencyStrategy.READ_WRITE)
    第四步:在classpath下面放入ehcache.xml,内容模板如下:

<?xml version="1.0" encoding="UTF-8"?>
    <ehcache>
   
        <diskStore path="D:\cache" />
   
        <defaultCache maxElementsInMemory="10000" eternal="false" overflowToDisk="true"
            timeToIdleSeconds="120"
            timeToLiveSeconds="180"
             diskPersistent="false"
            diskExpiryThreadIntervalSeconds="60"/>
   
        <cache name="cn.aaron.bean.Person" maxElementsInMemory="100"
             eternal="false" overflowToDisk="true"
             timeToIdleSeconds="300"
            timeToLiveSeconds="600" diskPersistent="false" />
    </ehcache>
 

    注意<cache>节点中的name属性要和@Cache(region="cn.aaron.bean.Person",usage=CacheConcurrencyStrategy.READ_WRITE)中的region相同
    ehcache.xml文件中各项属性说明如下:
        defaultCache节点为缺省的缓存策略
        maxElementsInMemory 内存中最大允许的对象数量
        eternal 设置缓存中的对象是否永远不过期
        overflowToDisk 把溢出的对象放到硬盘上(对于本例而言,第1001个对象将存放在硬盘上)
        timeToIdleSeconds 指定缓存对象空闲多长时间会过期,过期的对象会被清除掉
        timeToLiveSeconds 指定缓存对象总的存活时间
        diskPersistent 当jvm结束时是否持久化对象
        diskExpiryThreadIntervalSeconds 指定专门用于清除过期对象的监听线程的轮询时间
   
3>数据源 连接池里面放一些连接对象
每次都能跟数据库建立连接socket(client)----socket(数据库)

4>SSI 对性能提升不是那么明显(有一点点作用)
Server Side Include, 通常称为“服务器端包含”技术。
使用了SSI技术的文件默认的后缀名为.shtml,SSI技术通过在html文件中加入SSI指令让web服务器在输出标准HTML代码之前先解释SSI指令,
并把解释完成后的输出结果和HTML代码一起返回给客户端。
在大部分项目中,我们主要使用了SSI的包含指令<!-#include virtual="global/foot.jsp"-->,
他的作用类似于JSP中的<jsp:include page="/global/foot.jsp"/>标签。
使用SSI主要有如下两点优势:
1 SSI技术是通用技术,它不受限于运行环境,在java,.net,CGI,ASP,PHP下都可以使用SSI技术
2 解释SSI指令的效率比解释JSP的效率快很多,因为Servlet规范提供了太多的功能,这些功能都需要servlet引擎进行解释,所以效率比较低。
在目前,大部分的门户网站都是用SSI技术,解释SSI文件最佳的服务器是Apache HTTP Server。
大型门户网站基本都使用这个来解释SSI文件。
配置实用SSI
目前主流的web服务器都提供SSI实现,我们只需要打开SSI功能就可以使用。
tomcat也可以,但是并不会提高性能,因为使用的还是servlet引擎

分享到:
评论

相关推荐

    巴巴运动网-性能优化

    根据给定的信息,我们可以深入探讨“巴巴运动网-性能优化”的关键知识点,这些知识点主要集中在网站性能提升的具体方法和技术上。 ### 性能优化概述 性能优化是提高网站响应速度、资源利用效率的重要手段,对于像...

    巴巴运动网 部分 前端代码

    总的来说,巴巴运动网的前端代码涵盖了前端开发的多个方面,包括但不限于HTML结构、CSS样式、JavaScript交互、响应式布局以及性能优化等。这些技术共同构建了一个功能完备、交互丰富的网站界面。

    巴巴运动网原码

    【巴巴运动网原码】指的是巴巴运动网的源代码,它是构建巴巴运动网这一在线平台的基础。源码是程序员用编程语言编写的未被编译的原始代码,它揭示了网站的功能实现细节、数据处理逻辑以及用户交互方式。了解并研究...

    百度云 2016年版新巴巴运动网项目12天完整视频教程以及源码

    根据提供的文件信息,我们可以推断出这是一套关于“新巴巴运动网”项目的视频教程及相关源码资料。接下来,我们将围绕这个项目的背景、教程内容、技术栈等方面进行深入解析。 ### 项目背景 “新巴巴运动网”项目...

    巴巴运动网 lib3

    【巴巴运动网 lib3】是源自巴巴运动网的一个开源项目,该项目主要包含了lib3相关的代码库,为开发者提供了丰富的功能和资源,旨在促进运动类应用的开发与创新。这个源码下载提供了深入学习和理解运动类应用开发的...

    巴巴运动网完整源代码

    "巴巴运动网完整源代码"是一个包含网站源代码的压缩包,主要针对的是体育类网站的开发和构建。源代码是编程术语,指的是程序的原始形式,由人类可读的编程语言编写,它包含了实现特定功能的所有指令。在这个压缩包中...

    巴巴运动网 lib1

    "巴巴运动网 lib1" 提供的jar包很可能是为开发者提供的一种库或者服务,方便他们在开发过程中调用相关的功能或实现。下面我们将深入探讨与jar包相关的知识点,以及如何利用它进行开发和学习。 首先,Java的jar文件...

    巴巴运动网源码(传智播客)

    【巴巴运动网源码(传智播客)】是一套基于Java编程语言开发的网站源码,主要用于构建体育运动类的在线服务平台。这套源码在IT教育领域,特别是由传智播客这样的知名教育机构中被用作教学案例,帮助学员理解和实践...

    巴巴运动网源代码-完整版

    【巴巴运动网源代码-完整版】是一个针对体育用品在线销售平台的源代码包,它提供了网站的全套功能实现,适合开发者进行学习、研究或二次开发。巴巴运动网的源代码设计涵盖了电子商务网站的关键模块,包括但不限于...

    2016最新版新巴巴运动网数据库+开发文档

    新巴巴运动网数据库和开发文档资源的提供,对于想要了解或进行该项目开发的人员来说,是一份非常宝贵的学习和参考资料。这份2016年的最新版本包含了一系列关键元素,可以帮助开发者更好地理解系统的架构和功能。 ...

    巴巴运动网分页jar包

    总结来说,巴巴运动网分页jar包是针对黑马babsport运动网站定制的分页工具,集成了分页算法、数据库优化、前端交互、异步加载等功能,旨在提供高效、灵活的分页解决方案。开发者可以通过引入这个jar包,轻松实现在...

    巴巴运动网的css/js/images等

    【巴巴运动网的CSS/JS/Images等】 巴巴运动网是一个典型的Web应用,其前端资源包括CSS(层叠样式表)、JS(JavaScript)和Images(图片)。这些元素共同构成了网站的视觉呈现和交互功能。在本压缩包中,包含了这三...

    传智巴巴运动网源代码

    【传智巴巴运动网源代码】是一套完整的网站开发项目,主要针对体育活动、健身运动相关的网络平台。这个源代码提供了构建类似网站所需的所有技术组件和功能模块,可以帮助开发者快速搭建一个功能丰富的运动社区或者...

    巴巴运动网完整源代码.rar

    巴巴运动网是一个在线平台,主要用于分享与运动相关的视频教程,其源代码的公开为开发者提供了一个深入了解此类网站架构和功能实现的机会。这个压缩包包含了巴巴运动网106集及后续视频的所有源代码,这对于学习网站...

    巴巴运动网分页jar和品牌数据库结构数据

    本压缩包“巴巴运动网分页jar和品牌数据库结构数据”包含了这两个方面的内容,为开发者提供了一套完整的解决方案。 首先,让我们来讨论一下数据库部分。在描述中提到的“品牌brand类对应的数据库结构”,这指的是...

    巴巴运动网用到的Jar文件

    巴巴运动网是一个大型的电子商务平台,其背后的技术架构离不开Java技术栈的支持。在这个项目中,开发者使用了多种Jar文件来构建服务器端应用、处理HTTP请求、管理数据库连接以及实现其他功能。下面我们将深入探讨...

    巴巴运动网源码

    【巴巴运动网源码】是一个基于Struts、Spring和JPA技术实现的网站项目实例,主要目的是为了提供一个学习和参考的平台。这个源码能够直接部署并运行,使用Oracle数据库作为后台数据存储,为开发者提供了实践这些技术...

    巴巴运动网新版前6天代码

    【标题】"巴巴运动网新版前6天代码"所涉及的知识点主要集中在网站开发和版本控制上,这通常指的是在开发一个网站的新版本时,前六天内的源代码记录。这个标题暗示了开发者可能在进行迭代更新,或者是在准备一个重要...

    传智播客巴巴运动网-项目中使用到的jar文件

    在开发或维护“传智播客巴巴运动网”时,了解这些jar文件的功能和用法,以及如何管理它们(例如,通过Maven或Gradle构建工具),对于优化项目性能、减少依赖冲突和提升开发效率至关重要。此外,持续关注这些库的更新...

    新巴巴运动网

    ### 新巴巴运动网项目知识点概览 #### 一、项目背景与概述 ...综上所述,新巴巴运动网项目不仅覆盖了电子商务的基本功能,还引入了一系列先进的技术和工具,旨在打造一个高性能、高可用性的电商平台。

Global site tag (gtag.js) - Google Analytics