随着Web前段技术(JavaScript/HTML5)的日益发扬光大,在Web应用程序中,我们开始更多的使用JavaScript。很多以往是放在服务器上运行的逻辑,现在都开始逐渐的向前段转移。这种趋势不需要作者多说,只要是Web开发人员(包括SharePoint工程师),都会有所体验。而在SharePoint平台,这种前端化的趋势也是相当明显的。当我们构建SharePoint解决方案的时候,JavaScript代码的数量在不断的增多,而C#代码的数量则相对的不断减少,这个趋势毋庸置疑。

在我们的SharePoint应用中更多的使用JavaScript代码的优点有许多,其中我认为最重要的一条,也是我在设计SharePoint应用架构时最常考虑的一点,就是"放过w3wp"原则。w3wp.exe进程是SharePoint用来运行自身Web应用程序的主进程,而所谓"放过w3wp",就是说的我们所编写的自定义代码,应该尽量不要放到w3wp.exe进程(或者其它SharePoint用来运行自身代码的进程,比如用来运行Timer Job的进程)里面运行。许多SharePoint项目所面临的性能问题,都是因为开发团队所编写的C#代码质量不佳,或有内存泄漏的问题(比如没有正确的释放SPSite和SPWeb对象),或包含有不恰当的长时间运行的代码,这些代码一旦运行在w3wp.exe进程里面,轻则导致w3wp.exe进程占用的内存飞涨,重则让w3wp.exe进程hang掉。

更多的使用JavaScript,就是贯彻"放过w3wp"原则的重要手段之一。举一个很常见的场景,在SharePoint网站中的某个列表中,存储有需要让用户看到的通知信息,客户需求是希望用户打开网站时,在首页上就能看到他应该看到的通知。对于这个需求,一个理所当然的解决方案就是创建一个Web Part,这个Web Part使用C#代码,通过SPQuery等对象,从列表中查询到要显示给用户的通知,然后将通知显示在Web Part中。如果使用这个方案,我们的代码就是运行在服务器上的w3wp.exe进程里面,代码的一切潜在的问题,都需要w3wp.exe来承担。

利用SharePoint的沙盒解决方案(Sandboxed Solution),可以让我们的C#代码运行在服务器上单独的沙盒进程中,避免对w3wp.exe的影响,这是实现"放过w3wp"原则的一个方法。但是另外一个更灵活的方法,就是使用JavaScript前段技术,来实现我们所需要的功能。对于上面这个需求,开发人员完全可以仅仅依靠JavaScript和SharePoint的JavaScript Object Model,就从列表中查询到需要显示给当前用户的通知,然后将通知在首页上显示出来。由于这些JavaScript代码都是运行在用户的浏览器中,它们对于SharePoint服务器的冲击相比于C#代码,就小很多了。

所以,作为一名SharePoint工程师,了解如何在你的自定义SharePoint应用中用正确的方式使用JavaScript,是非常重要的。这个系列文章的目的也在于此,其中大部分内容都是作者本人在实践过程中,所总结的一些个人经验之谈。但是,这个系列的文章并不会讲述JavaScript这门语言本身以及SharePoint JavaScript Object Model,我们也不会讲述要如何正确的使用JavaScript语言 (虽然这对于工程师而言是非常非常重要的),已经有太多书籍和文章,讲述了JavaScript语言的各种最佳实践。

本文是系列文章的起始。

