设为首页 收藏本站
查看: 1363|回复: 0

[经验分享] 提高Sharepoint站点访问速度的几点建议

[复制链接]

尚未签到

发表于 2015-9-30 02:09:13 | 显示全部楼层 |阅读模式
以前我的一篇Post提到了提高Sharepoint页面访问速度的一些要点,其中包括:不破坏Page Ghosting和使用一些基本的XHTML标准。那篇Post的Feedback中有人对XHTML标准的使用提到了一些质疑,当然,我也不是一个XHTML的坚决拥护者,但是尽量使页面遵守一些基本的要点对页面的访问性能必有好处。当然,除了上面两点之外,还有一些CheckList是我们应该注意的,这篇Post我们就来讨论一下提高Sharepoint站点访问速度的一些建议!
首先,还是Page Ghosting的问题。要了解什么是Page Ghosting,Barry Kouda发表在MSD2D的这篇《What you don't know about Front Page 2003 can hurt you》会告诉你。当初次建立好一个WSS/SPS站点之后,用户访问一个具体的页面,此时的页面内容来自两个位置,一个是Page Ghosting,它的位置是在X:\Program Files\Common Files\Microsoft Shared\web server extensions\60\TEMPLATE目录下,它定义了页面的框架、样式、Web部件区域,而页面的内容则存储在数据库中。用户的请求被Sharepoint ISAPI接收到以后服务器端会从数据库中取出具体的内容,和Page Ghosting编译后的Assembly组装整个页面,然后返回HTML给客户端。整个WSS/SPS的页面都是基于Page Ghosting的(除了自己建立的Web部件页),那么页面外观框架的重用性就比较高,多个页面共享一个Page Ghosting的时候会带来不少性能方面的益处。然而Frontpage会破坏这一切(当然,有的时候他也必不可少),它会使使用它编辑过的页面部在使用Page Ghosting,而是将整个页面保存在了数据库中。在用户再次请求访问的时候,执行的工作就大不相同了,整个页面的框架和内容都需要从数据库中载入,而且不会再有重用。因此提高Sharepoint站点访问速度的第一个建议就是尽可能避免破坏Page Ghosting。
第二个方面还是颇具争议的XHTML,下面的图是使用PowerBand查看的一个WSS页面的结构。
DSC0000.gif
整个页面被包围在一个Table中,然后是众多Table的嵌套。浏览器对HTML的解析和显示方式我们很清楚,当一个表格没有全部下载完成之前是不会显示出任何内容的。这样的代价是等待,等待所有的页面元素全部下载完。你只能看着进度条发呆了J。XHTML的所有标准确实苛刻,况且IE浏览器也并非对XHTML绝对有好,我也不再强调完全的HTML,但我喜欢拆分页面的一个Table为多个,就像Sina的结构,多个表格,让Title部分可以优先页面载入完成前显示出来,然后依次向下。用户不必再毫无指望的发呆,总有一些期盼展示给他了。
第三个建议和WebPart的开发有关了。按照需求,我需要开发一些WebPart用于显示公司内其他OA系统的数据在我们的Portal上,有人事的信息,有财务的数据,还有工作流程的审批过程。我们的数据源来自其他系统提供的友好接口或Web Services。还有,我还需要从Internet上面请求一些新闻、天气之类的HTTP回来做成WebPart来使用J。那么问题又出现了!每个WebPart就像一个UserControl,页面按照一个顺序进行Render。取回人事数据花了2秒,Web Servers花了3秒,HTTP请求可能会等待5秒甚至更慢一些,这时候,我要访问的Sharepoint页面就至少需要10秒才能打开,当然这还是比较乐观的。你知道我要说什么了,是的,异步!具备异步机制的WebPart不再会让页面的Render事件累加,而必然小于那个我们不希望的时间。Microsoft.Sharepoint.dll本身支持异步数据获取,仔细读一下《Asynchronous Data Fetching》。其实实现起来蛮简单。一个最简单的例子:



DSC0001.gif public class AsyncWebPart1 : WebPart
DSC0002.gif DSC0003.gif DSC0004.gif {
DSC0005.gif   bool m_AsyncWorkComplete = false;
  string m_Data = string.Empty;
  public override bool GetRequiresData()
DSC0006.gif DSC0007.gif {
    return (m_AsyncWorkComplete==true);
DSC0008.gif   }
  public override void GetData()
{
    RegisterWorkItemCallback(new WaitCallback(AsyncTask), "pass any call-specific data here");
  }
  public void AsyncTask(object state)
{
    // call across network
    // assign data retreive to m_Data field
    m_ AsyncWorkComplete = true;
  }
DSC0009.gif }
另外,你还可以在Sharepoint Customization这个网站上找到一个实现的更精巧的例子“Asynchronous Web Part Sample”。

还有最后一点没有被我遗忘,Cache。使用Cache保存数据和请求的外部对象。使用合理的序列化保存WebPart的用户定义参数。这一点对所有的ASP.NET应用都是有效的提速方案。
没有力气再向下写了,就算一个RC1的版本吧J,贴出来给大家砸,欢迎补充,欢迎指正。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-120572-1-1.html 上篇帖子: 创建与SharePoint 2010风格一致的下拉菜单 下篇帖子: SharePoint门户功能
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表