注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

蜻蜓点水 举重若轻

君子终日乾乾

 
 
 

日志

 
 

把你的 Plone 变得像 Douban 一样快(二)  

2006-11-24 17:28:47|  分类: 其他技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
影响 Plone 速度的原因

今天, 先讲一下策略, 让我们首先来分析一下 Plone 的页面。这里, 以我在 Plonespace 上面的站点 http://eishn.plonespace.net 为例。

打开首页, 我们可以看到 Plone 安装后的默认页面。点击右键查看页面的源 HTML。我们可以看到:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh"lang="zh">
    <head>
        ...
    <!-- Plone ECMAScripts -->
    <script type="text/javascript" src="http://eishn.plonespace.net/portal_javascripts/Plone%20Default/ploneScripts1669.js"></script>
    <style type="text/css"><!-- @import url(http://eishn.plonespace.net/portal_css/Plone%20Default/ploneStyles8918.css); --></style>
    <link rel="alternate stylesheet" type="text/css" media="screen" href="http://eishn.plonespace.net/portal_css/Plone%20Default/ploneStyles8539.css" title="Small Text" />
    <link rel="alternate stylesheet" type="text/css" media="screen" href="http://eishn.plonespace.net/portal_css/Plone%20Default/ploneStyles3971.css" title="Large Text" />
    <style type="text/css" media="all"><!-- @import url(http://eishn.plonespace.net/portal_css/Plone%20Default/ploneStyles3713.css); --></style>
        ...

我们会发现 Plone 在 Head 部分加载了一些 JavaScript 脚本和 CSS 样式。我们知道, 这些文件在第一次访问之后就会被缓存起来, 所以用户在第二次访问 Plone 站点时, 因为不会重复下载, 所以速度就很快了。但是, 在首次访问时, 用户需要下载多少内容呢?

我检查了一下这几个外部文件, 其总和可以到二三百 K, 在网速并不那么如意的地方, 耗时是恐怖的。比如我现在从网通访问 Plonespace, 就是如此。更糟的是因为外部文件都被放在 HTML Head 部分, 所以在下载阶段, 大家只能看到一片空白的浏览器, 很容易让用户等到意兴阑珊。

    ·Plone 在 Head 部分放置外部文件, 导致在低网速的地区, 在外部文件完全下载完毕之前无法看到实际内容。

所以说 Plone 很冤枉, 特别是在 Plone2.5 下, 只有首次访问因为还没有外部文件的缓存才会显得比较 "慢", 这实在是网络 IO 的原因, 和 Plone 本身的性能毫无关系。但却会导致人们误以为是 Plone 的处理速度有问题, 殊不知 Plone 早就把页面内容放在 Body 部分发送给你了, 只是没有马上显示出来而已。这是人们关于 Plone 的一个误区, 当然也给我们提速 Plone 提供了一个突破口。

第二个方面, Plone 组装一个页面, 会进行非常繁复的内部操作。比如首页, Plone 需要组装一个页面框架, 导航栏, 登录框等。而通常, 我们可能并不需要这样复杂的页面框架, 至少, 对我而言是这样的。

    ·在没有缓存的情况下, Plone 组装一个页面是非常复杂和耗时的 (ZPT/ZODB), 如果 Plone 默认的显示框架对你的应用来说存在过多冗余信息, 或者你需要完全定制显示, 那么在这些地方消耗的时间是浪费的, 并且是可以节省下来的。

在我写这篇文章的时候 (这是连载的第二篇), 有网友就已经对第一篇文章提出了自己的观点。

    ·如果是把 CSS、JavaScript 都简化掉。那也没什么大意思。

对此, 我的观点是:

    ·如果本来我们就需要完全重构站点的显示, 我们就干脆做彻底一点, 即使把 CSS、JavaScript, 甚至把 HTML 架构都简化掉, 都无不可。通常这种方法不仅让定制变得极为简便 (这个我们下面将会看到), 而且能得到最好的速度。同时在站点管理部分, 或者你需要的部分使用 Plone 原始界面, 享受 Plone 的强大。低成本高收益, 何乐而不为?

    ·如果我们需要尽可能保留站点的显示和构造, 我们可以采用后置加载 (放在 Body 部分最后面或者通过 JavaScript 程序动态加载) 的方法, 把 CSS 和 JavaScript 在 Body 部分加载进来。这样即使是第一次访问, 用户都可以迅速看到页面上的内容。Plone 的 "降解 (兼容各种低端浏览器)" 做得很好, 通常在 CSS 还没有下载完的时候, 页面内容都已经组织得非常好了。

下面我们动手。在此之前, 请使用管理员身份登录你的 Plone。然后在你的地址栏上打下 "manage":

    ·比如 http://eishn.plonespace.net/manage

现在你已经到了一个全新的地方, 我们管这个叫做 ZMI。如果你是第一次进入 ZMI, 大跌眼镜手足无措都是正常的。如果有时间不妨先熟悉一下, 你会发现这个界面对我们管理 Plone 大有裨益。我们接下来的工作, 基本上将围绕着这个界面展开。
  评论这张
 
阅读(1697)| 评论(4)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017