以前我的一篇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页面的结构。

整个页面被包围在一个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》。其实实现起来蛮简单。一个最简单的例子:
|
public class AsyncWebPart1 : WebPart { ? bool m_AsyncWorkComplete = false; ? string m_Data = string.Empty; ? public override bool GetRequiresData() { ??? return (m_AsyncWorkComplete==true); ? } ??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; ? } } |
另外,你还可以在Sharepoint Customization这个网站上找到一个实现的更精巧的例子“Asynchronous Web Part Sample”。
还有最后一点没有被我遗忘,Cache。使用Cache保存数据和请求的外部对象。使用合理的序列化保存WebPart的用户定义参数。这一点对所有的ASP.NET应用都是有效的提速方案。
没有力气再向下写了,就算一个RC1的版本吧J,贴出来给大家砸,欢迎补充,欢迎指正。
打印 | 张贴于 2004-12-09 22:50:00 | Tag:Old
留言反馈
Warcraft Gold
World of Warcraft Gold
cheap wow gold
wow power leveling
wow power leveling
wow power leveling
wow powerleveling
wow powerleveling
wow powerleveling
World Of Warcraft power leveling
World Of Warcraft power leveling
World Of Warcraft power leveling
World Of Warcraft powerleveling
World Of Warcraft powerleveling
World Of Warcraft powerleveling
wow power level
wow power level
wow power level
cheap wow power leveling
cheap wow power leveling
cheap wow powerleveling
cheap wow powerleveling
ffxi gil
Final Fantasy XI Gil
cheap ffxi gil
buy ffxi gil
buy ffxi gil
lotro gold
cheap lotro gold
lotro power leveling
lotro powerleveling
lotro power level
美服游戏交易
点卡销售
codeheart article
<a href="http://www.1556663.com"><b>健康asd</b></a>
[url=http://www.1233123.com">http://www.1233123.com]阿萨德asd[/url]
我网站优化的就不错,你可以看看。
花岗石平板,花岗石平台,花岗石平尺,花岗石方尺,花岗石方箱,花岗石直角尺,花岗石V型铁,测微仪
平尺,角尺,平行平尺,桥型平尺,角度平尺,直角尺,镁铝合金平尺
弯板,铸铁弯板,普通弯板
方箱,方筒,铸铁方箱,铸铁方筒,方筒体
垫铁,机床垫铁,机床调整垫铁,防震垫铁,减震垫铁,调整垫铁
齿轮跳动仪,偏摆检查仪,偏摆仪,齿轮跳动检查仪
铸造,铸件,汽车模具,精密铸造,精密铸件
千斤顶,磁性方箱,磁性v型架,平板支架,调整螺栓,地轨
齿轮泵,齿轮油泵,热油泵,不锈钢泵圆弧泵, 高粘度泵,罗茨泵,沥青泵, 渣油泵,煤焦泵
请问sharepoint 图标在那个位置存放,我要换成公司的图标如何处理,谢谢
VS.NET和Sharepoint安装在一起是可以的,只是不能使用相同的站点端口,要知道的是VS.NET需要的Frontpage扩展和Sharepoint扩展并不兼容。
是这样的,就算你连一个空格都没有输入,只是打开并且保存了一下,都会毫不留情的破坏了Page Ghosting。此时,你在修改模板已经不能反映到页面了,Frontpage将会是哪个页面的未来的唯一的编辑器。
首先Frontpage确实是一把双刃剑,可以快速达到效果,却又会破坏一些Page Ghosting。所以我也写了“(当然,有的时候他也必不可少)”,通常为了避免一些不得已使用Frontpage的时候,如跨区域显示List数据等,我可以用开发一个Web部件的方式解决。这一点来说,我希望新版的Sharepoint能够给我一个编辑Page Ghosting的新方案。
你的网站我看过,其中的录像比较有特色!
在2003 IIS6 安装好了VS.NET2003(要求FrontPage Server Extensions)之后还能安装SharePoint?
为什么2003 IIS6 装好之后默认就有个SharePoint管理站点?
那个是什么呢?
有个问题,是不是用FrontPage打开一个WSS的页面,就算只是在页面上加一个空格然后保存,都会使整个页面保存在数据库中而失去了对Page Ghosting的调用?