`
san_yun
  • 浏览: 2654781 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

网站性能总结

 
阅读更多

网站有多慢

网站一直比美丽说蘑菇街等同类型的网站慢一些,但到底有多慢,下面是一个对比:

http://www.duitang.com/topics/				42297 bytes


Requests per second:    0.49 [#/sec] (mean)

http://www.mogujie.com/shopping/                        2390 bytes


Requests per second:    2.87 [#/sec] (mean)

http://guang.com/xihuan                                 945170 bytes


Requests per second:    1.86 [#/sec] (mean)

可以看到逛的qps是我们的3倍多,所以这次优化的目标主要是提升搜索页面的QPS.

ps:为什么是从topics下手,因为topics是除了首页之外访问量最大的页面。

瓶颈在哪里

用户访问topics,网站通过ajax请求url:http://7599.t.duitang.com/hot/masn/?page=5&page_size=24&_type=&begin_time=1342876671
, 会做以下几件事情:

1. 从搜索引擎获(solr)取查询结果。(平均5ms,偶尔有20ms+的查询)
2. 搜索引擎返回的是id,通过id查询相应的message,并cache。
3. 执行cf.jsonResultMblog(),次方法主要是循环每个message,组装相应信息返回给页面。

经过测试发现 cf.jsonResultMblog()需要耗时900ms,这对一个方法来说太慢了。

cf.jsonResultMblog()做了什么

下面是cf.jsonResultMblog()的代码:

    for

 item in blogs:
        if

 item:
            if

 get_latest:
                item = item.get_latest_forward()
            if

 not item:
                continue


            root = item.get_root()
            common = root and root.is_buyable_common() or False
            good = root and root.is_buyable_good() or False
            buylnk = root and root.is_buyable() and root.get_source()
            buylnk = buylnk and buylnk.link or ""
            usr = item.sender
            album = item.get_album()
            blog = {
                "id"

:item.id,
                "common"

:common,
                "good"

:good,
                "msg"

:mbtrimlinks(item.msg),
                "isrc"

:item.middle_photo_path2(),
                "iht"

:item.photo and item.photo.middle_height() or 0,
                "buylnk"

: buylnk,
                "uid"

:usr.id,
                "unm"

:usr.username,
                "ava"

:usr.get_profile().tinyAvatar(),
                "albid"

:album and album.id or '',
                "albnm"

:album and album.name or u'默认专辑',
                "favc"

:root and root.favorite_count or 0,
                "repc"

:item.reply_count,
                "zanc"

:item.like_count,
                "sta"

:item.status,
                "cmts"

:[]
            }
            if

 root and root.sender:
                rusr = root.sender
                blog["rid"

] = root.id,
                blog["ruid"

] = rusr.id
                blog["runm"

] = rusr.username
                blog["rava"

] = rusr.get_profile().tinyAvatar()

            comms = item.get_top_comments()
            for

 comm in comms:
                if

 comm:
                    blog["cmts"

].append({
                        "id"

:comm.sender.id,
                        "ava"

:comm.sender.get_profile().tinyAvatar(),
                        "name"

:comm.sender.username,
                        "cont"

:comm.content,
                    })
            ajblogs.append(blog)

我整理了一下,for循环有15个查询:

  • item.get_latest_forward()
  • item.get_root()
  • root.get_source()
  • item.get_album()
  • item.photo.middle_height()
  • usr.get_profile().tinyAvatar() (获取用户头像,此方法走2个查询,每次5ms)-
  • root.sender
  • rusr.get_profile().tinyAvatar()
  • item.get_top_comments()
  • comm.sender
  • comm.sender.get_profile().tinyAvatar()
  • comm.sender.username

其中有一些方法走了cache, 但还是有一些方法走的是数据库查询,数据库查询每次耗时都在几毫秒,循环24次,总耗时就是上百毫秒。
我这次优化主要就是把数据库查询改成cache,如果不能走cache,就通过select in子查询先一次性查询出结果再处理。

一些总结

1. item.sender.id 比 item.sender_id 慢一个数量级,前者会触发一次查询。

2. django的对象关联非常方便,获取一个物品发布人的信息只需要 item.sender.profile,但这样写性能很差,这些查询都是通过数据库查询,而没有走cache。建议不要直接用django的对象关联,通过提供方法来做:

    def get_sender(self):       
        key = cf.generate_cache_key(self.sender_id, User)
        model = key and cache.get(key)
        if

 not model:
            model =  self.sender
            cache.set(key, model, 60*60*24*3)
        return

 model

3.不要在for循环做耗时的数据库查询,累加效应之后性能非常差。

4.什么对象应该走cache? 我总结的就是被依赖的对象越多越应该cache起来,比如Auth_User,UserProfile,UploadFile应该被cache,而 Message对象没有被任何对象依赖,生命周期比较段,被cache起来命中率也不高。这点比较像jvm的GC里面的old区。

分享到:
评论

相关推荐

    大型网站性能优化实战

    《大型网站性能优化实战:从前端、网络、CDN到后端、大促的全链路性能优化详解》中的很多性能优化方法和策略都是作者从实践中总结出来的,实用性非常强。《大型网站性能优化实战:从前端、网络、CDN到后端、大促的全...

    大型网站性能优化实战从前端网络CDN到后端大促的全链路性能优化 带书签完整版

    ### 大型网站性能优化实战从前端网络CDN到后端大促的全链路性能优化 #### 一、基于用户体验的性能优化要素 在现代互联网应用中,用户体验是衡量一个网站成功与否的重要标准之一。良好的用户体验不仅仅体现在美观的...

    非常好的某网站性能测试用例

    对于某网站来说,其性能测试主要关注产品页面刷新、产品上传和产品下载这三个核心功能。目标是确保系统在高压力环境下能够稳定运行,并满足预设的性能标准。 【延迟性能】 1. 产品页面刷新:要求响应时间小于5秒,...

    谈谈网站性能技术

    总结,网站性能技术涵盖广泛,涉及前端、后端、服务器配置等多个方面。通过合理的代码优化、工具运用、服务器配置和持续改进,我们可以显著提高网站的加载速度和用户体验,这对于任何在线业务的成功都是至关重要的。...

    实用负载均衡技术:网站性能优化攻略

    总结来说,负载均衡是提升网站性能和可用性的重要手段。通过实施上述的负载均衡技术和性能优化策略,可以确保网站在面临高访问量时仍能保持良好性能,为用户提供快速、可靠的访问体验。同时,通过持续监控和性能测试...

    大规模网站性能优化方法-高性能网站性能优化

    总结来说,大规模网站性能优化需要从前端、后端、架构及监控等多个层面进行全面考虑和实施。只有这样,才能确保网站在应对高并发、大数据量的情况下,仍能保持高性能和良好的用户体验。同时,持续关注新的技术和工具...

    个人总结之—JVM性能调优实战

    - **案例一:电商网站性能调优**:针对电商网站的特点,从JVM参数配置、代码层面等多个维度进行调优,提高用户体验。 - **案例二:大数据处理平台调优**:大数据处理平台往往需要处理海量数据,通过对JVM内存配置、...

    XOIC 网站性能测试工具

    总结来说,XOIC网站性能测试工具通过多协议支持,提供全面的性能评估,是开发人员和网络管理员进行性能调优、故障排查和容量规划的重要工具。通过其丰富的测试功能,用户可以更好地理解和改进他们的网络环境。

    高性能网站建设指南 pdf高清

    这本书针对的是网站开发者、设计师以及对网站性能优化有兴趣的读者。它不仅涵盖了基础的网页设计原则,还深入剖析了提高网站性能的关键技术和策略。 一、网站性能的重要性 在当今互联网时代,网站性能对于用户满意...

    Yahoo团队总结的关于网站性能优化的经验

    Yahoo团队总结的关于网站性能优化的经验

    网站优化方法总结

    在ASP.NET开发中,合理使用服务器控件(ServerControl)对网站性能至关重要。以下几点是优化服务器控件的关键: 1. **避免不必要的服务器控件使用**:在ASP.NET中,每个服务器控件都会增加一定的服务器负担,因此只...

    高级网站设计总结经典

    5. 熟悉Web Server的特性和配置,这有助于优化网站性能。 6. 安装和配置JSP Server,如Tomcat,进行实践操作。 7. 深入学习JSP,包括JSP对象和脚本语言的使用。 8. 了解其他JSP服务器,如WebLogic、Jetty等,以应对...

    高性能网站建设指南.pdf

    随着互联网技术的发展,用户对网站性能的要求越来越高,因此建立高性能网站已成为现代网站设计与开发的核心目标之一。 - **目标读者**:本书适合Web架构师、信息架构师、Web开发人员以及产品经理等专业人士阅读。 #...

    大型网站性能监控,测量和故障排除

    大型网站性能监控是指通过一系列的工具和技术手段,对网站的性能指标进行实时或定期的监测,以便及时发现性能瓶颈或者故障。性能监控的目的是为了确保网站可以承载大量的用户访问,同时保持快速的响应速度和稳定的...

    网站性能优化2

    网站性能优化是一个重要的...总结,网站性能优化是一个涉及多方面、多层次的系统工程,涵盖前端、后端、网络、用户体验等多个领域。通过上述方法,我们可以显著提升网站的性能,为用户提供更加流畅、快速的在线体验。

    WAS网站性能检测工具详细使用说明

    ### WAS网站性能检测工具详细使用说明 #### 一、引言 随着互联网技术的飞速发展,网站的应用越来越广泛,其性能与稳定性成为了衡量用户体验的关键因素之一。Microsoft Web Application Stress Tool(简称WAS)作为...

    基于LoadRunner的Web网站性能测试实施与分析——以小说网站为例.doc

    基于LoadRunner的Web网站性能测试实施与分析——以小说网站为例 LoadRunner是HP公司开发的一款性能测试工具,广泛应用于Web网站、移动应用程序、云计算等领域。 LoadRunner的工作原理是通过模拟多个虚拟用户的同时...

    站长总结:高性能网站架构基础工作有哪些.docx

    站长总结:高性能网站架构基础工作有哪些.docx

    高性能HTML5

    《高性能html5》中总结了许多实践经验、关键技巧,并提供了丰富的示例,作者有意无意地将软件工程以及前端开发技术之道隐藏于朴实的描述中。 通过学习《高性能html5》,读者能够掌握如何创建自己的高性能网站。《高...

Global site tag (gtag.js) - Google Analytics