`
windelk
  • 浏览: 15265 次
  • 性别: Icon_minigender_2
  • 来自: 福州
社区版块
存档分类
最新评论

[转载][优化]如何提高网站的访问速度 - 从30秒到3秒的飞跃

阅读更多
2006年10月份,我开始对web开发产生了兴趣,并决定自己也尝试开发一个网站。在此之前,我做过3年的java application的开发,对web开发应该算一无所知。在比较了java,php,ror,和python后,我选择了基于python的web框 架 - django 。到目前为止,我还认为这是一个明智的决定。Django高效的开发效率让我仅仅用一个月的业余时间,就基本完成了网站的开发。这是一个网络书签的网站, 我加上了一些有意思的特性,让网站显得有些与众不同。

我购买了域名和Dreamhost 的主机空间。Dreamhost支持django,并且第一年的费用只有180元人民币。2006年11月份,http: //www.hpbookmarks.com 上线了。网友们发来了善意的评论,“很有创意”,“点意思”,“一些feature很不错”。同时,还有一个非常一致的意见就是,“访问速度太慢了”。其 实,当时的情况不只是访问速度慢,而且是相当不稳定。很多时候是几个小时网站无法访问。当时,我并没有在意,因为我有两个自以为“合理”的解释。第一,我 用的是国外最便宜的虚拟主机,国内访问慢是很正常的。第二,django的还处于0.95的状态,效率和稳定性方面有问题也正常。

但是, 我慢慢发现上面的解释不过是自己骗自己的借口。很多用dreamhost的网站,访问起来也很快。而且django也已经被成功应用在许多大型的网站。我 开始认真考虑提高网站速度的问题了。毕竟,速度慢的网站很可能在第一次就失去的用户,他们可以永远不会再来了。终于,我进行了下面一步一步的优化工作,并 且取得了一个看起来还不错的结果。

第一步,用Ajax提高用户体验

由于我的网站上链接字体的大小是根据点击次数决定,所 以每次点击都要提交到服务器端并记录次数,再在客户端打开网站链接。这在localhost测试的时候没有发现问题,但是部署到服务器上,会感到明显的等 待。解决办法就是用Ajax。用户点击网站链接后就直接打开,再通过Ajax将点击的事件提交到服务器端记录。这样用户感觉不到任何延时。

第二步,将逻辑移到客户端的javascript中

在 开始的时候,“网站标签高亮”和“手气不错”的功能都是提交到服务器端操作,然后返回结果的。后来,我发现其实很多逻辑是可以移到客户端,由 javascript来实现的。Javascript非常强大,可以完成很多复杂的逻辑。将逻辑移到客户端的javascript中,可以很有效的减少和 服务器通讯的次数,获得更好的访问速度。

第三步,解决进程的<defunct>

由于采用的是fastCGI 的方式,我配置了django.fcgi。可是,我发现系统进程中,有大量的django.fcgi进程被标记为< defunct>(失去功能)。这些<defunct>进程会导致服务器有时无法正常访问。我开始尝试用命令来kill掉这些进程,但 是很快发现这无法从根本上解决问题。后来,我看到一个老外在blog上提到一个解决方案,将django.fcgi改名为dispatch.fcgi。原 来,dispatch.fcgi是一个dreamhost的系统进程,它的健壮性是可以得到保障的。果然,我将django.fcgi改名为 dispatch.fcgi后,<defunct>的现象再没有出现。

第四步,优化SQL语句

SQL语句的 执行通常也是一个很花费时间的操作。经过检查,我发现我的一条SQL语句,是一个嵌套三层的子表查询。而这条SQL还必须是一个Raw SQL,即不能采用django的OR Maping。这意味着不能被cache缓存,每次都是真刀真枪的执行。更失败的是,经过我的分析,这条SQL完全可以不执行。这是一次设计上的失误,标
准的over design(过渡设计)。当时,我是想通过数据库得到一个最精确的统计值。后来发现,这个值完全可以用一个近似的常量代替。优化SQL,尤其是避免不必要的SQL执行,带来的效果是非常明显的。

第五步,尽量减少页面大小

随 着添加网站越来越多,有一天我发现django生成的首页已经达到了80k。我很清楚这是一个非常不能被接受的数字。我开始检查页面,很快发现了线索。第 一,因为偷懒,页面中很多layout是用空格( )实现的。第二,因为为了增加代码可读行,调试方便,每行生成的页面都增加换行符 (\n)。第三,最糟糕的是,大量的用了
inline css。就是将css style直接嵌入标记块中。于是,我立即动手,用css的align解决layout,去掉\n,将inline css抽象到独立的css文件中。这样下来,在不更改任何内容的情况下,80k变成了57k。

第六步,用gzip进行页面压缩

当 我兴高采烈的把页面优化结果贴到了smth bbs上,却被直接泼了盆凉水。原来百分之二十几的优化结果,实在太一般了。ylsdd给我了一个很重要的线索,deflate。原来apache的 deflate模块可以把文件进行gzip压缩,压缩后的文件传到浏览器后再被解压。主流的浏览器都支持这种gzip的解压操作。于是,我在apache 的配置文
件中加入了Add OutputFilter DEFAULT html css js的语句。经过测试,css,js这些文本文件的压缩后都只有原来尺寸的25%。这里,和大家分享一个网站http: //www.port80software.com/products/httpzip/compresscheck 它的作用是检测你的网站是否被压缩,以及压缩比率等。

第七步,回归静态页面

新的问题又来了。原来deflate只支持静 态文件的压缩。而我的首页是django动态生成的,deflate模块没有进行压缩。我突然想到,网站的首页为什么不能是静态页面呢?于是,我增加了一 个runtime的api,这个api提供的是和原来一样由django动态生成的页面。我又写了一个 python的程序,通过urllib2模块下载这个动态生成的页面,并保存为index.html。我将网站的root映射到index.html这个 静态页面。最后,通过linux crontab定义一个行为,每五分钟执行一下这个python程序,生成新的index.html。值得一提的是,由于网络原因,python程序不一 定每次都能准确完整的下载动态生成的页面。所以我们必须再进行一个校验算法。当页面大小要超过一定数字,页面中出现某个校验字符串的情况下,才保存 index.html。这样,每次用户提交的访问,不是由服务器端动态生成页面,极大的节省了服务器端的开销。而静态页面又可以有效的被deflate压 缩。最后结果,首页被压缩为13k,为原来的22%。唯一的区别就是,新提交和推荐的网站不能立即出现在首页。但是我认为,这应该是可以被接受的。

至此,网站的优化工作基本完成。网站的访问速度从原来30秒以上,缩短到3秒左右,应该说算是一个飞跃。虽然,3秒的速度也不是非常快,但是,考虑到虚拟主机等客观原因,这个结果我还是满意的。原来感觉我的网站很慢的朋友们,也可以再试试。

以 上的优化方案出自我的个人经验,并不一定适合所有网站。但是,它告诉我们一个事实。影响网站访问速度的不仅仅是服务器配置,网络带宽。也许,你糟糕的设 计,低效率的方案也是致命的因素。应当注意的是,优化工作也不能匆匆上手。一定要仔细研究,具体情况具体分析,得到统计数据,找到真正的问题所在,再开始 优化。相信自己,提高网站的访问速度并不是不可能。毕竟,Nothing is Impossible。祝大家成功。
分享到:
评论

相关推荐

    mysql查询速度优化从3万秒到0.001秒共14页.pd

    本资料"mysql查询速度优化从3万秒到0.001秒共14页.pdf"揭示了如何将一个原本耗时长达3万秒的查询优化到只需0.001秒,这是一个显著的性能提升,体现了深度的优化技术和策略。 首先,优化查询速度的关键在于理解SQL...

    飞跃--手册

    详细讲述了GF的w前世今生和突破技术,想看不能看的东西就认真学习学习吧

    飞跃手册(第二版)--北大未名飞跃重洋版

    ### 知识点总结 #### 一、北大官方制作留学指导手册 - **制作方**:北京大学官方 ...无论是从留学规划到申请流程,还是从签证办理到行前准备,甚至是留学生活经验分享,《飞跃手册》都能提供有力的支持和帮助。

    提高网页打开速度的一些小技巧

    互联网带宽越来越宽,似乎让...加快网页的打开速度,有三个路径,一是提高网络带宽,二是用户在本机做优化,三是网站设计者对网页做一定的优化。这篇文章站在一个网站设计者的角度,分享一些优化网页加载速度的小技巧。

    H3C-飞跃100之无线产品部分题目答案

    H3C

    史上超高压缩软件2009

    答:此版本UDA一共有4个压缩模式,编号为0-3,数字越大,压缩率越高,速度越慢.建议使用默认 的模式0,它的压缩率比UHARC的最高压缩率还高(速度约是UHARC的1/3~1/4).压缩时以内存 大小决定,千万不要在内存不足的情况下...

    实时性能的飞跃:VINS系统的优化策略

    6. **闭环检测**:具备闭环检测功能,可以检测到循环回路并进行优化。 7. **全局位姿图优化**:能够进行全局优化,进一步提高定位的精度和一致性。 VINS系统的工作原理可以概括为以下几个关键步骤: - **图像和IMU...

    重塑互联网教育行业-伴鱼如何实现从1到10的飞跃-.docx

    ### 重塑互联网教育行业——伴鱼如何实现从1到10的飞跃 #### 一、互联网教育行业背景 互联网教育自上世纪90年代初现雏形以来,经历了多个发展阶段。从最初的网络学校形式,到2013年以后随着移动互联网、大数据、...

    Visual-C++-6.0从入门到提高(全500页).ppt

    Visual-C++-6.0从入门到提高 通过这个PPT的学习 可以是一个初学者从入门到提高 完成质的飞跃

    教三阶魔方你从2分钟到20秒.doc

    【教程概述】 这篇教程是针对三阶魔方...对于想要提高魔方技能的玩家来说,遵循教程的步骤并持续练习,有望实现从2分钟到20秒的飞跃。同时,教程作者鼓励玩家积极参与社区互动,共同进步,体现了魔方社区的互助精神。

    Yahoo!网站最佳体验守则、web优化

    3. **服务器优化**:服务器端的优化同样重要,它直接影响到页面的响应时间和可用性: - **缓存策略**:利用HTTP缓存头设置,使浏览器能缓存静态资源,减少重复请求。 - **CDN服务**:通过内容分发网络,将网站内容...

    藏经阁-云原生新生产力的飞跃-84.pdf

    "藏经阁-云原生新生产力的飞跃-84.pdf" 本文档对云原生新生产力的飞跃进行了详细的描述和分析。云原生是指基于云计算架构的新一代生产力,旨在提高企业和社会的数字基础设施,实现全生产周期的要素数字化,进而加速...

    3G优化概述 wcdma

    随着无线通信技术的发展,从最初的模拟信号(如AMPS、NMT等第一代移动通信技术),到数字信号(如GSM、IS-95等第二代移动通信技术),再到以WCDMA为代表的第三代移动通信技术,以及后续的第四代、第五代技术,每一次...

    远卓-重新审视公司战略与管理体系,在挑战中实现飞跃---报告.pptx

    从战略规划到经营计划,再到KPI考评体系,形成一个闭环管理流程。每年或必要时调整战略,制定经营计划,然后通过KPI考评体系在每个常规考核期内(如每季度)评估业绩,确保计划的执行和目标的达成。业绩合同的签订...

    章丘网站优化企业网站建站优化推广缺一不可解析如何做到收益剧增整理.pdf

    首先,网站优化是提升网站在搜索引擎排名、提高用户体验和转化率的过程。网站优化主要涉及以下几个方面: 1. 关键词策略:选择与企业产品或服务相关的关键词,合理布局在网站内容中,以便搜索引擎能准确抓取和推荐...

    400%的飞跃-web页面加载速度优化实战

    一个网站的加载速度有多重要?反正我相信之前来博主网站的人至少有50%在加载完成前关闭了本站。为啥捏?看图首页完整加载时间8.18s,看来能进来看博主网站的人都是真爱呀,哈哈。正常来讲一个网页4s加载不完就会流失很...

    多云世界芯飞跃--2017英特尔至强可扩展处理器解析.pdf

    处理器核心微架构升级到了Skylake-SP,放弃了环状总线架构,采用Mesh网格化架构,降低了多核心间的延迟,提高了扩展性能。 处理器家族根据性能和功能被分为四个级别:铂金、金牌、银牌和铜牌。铂金系列是最高端的,...

    人工智能AI处理表格制作技巧Excel函数公式WPS数据分析,无需经验三秒做表,提高职场竞争力-视频网盘链接提取码下载 .txt

    而近年来,人工智能技术的发展更是为Excel的数据分析能力带来了质的飞跃。本文将围绕“人工智能AI处理表格制作技巧Excel函数公式WPS数据分析”这一主题,详细介绍如何利用人工智能和Excel结合的方式,快速提升数据...

    北京邮电大学飞跃手册

    ### 北京邮电大学飞跃手册知识点概览 #### 一、手册背景与目的 - **背景**: 面对留学申请过程中复杂繁琐的流程,许多学生感到迷茫和无助。北京邮电大学的学生通过北邮人论坛飞跃重洋版聚集在一起,分享经验和资源。...

Global site tag (gtag.js) - Google Analytics