在SharePoint解决方案中使用JavaScript (0)的更多相关文章

  1. 在SharePoint解决方案中使用JavaScript (2) – 模块化

    本文是在SharePoint中使用JavaScript的第二篇文章,前面的文章包括: 在SharePoint解决方案中使用JavaScript (0) 在SharePoint解决方案中使用JavaSc ...

  2. 在SharePoint解决方案中使用JavaScript (1) – 引用.js文件

    本文是系列文章的第一篇. 在SharePoint解决方案中使用JavaScript (0) 作为在SharePoint应用程序中使用JavaScript的第一步,就是要知道如何将一个写好的.js文件, ...

  3. [转载]SharePoint 2013 解决方案中使用JavaScript

    作为在SharePoint应用程序中使用JavaScript的第一步,就是要知道如何将一个写好的.js文件,引用到页面上.嗯,你可能觉得这个话题太简单了,"引用一个.js文件不就是在页面上方 ...

  4. [MSDN] 使用 SharePoint 2013 中的 JavaScript 库代码完成基本操作

    MSDN:http://msdn.microsoft.com/zh-cn/library/jj163201.aspx 了解如何编写代码以在 SharePoint 2013 中使用 JavaScript ...

  5. SharePoint 2013 中使用 JavaScript Like 和Unlike list item/page/document

    SharePoint 2013中新增了很多社交功能,比如用户可以like/unlike 任何一个 list item/page/document,这是一个非常不错的功能. 但有时觉得like/unli ...

  6. 系统升级日记(3)- 升级SharePoint解决方案和Infopath

    最近一段时间在公司忙于将各类系统进行升级,其最主要的目标有两个,一个是将TFS2010升级到TFS2013,另外一个是将SharePoint 2010升级到SharePoint 2013.本记录旨在记 ...

  7. SharePoint 2013 中自定义WCF服务

    在使用SharePoint2013的时候,如果其他客户端 API 的组合不足,可以通过自定义 Web 服务扩展 SharePoint.默认情况下,SharePoint 2013 不仅支持创建自定义 A ...

  8. 如何在 在SharePoint 2013/2010 解决方案中添加 ashx (HttpHandler)

    本文讲述如何在 在SharePoint 2013/2010 解决方案中添加 ashx (HttpHandler). 一般处理程序(HttpHandler)是·NET众多web组件的一种,ashx是其扩 ...

  9. SharePoint 部署时报错: 未能提取此解决方案中的cab文件

    在vs里右击SharePoint项目,选择"部署",结果报错: Error occurred in deployment step 'Add Solution':Fail to e ...

随机推荐

  1. DataBinder.Eval的正确使用

    本文介绍下,asp.net编程中有关DataBinder.Eval的用法,学习下asp.net DataBinder.Eval的用法,有需要的朋友参考下. 代码示例 :<%# Bind(&quo ...

  2. BZOJ3590 [Snoi2013]Quare

    题意 4.20四川芦山地震发生后,抗震救灾委员会接到一个紧急任务,四川省给该委员会发了一份地图,这份地图给出了该省一些城市的情况:任两个城市是用一条或多条公路连接起来的,也可以没有公路连接,但是每个城 ...

  3. functool.wraps and functools.partial

    functools.partial 通过包装手法,允许我们 "重新定义" 函数签名.  通常是将函数的部分参数给固定下来, 从而形成一个输入参数更少的新函数. functool.w ...

  4. MEF学习总结(3)---Attribute Model Programing

    上一片介绍了Primitive层,Attribute Model可以认为是对Primitive的上层实现.主要包括如下内容: 1. 一系列的Attribute来定义Import和Export 常用的有 ...

  5. PhpStorm 2017.3 版本在 Mac 系统 macOS High Sierra 版本 10.13.3 中运行很卡顿

    最近升级了系统,发现PHPStorm 运行一会儿就卡顿起来了,按网上的方法加大内存配置也是没效果: 运行一会儿照样卡顿,接着一会儿就要内存溢出了挂掉了: 想着最近只有升级过操作系统,并没有升级JDK等 ...

  6. C# datatable竖行转换的问题

    这次在做项目中,遇到了这样一个问题:datable中列头的名字是不确定的,从数据库中动态查出来的,假设为typeDATA,行的数据中又包含了列头的信息,并按固定的字段分组,当查处行的数据之后用来填充每 ...

  7. springmvc之获取参数

    1.导包,四大核心包,一个切面包(AOP),logging,web,springmvc 2.配置文件,核心代码如下: web.xml <servlet> <servlet-name& ...

  8. boost 编译 安装

    首先到 boost.org 下载 boost_1_54_0.tar.gz 上传到 linux 环境下 解压缩 给解压缩出来的文件斌权限 chmod 777 ./* 执行己写好的 shell脚本 boo ...

  9. C#String地址、拼接性能学习

    String类型不可变.定义string变量时会在堆上分配存储空间,而对该变量进行值变更时会重新分配一个存储空间,且保留原存储空间. 测试思路:获取string类型变量值变更前后的存储空间地址,判断地 ...

  10. Android插件化初识

    含义:可以简单理解为将一个app分为多个小的app,其中有一个为宿主app. 解决的主要问题:代码加载.资源加载. 插件的方式:apk安装,apk不安装,dex包 插件化的优点: 1) 模块解耦,应用 ...