存档

作者存档

PHP 性能优化技巧

2009年6月26日

Google 在 Google Code 制作了 “Let’s make the web faster” (让我们使得 Web 更快)的网站中,分享了一些如网页性能优化的技巧和教程以及工具,今天我就翻译一篇技巧文章:PHP 性能优化技巧,他说的5条技巧我都不知道。

1. 不要随便就复制变量

有时候为了使 PHP 代码更加整洁,一些 PHP 新手(包括我)会把预定义好的变量复制到一个名字更简短的变量中,其实这样做的结果是增加了一倍的内存消耗,只会使程序更加慢。试想一下,在下面的例子中,如果用户恶意插入 512KB 字节的文字到文本输入框中,这样就会导致 1MB 的内存被消耗!

BAD:

$description = $_POST['description'];
echo $description;GOOD:

echo $_POST['description'];2. 对字符串使用单引号

PHP 引擎允许使用单引号和双引号来封装字符串变量,但是这个是有很大的差别的!使用双引号的字符串告诉 PHP 引擎首先去读取字符串内容,查找其中的变量,并改为变量对应的值。一般来说字符串是没有变量的,所以使用双引号会导致性能不佳。最好是使用字符串连接而不是双引号字符串。

BAD:

$output = “This is a plain string”;GOOD:

$output = ‘This is a plain string’;BAD:

$type = “mixed”;
$output = “This is a $type string”;GOOD:

$type = ‘mixed’;
$output = ‘This is a ‘ . $type .’ string’;3. 使用 echo 函数来输出字符串

使用 echo() 函数来打印结果出了有更容易阅读之外,在下个例子中,你还可以看到有更好的性能。

BAD:

print($myVariable);GOOD:

echo $myVariable;4. 不要在 echo 中使用连接符

很多 PHP 程序员(有包括我)不知道在用 恶臭 输出多个变量的时候,其实可以使用逗号来分开的,而不必用字符串先把他们先连起来,如下面的第一个例子中,由于使用了连接符就会有性能问题,因为这样就会需要 PHP 引擎首先把所有的变量连接起来,然后在输出,而在第二个例子中,PHP 引擎就会按照循序输出他们。

BAD:

echo ‘Hello, my name is’ . $firstName . $lastName . ‘ and I live in ‘ . $city;GOOD:

echo ‘Hello, my name is’ , $firstName , $lastName , ‘ and I live in ‘ , $city;5. 使用 switch/case 代替 if/else

对于只有单个变量的判断,使用 switch/case 语句而不是 if/else 语句,会有更好的性能,并且代码更加容易阅读和维护。

BAD:

if($_POST['action'] == ‘add’) {
addUser();
} elseif ($_POST['action'] == ‘delete’) {
deleteUser();
} elseif ($_POST['action'] == ‘edit’) {
editUser();
} else {
defaultAction();
}
GOOD:

switch($_POST['action']) {
case ‘add’:
addUser();
break;
case ‘delete’:
deleteUser();
break;
case ‘edit’:
editUser();
break;
default:
defaultAction();
break;
}

西城百幕 工作文档

五招加速网页响应时间

2009年5月31日

网页尽可能的快速加载对网站非常重要;用户希望快速的查看他们想要看的页面,假如你不能满足他们,他们就会另寻它处。在这篇文章中,你会看到五种为你的网页加速的简单而有效的技术的相关讨论。

Five Ways To Speed Up Page Response Times.

1. 使用Yslow概览与测量网站加载时间

在决定什么出问题之前,知道网站的加载时间是第一步。它也能让你知道你是否需要为网站加速进行更改。

在我们开始之前,如果你还没有安装YSlow, 请安装。他是Mozilla Firefox的一个扩展,你可从下面的链接找到它:

https://addons.mozilla.org/en-US/firefox/addon/5369

第一,让我们浏览Six Revisions网站,我们都使用相同的例子进行测试(仅需要在新的标签或者浏览器窗口中打开)。

在浏览器的有效叫,有里程表的一栏(如图1)。在其旁边,当网页完成加载以后,你会看到“YSlow”和数字。数字代表浏览器加载网站所花费的时间(以秒计)。我们希望这个数字保持尽可能低的水平。

Odometer.

图 1: YSlow图标和显示网页加载时间的里程表

多数情况下,导致网页加载时间长的一个或者一组原因如下:

太多的HTTP请求

非压缩的 (或未经缩小的) JavaScript文件

No expiration headers for静态图片文件

我们一会将要讨论这些。

为了fimilarize自己网站加载时间的表现,浏览一些网站。看看Google,facebook,和一些你喜欢的博客与网站。你会注意到网站利用越多的图片与js网页的响应时间越久。

YSlow的使用特点

除了测量它网页加载的速度, YSlow为您提供一些深入了解,如你可以为提高自己的网站性能做些什么,以及网站的负载性能的不足。

下面的图片是 ‘性能’ 标签 (如图 2)。 但你点击它,它会分级展示每个影响到加载时间与整体性能的领域的细节。

Performance tab.

图 2: 性能标签

在这个领域,最主观的选择是使用CDN (内容分发网络).CDN针对大型网站非常有效果。他们所作的事情是跨越遍及各个地区的服务器传播网站内容。当物理服务器越是接近用户加载一个网站,一个页面的速度越快速。因此本质上来说,使用CDN是从服务器上将内容分发到最接近的访问的页面用户旁。

Performance - All.

图 3: 性能标签使用字母(A, B, C, D, F) 表示等级以及当前等级(1-100)。

Aside from using a CDN (which can be costly) – everything else is doable.

等级领域

让我们贯穿每个等级因素,下面是每个等级领域的简短秒速,以及如何解决这些问题实现最佳的性能。

减少HTTP请求:当网页从服务器获取文件的时候便有HTTP请求产生。范围包括脚本,CSS文件,图片以及asynchroneous客户端/服务端请求 (Ajax和其他变化的技术)。这是提及性能时的关键处,但是只需费点体力便能很容易解决。例如,尽可能的合并脚本,CSS,以及图像,在用户的机器上缓存文件常常有帮助。

添加期限头部: 80% 的页面加载时间都于下载脚本,图片以及CSS有关。 多数情况下,这些元素在用户的机器中不会发生改变,你可以通过在.htaccess中添加代码缓存在用户本地机器中(我们会在文章的后面对如何操作进行讨论)。

Gzip 部件: Gziping或者压缩JS文件,图片,HTML文档,CSS文档等等。用户可以下载较小的文件版本,增加网页的加载速度。 这样可以降低服务器的消耗,但是解压缩部件也可能导致页面响应变慢,这取决于用户的浏览器。

把CSS放在顶端: 把CSS文件放在网站的顶端,可以是网站尽可能同时加载其他部件,如图像和文字。

把js放在底端: 把CSS放在文档的头部,仅需要在关闭《boby》前插入js.在这些脚本在后台加载的同时,用户先得到看似完整的页面。

避免使用CSS表达式: 我从来没有使用过CSS 表达式 (被称之为动态特性), 这仅是IE专有的一个增加编程概念(如控制/有条件的结构)的CSS特性,截止到IE8,三叉戟布局引擎(在IE中使用的)不再提供支持。反正使用他们没有一个好想法。在某种程度上,我会基于不同的条件使用PHP脚本加载不同的CSS样式规则,例如一个随机数,一天的时间,或者浏览器。

外部调用JS与CSS: 将JS和CSS文件放在外部文件中,浏览器缓存他们要比每次调用拥有更快的页面加载速度。

减少DNS查找: 只要用户在浏览器的地址栏中键入域名,浏览器总会执行DNS查找IP地址,网站拥越多的入口位置,必要的DNS查找也会越多。尽可能的保持较低的水平,平均60-100毫秒进行一次DNS查询。

缩小JS: 不同于一般的gzip压缩,缩小js文档是去除不必要的空格, tabs, 和其他跟中跟杨的选择字符,减少文件的总尺寸,较小的页面可以获得更快的加载速度,你可以使用 JSMIN来缩小JavaScript.

避免重定向:无论是服务器端头重定向,js重定向,或者HTML元素重定向。你的网站都会加载空白的页面的头,然后再加载新的一页,用户为了获得需要的页面花费越来越多的时间,所以要不惜一切代价避免这种情况。

去除重复的脚本: 浏览器加载相同的脚本会增加页面的加载时间,这是非常简单的数学问题,更多的文件等于更多的加载时间。仔细检查你的网站,确保你没有调用两次或三次jQuery或者其他的脚本。

Components tab.

图 4: 部件标签。

部件标签 (如图 4)可以洞察增加网站加载速度的效果。在这里,你可以看到当前文档加载需要的时间,如果这些文件被压缩,响应的时间,以及假如他们缓存在用户的机器中和什么时候缓存过期。这是对网站很好的考核,衡量其性能与速度优化情况。最后,统计资料标签(如图 4),它向我们展示了所有的HTTP请求,同时下载的文档,以及缓存的文件。Empty cache显示了浏览器需要下载的呈现页面的文件。Primed Cache是另一方面,显示了已经存在于用户浏览器缓存中的文件列表,从而节省了浏览器不必再次下载文件的请求。

Stats tab.

图 5: Stats tab.

2. 使用CSS精灵减少HTTP请求

CSS Sprites 可能是自从Tesla发明了电流以后最cool的事情。呃,我的意思是爱迪生。

嗯,不大,但是非常紧凑。

CSS sprites 可以通过合并你的css背景图片,减少页面向服务的HTTP请求,轻松的降低页面的加载时间。

许多教程只是教你如何使用CSS精灵制作导航,我要说的是使用它制作整个网站的用户界面。

首先,让我们快速浏览一下YouTube,看一看他们是如何使用CSS Sprites的(如图 6)。 你不能在这里看到YouTube的CSS Sprite:

master-vfl87445.png

YouTube screenshot of Master Sprite.

图 6: YouTube的 “主要的” CSS Sprite.

这是怎么做到的,使用CSS,YouTube设定了一个将这张图片作为背景(如上图)的类, 然后其他元素只需要通过css的背景位置属性background-position设定相应的类来使用这些图片。

让我们来试试,我们打算使用YouTube图片来制作一个实例。

在以下示例中,我们使YouTube标志显示在屏幕上。使用相同的使用相同的sprite类与相同的图标,制作一个简单的翻转图标。

以下为引用的内容:

<style>
.sprite {
  background:url(http://s.ytimg.com/yt/img/master-vfl87445.png);
}

#logo {
  width:100px;
  height:45px;
  background-position:0 0;
}
</style>

<div id="logo" class="sprite"> </div>

现在我们所作的是通过单一的HTTP请求满足所有的静态网站需求。这样可以大大降低网页加载时间。

当你使用sprites制作悬停翻转效果时图片更替看起来间隔时间非常短。不同于翻转状态时加载文件,留下大量的空白直到该文件完全被加载。

以下为引用的内容:

<style>
.sprite {
  background:url(http://s.ytimg.com/yt/img/master-vfl87445.png);
}
#logo {
  width:100px;
  height:45px;
  background-position:0 0;
}

#button {
  background-position:0 -355px;
  padding:5px 8px;
}

#button:hover{
  background-position:-25px -355px;
}

</style>

<div id="logo" class="sprite"> </div>

<a href="#" id="button" class="sprite"></a>

3. 先加载CSS最后加载JavaScript

某些站点,你根本无法避开所有的扰乱了你的功能的HTTP请求。

在这方面,以下几个建议:

在body上的《head》标签里加载CSS

在《/body》标签闭合前加载JavaScript 。

会发生什事情呢?网页在用户的机器上加载显示,因此他们的眼睛就开始扫描所提供的内同,这个时候JavaScript正好迎头赶上在后台进行加载。 i

提示:如果您不想移动JavaScript标记,你认为它会搞糟网站的方式工作,我建议使用 defer 属性。用法如下:

<script defer=’defer’>

4. 使用子域名并发下载

并行下载,当你增加文件下载。如果你有打开网页在页脚的状态栏,你会发现加载其他网站的时候,会同时对static.domain.com和c1.domain.com进行请求。

这是一个非常棒的优化负载性能的方法。虽然只是简单的食用子域名,内容在同一个服务器上,但是浏览器是当作独立的服务器进行对待。

进行这样的设定:

在服务器上创建3个子域名

把图片放在在每个子域名的一个文件夹内

在新建的子域名中替换网站图片的位置路径

现在使用JavaScript文件,不会超过两个并发。

5. Adding an Expires Header

一些网站非常丰富,即使使用上述的技术后,性能似乎还可以增加更多。

一个用户访问你的网站,产生一些必要的页面,图片,脚本等HTT请求。

当你使用了Expires Header,你可以在用户的本地机器对这些元素进行缓存,不仅提高了他们的访问速度,也节省了你的带宽。 Expires header可以在所有的图片,脚本与css上使用。

只需要在你的网站根目录.htaccess文件中加入一行代码就可以轻松做到。(假如你没有,可以用文本编辑器创建一个,存为.htaccess,然后上传到根目录中。)

下面的.htaccess.为ico, .pfd, .flv (Flash类型文件), .jpg, .png等设置了2010到期的遥远的期限。

<FilesMatch “\.(ico|pdf|flv|jpg|jpeg|png|gif|js|CSS|swf)$”>
  Header set Expires “Thu, 15 Apr 2010 20:00:00 GMT”
</FilesMatch>

请注意:如果设定过于遥远的expires header,你更新文件需要重新命名(version it) 否则使用缓存的用户将无法看到更新。

例如,如果你拥有一个avaScript文件需要更新, 使用版本号码然后更新所有的旧版本文件 (即. javascriptfile-1.0.js, javascriptfile-1.1.js)

西城百幕 其他

百度site不代表真实结果 网页数是估算值

2009年5月26日

有网友表示今天开始在百度site自己的站的时候发百度开始重视站长,现SITE一下已经开始出现提示称其找到的相关网页数是估算值,不代表真实结果数,仅供参考。

 

百度直接搜索网址后出现类似雅虎搜索的反向链接的功能

据小编观察其搜索帮助也增加了对SITE以及给站长们的小意见以下摘录来自百度帮助:

给站长的建站建议:为每个网页添加合适的标题,如果是网站首页,则标题建议使用站点名称或者站点代表的公司、机构名称;其余的内容页面,标题建议做成与正文内容的提炼和概括,这可以让您的潜在用户通过搜索引擎结果中的标题快速访问到您的页面。

充分利用网站首页或者频道首页的 description 标签,提供此网页内容的概括说明,形式为《meta name=“description” content=“此网页内容的概括说明” /》,这将帮助用户和搜索引擎加强对你的网站和网页的理解。

网站应该有明晰的导航和层次结构,网站上重要的网页,应该能从网站比较浅层的位置找到,确保每个页面都可以通过至少一个文本链接到达。

尽量使用文字而不是flash、Javascript等来显示重要的内容或链接,百度暂时无法识别Flash、Javascript中的内容,这部分内容可能无法在百度搜索得到;仅在flash、Javascript中包含链接指向的网页,百度可能无法收录。

尽量少使用frame和iframe框架结构,通过iframe显示的内容可能会被百度丢弃。

如果网站采用动态网页,减少参数的数量和控制参数的长度将有利于收录。

网站改版或者网站内重要页面链接发生变动时,应该将改版前的页面301永久重定向到改版后的页面。

网站更换域名,应该将旧域名的所有页面301永久重定向到新域名上对应的页面。

只有当搜索引擎、站长、互联网用户之间,能有一种默契的利益均衡,这个行业才会顺畅发展。竭泽而渔式的网站建设,只会使您与用户、与搜索引擎越来越远。搜索引擎与站长之间,宜和谐发展,共同拥抱美好的愿景。

以下是我们给出的一些网站质量方面的建议:

网站的内容应该是面向用户的,搜索引擎也只是网站的一个普通访客,放置任何用户不可见、或者欺骗用户的内容,都可能被搜索引擎当做作弊行为,这些行为包括但不仅限于:在网页中加入隐藏文字或隐藏链接;在网页中加入与网页内容不相关的关键词;具有欺骗性跳转或重定向;专门针对搜索引擎制作桥页;针对搜索引擎利用程序生成的内容;具有大量重复无价值内容;充斥大量恶意广告或恶意代码等。

百度更喜欢独特的原创内容,如果您的站点内容只是从各处采集复制而成,很可能不会被百度收录。

谨慎设置您的友情链接,如果您网站上的友情链接,多是指向一些垃圾站点,那么您的站点可能会受到一些负面影响。

谨慎加入频道共建、内容联盟等不能产生或很少产生原创内容的计划,除非您能为内容联盟创造原创的内容。

百度会尽量收录提供不同信息的网页,如果您网站上相同的内容可以通过不同形式展现(如论坛的简版页面、打印页),可以使用robots.txt禁止spider抓取您不想向用户展现的形式,这也有助于节省您的带宽。

西城百幕 其他

当设计师遇上前端开发

2009年5月3日
作为互联网产品设计师,在和前端开发人员沟通时你是否常常会听到这样的声音:
 
—— “大姐,给点专业精神好不好,这个表格是自适应的,你这样设计页面不好扩展啊…”
——“用ajax不是不行,不过你要事前给我说嘛,你不说我怎么知道呢,你说了我就知道了嘛…”
 
面对这些回答,除了欲哭无泪,你有没有想过是什么原因导致出现这样沟通偏差,有没有解决的办法呢?设计师需要了解哪些知识才能和前端开发人员来更好的合作呢?
 
首先得从这两者之间都有哪些不同说起。我认为最主要原因在于设计师和前端开发在部门中不同的职责划分。通常情况下,产品设计师的产出物多是线框图(wireframe),视觉设计稿(mockup)等,前端负责编写HTML,CSS等代码(demo),有时还会根据需要编写程序代码(如 JSP/ASP/PHP/Rails),光看这些分工,就知道不同的角色对产品的理解和着重点是截然不同的。
 
按照正常的项目流程,设计团队通常需要先设计出界面mockup或demo(HTML/CSS),接着开发人员才开始正式编写代码。然而多数情况下为了保证项目进度,需要开发人员和设计师在项目前期就介入进来,不同的是,开发人员多是审核通过项目计划书(PRD)和原型评审,她们更关注于技术可实现性;而设计师更倾向理解产品经理的项目需求以及通过什么样方式来解决需求从而达到提升用户体验的目的,她们更关注创意的可行性。

 

更令人纠结的是前端开发对“界面元素”和“交互动作”的理解和设计师有很大不同。统一的界面元素对网站的前端架构也会很有好处,他们更关注代码的可重用性。 一方面是CSS:前端开发要实现设计师(或者自己引以为自豪)的界面设计,如果新页面的设计和原先页面中相同功能元素的设计有出入,哪怕是一点出入,都有可能带来很多重复的工作,将CSS文件变得越来越臃肿。另一方面是JavaScript:对于很多应用型网站,会有很多需要JavaScript的页面交互元素。这些交互元素的视觉或者行为设计与之前的有出入,也会让前端工程师为了既保证代码的健壮性来方便后端工程师的开发,又为了实现一些设计上的差别而对现有代码修修补补忙得不可开交,最可怕的是最终淹没于bug的海洋…而交互设计师的侧重点并不在程序的编码实现,而注重于用户如何最好地与系统交互操作,在设计中重点需要考虑的是界面元素的易用性:比如他们会考虑到并非每个用户都是计算机的熟练用户,面对隐藏的层和特殊设计的菜单可能会抓瞎,用户不见得能明白双击左键能自动滚屏或者怎样能让自动滚屏停下来,直接看最下面的结果?总之,设计师(完美主义者更甚)会不断完善产品,来满足更好的用户体验。
 
那么设计师怎样来解决这些问题呢?我觉得最重要的就是“沟通”,这是最根本的解决办法。在原型设计前期就要针对自己想法的询问前端开发在技术上的可行性,在界面设计过程中会有很多精确到像素级的标准,同样要和他们沟通了解代码的实现方式,不然很有可能做无用功。在提交界面设计之后,交互设计师也要主动出击,不定时的去关注demo的实现效果(mockup和demo多多少少存在不一致,在后期需要跟进;另外涉及到复杂的交互方式前端很可能会忘记或者搞混,也需要不断的去核查)。另外建立标准的文档管理和设计规范也很重要,好在我们开始建立设计规范和标准(淘斯基和TPL 模式库)的文档管理方法(SVN),包括:
  • 制定文件命名标准
  • 设定文件统一路径
  • 保存原始创作文件(例如PSD、Fla源文件)
  • 最终完成文件(经过产品经理认可的文件)
  • 视觉模式库和与其对应的代码模式库
当然,前端都很忙的,经常去“骚扰”他们会被鄙视的。跟他们沟通也需要技巧和一些基础认识,我总结了以下几点需要谨记:
  1. 网站的页面是动态的。photoshop呈现的是静态的东西,而网站页面是动态的展现内容、布局和交互。设计师过多关注用户体验层面,很难对所有的细节做到面面俱到。而前端(包括开发)需要照顾到所有的功能点涉及到的页面,因此在前期要考虑的尽量周全,别让别人帮我们收拾烂摊子。
  2. 关注新技术。网页设计缺少技术支持永远只是艺术。设计师必须经常关注新的技术和交互方式,这样才能在设计的时候提供多种解决方案,才能权衡利弊找到最优化的方案。
  3. 界面元素的标准化和统一。前端关注代码的可重用性,设计师关注新创意。因此在设计前期就要考虑哪些元素和交互方式既可以满足用户体验又能够被重复使用,以此来提高效率。
  4. 团队合作很重要。设计师很容易沉浸在自己的小世界里不能自拔,这是我们经常犯的通病。“沟通”是团队合作的关键,一切皆在沟通。
  5. 相信自己。前端通常出于不同的原因对一些交互方式可行性做出判断,比如代码复杂程度,技术可实现性等等。好的设计师需要有一些超前意识和冒险精神,当他们受 新技术的激发,认为它能够大大提升用户体验的时候,就需要把它当作挑战来实现。在对技术的深入了解后去说服前端一起努力实现。
好了,这些血和泪的经验是我工作一段时间慢慢总结的,如果你有更多的方法,希望能一起分享。

西城百幕 前端技术

什么是团队?

2009年4月13日

团队是什么?这是一个问题。

记得毕业找工作时,每个公司都讲究leadership,都讲究teamwork。基本每个大公司的面试都有一轮Access Centre的面试,6-10人做一个group discussion,然后推举一个人做presentation。那个时候的感觉就是,要脱颖而出,就要有思路,能够带领其他人去思考,同时能够把众人的意见撮合成一个结果。

我依然在学校里记得管理的那个广告创意团队,每个人都有不同的天赋。aokao善于设计,LL善于平面,ZYY善于“起哄”……那个时候,作为leader就是要有清晰的思路,完整的思路,去引导成员去思考。

工作了,开始真正面对生意上的压力,老板的压力,公司的压力,客户的压力。每件事情似乎都要迅速做出决策,每个决策似乎都关系着自己的职业发展。这里的leader需要更多素质。工作不久,我已经跟过两个老板。一个是男的,一个是女的。男老板对我来讲更像一个coach,不断地激励我,不断地提醒我,教我使用公司的流程,教我学会应付上面的压力。每当我犯了低级错误,他都会帮我顶。男老板只看宏观的,只要方向没有错误,他更愿意给我发挥的空间。而女老板则更像一个指挥官,她要求下级必须服从上级的命令,上级给出的指令必须严格操作,不需要下级有太多的思考。甚至,希望下级去实验上级的想法。

我记得HBR有一篇专门讨论leadership的文章,同时the apprentice里的Trump也在不断教育观众什么才是leadership。对我而言,我更喜欢的leadership是coach + commander式。商业上的决策,有些是火速但短期的,有些是重要但长期的。对于前者,leader需要给staff一个严格的指令,而且必须完美执行。对于后者,leader更应该给staff一些思考和发挥的空间。

Wharton有一篇文章,写关于“最佳团队规模”,很有意思,在此分享一下。

 

在体育界,各个运动队上场的队员数量都很明确:一支篮球队需要5个人,棒球队9个人,足球队11个人。但在工作场所,随着团队合作在不断扩大且复杂化的组织中日益普遍,要确定每支团队的最佳人数则是无章可循。

早在1861年,法国农业工程师马克西米利安·林格尔曼就发现拉绳子的人越多,尽管总体拉力增加,但每个成员施加的平均拉力减小,这与团队合作时成员更卖力的传统理论相悖。林格尔曼将其归因于当时所谓的“社会惰性”,即一个群体或团队往往会隐藏缺少个人努力的现象。

究竟多少人组成的团队才能实现最高的整体效率?有人认为,4~6人才能实现最高的团队效率,那每个团队若是有5~6人,又会如何?大型团队是不是因为具有“社会惰性”且缺乏协作而土崩瓦解?

 

团队首要不考虑规模

沃顿商学院管理学教授缪勒的重点研究领域之一是团队规模,但她认为,在组建一支有效团队时,规模并不一定是首先要考虑的事。

缪勒说:“第一,搞清楚团队即将承担何种任务很重要。对此问题的回复将提示你想聘用什么样的员工以及寻求何种类型的技能,其中有一项就是所需的协调程度。相互协调依赖很重要,它是你衡量人际关系是否融洽的标准之一。如果是销售团队,那只有在最后才能实现真正的协调。因为它全是单个个体的行为,人与人之间不存在相互依赖。”

“第二,要考虑团队将如何构成?人们在行动中需要运用哪些技能?这包括从工作方式到个人风格到知识基础等,要确保这一切与任务相适合。”如果是盖房子,你需要的是泥瓦匠,而要编写软件,则必须选择软件工程师。

“第三,你才需要考虑团队规模。”

沃顿商学院管理学教授克莱因认为,对于团队而言,人数是很重要的。“如果你们是2个成员,那是一个团队还是二元对等体?若是3个人,你会有机会进行权力斗争,比如二对一的角力。”

有些观点认为3人团队与2人团队截然不同,还有人认为偶数团队和奇数团队也有差异。事实上,当你们的团队达到8或9人以上时,你会发现它臃肿麻烦,派系丛生。

缪勒说:“在规模大于5个人后,就会显露出‘社会惰性’,人们在团队中的拉力发生收益递减,除非承担强制性任务。有人开始得过且过,做一天和尚撞一天钟。”

 

数字6刚好

虽然对最佳团队规模的研究还没有明确结论,但是它应该是在5~12个人之间,也有人说5~9个人最妥当,而且最佳团队规模的数字为6才是刚刚好。

沃顿商学院领导力研究项目主任伊万·维滕贝格强调说,“团队规模并不一定是人们立即考虑的问题,但它确实很重要。在职场,人们一直强调一个团队内5~6个人是最适当的,因为这个数字可以让每个人都能充分发挥自己的才能。”

维滕贝格补充说,卓越的团队不仅仅取决于最佳规模。比如,沃顿为每个团队分配了5~6个MBA学生。“我们不仅仅是分配那些人。我们必须确认他们都可以有效工作。”沃顿商学院将所有800名学生带到纽约州北部的森林中露营,开展团队学习计划,用2天时间组建团队和建立彼此的信赖,而6个人的团队表现得更有效率一些。

缪勒的研究似乎也证实了维滕贝格的观点,“如果你打扫体育场,那就没有限制;30个人打扫的速度总比5个人快。但如果公司处理的是协调任务和激励事宜,那么6个人刚合适。”在她的研究中发现,组织规模超过5个人后,每个人都开始寻找组建自己的小圈子,5人或5人以上的组织里更难管理。而为了应付日益复杂的工作,缪勒将最佳团队规模的数字定义为上限6。

由于有研究显示经理人往往会使团队出现冗员,那么理解团队越大个人表现越差的原因,可能会成为实施成功管理策略的关键所在。此外,个人绩效缺失与其说与协作行为有关,不如说与个体间彼此建立良好友谊来提升个人绩效有密切关系。

 

多样化不利团结

当然,团队绩效随着人数增加边际效益递减并不仅仅与规模有关,性别、种族和年龄的种种差异也会导致冲突,降低团队整体效率。

克莱因说:“人以群分,人们总喜欢和自己相似的人来往,所以多样化不利于团结。当然,从另一个方面来看,多样化是有利的,因为它激发了更多的思想、更多的角度和更多的创新,从而能得出更好的解决方案。但是,在时间紧迫且公开交流和辩论的机会有限时,拥有相似心智模型的团队成员可以预见到彼此的反应,达成有效协作。”

沃顿商学院管理学罗思巴德教授也有类似的理论,她称之为“少数群体”——也就是一颗老鼠屎坏了一锅汤。“少数群体看起来威胁不大,但却持不同见解,可以让群体的其他人员心烦意乱,导致整个团队鸡犬不宁。”

因此,对于团队领袖而言,最重要的素质是情绪稳定。如果有人神经兮兮,容易激动不安,整天忧心忡忡,脾气又很暴躁,这对团队没有任何好处。

另一方面,懂得人际交流重要性的团队比倚赖电子通讯的团队更为成功。电子邮件是可怕的媒体?——它无法很好地传达讽刺或情感,还可能导致误解。面对面地与人交流非常重要,效果迥然不同。

高绩效的团队确实很难组建,人们该如何行动呢?缪勒总结到,“你要回归到基本问题。这个团队有明确目标吗?团队成员是否各得其所呢?团队任务集中吗?其中目标模糊不清是大忌;另一个禁忌是领导者难以掌控大局,无法组织整个过程;第三,制定团队目标时不可独断专行。任务必须具有一定的意义,人们才会愿意不辞劳苦地为之奔忙。”

转载自:http://blog.sina.com.cn/s/blog_49e18c1a010008jb.html

西城百幕 团队故事

共勉 – 秦风·无衣

2009年3月24日

  出自《诗经》

  原文:

  岂曰无衣?与子同袍。王于兴师,修我戈矛。与子同仇!

  岂曰无衣?与子同泽。王于兴师,修我矛戟。与子偕作!

  岂曰无衣?与子同裳。王于兴师,修我甲兵。与子偕行!

  翻译:

  怎能说没有衣裳?我愿和你同披一件战袍。天子让我们出兵打仗,且修好我们的戈与矛。我们面对的是共同的敌人!

  怎能说没有衣裳?我愿和你同穿一件汗衣。天子让我们出兵打仗,且修好我们的矛与戟。我愿与你一同战斗!

  怎能说没有衣裳?我愿和你同穿一件下裳。天子让我们出兵打仗,且修好我们的盔甲兵器。我愿与你一同前进!

西城百幕 其他

当天完成任务的15个技巧

2009年3月10日

原文:

15 Tips to Make Today the Day You Finish Your To-Do List,来自勤奋的作者 Scott H Young 。我们俗话说“今日事今日毕”,道理简单做起来却难。这里的15点有些都是教条,具体要和自己的生活结合起来应用才行。

1.清理自己的计划表。

2.早起一点。

3.做好计划表的收集。

4.对结束一件任务有清醒的认识。

5.先做难做的事。

6.远离外部干扰,关掉手机远离网络会更高效。

7.注意休息。

8.休息与计划协调。

9.避免高负荷工作。

10.奖励自己。

11.衡量要做的是否值得。

12.合理饮食。多喝水少吃食物,但要保持足够能量。

13.注意锻炼。锻炼是必要的,但过量会适得其反。

14.提前做好准备。把与计划相关的东西事先准备好。

15.合理安排时间,不要过于劳累。

(完)

西城百幕 其他

激情是成功的必要因素

2009年3月6日

人与人初次见面的时候往往都显得非常拘束,彼此间也非常的客气,显得彬彬有礼。想极力的为对方留下不错的映像。但是往往随着时间的变化,两个人认识的加深,很多初次的映像就开始发生改变,一些初见时候的好映像往往留的不久。
对于公司来说也常常有这样的问题,一个新进的同事,可能工作极为认真,也常常投入工作,主动加班。但是当其工作了一段时间可能会出现一些懈怠,甚至对于工作有敷衍了事的态度,加班更是很少见的事情,并不是提倡常常加班就是公司的好员工,我们部门是常常加班的部门,我认为能在一天内把应有的工作完成,又富有工作热情的人才是真正的有效率有执行力的人,但是具体工作因为个人能力抑或工作方法/效率出现问题而没有完成的人是需要用加班来完成工作的(除去时间和个人责任感的因素),因为自己还不够出色,才需要更多的历练,加班有时候也是迅速提高个人能力的一种必要手段,热情就是我们内心对待这份工作的潜在激情,我们应该停下来想一想现在的自己是否依然褒有这份激情,如果没有,我们又需要如何调整?
答案应该是因人而异的,有的人可能长时间不在状态最终也许会离开。有的人可能一直处在矛盾之中,将就着过着生活,时常能突然的开化,但有时又变得懈怠,反复如此,做着最基本的工作。也有的人及时调整了自己的心态,内心一直充满自信,热爱工作,有投入的激情。
我想表达的就是希望我们的团队每个人都能保持激情,不管是做设计还是做程序开发的工作每个人都应该比现在更投入,对团队也更认同,其实只需要每个人多付出一点点工作就会轻松很多,但愿我们是有激情有梦想的一群人,能一起大喊YES,I CAN! YES,WE CAN!的一群人。

西城百幕 其他

互联网产品性格设计的十个建议

2009年3月3日

好的产品性格必定能与用户很好地相处。设计互联网产品的性格有以下十个建议:

1、礼貌

礼多人不怪,网站应该像个绅士。这点体现在网站上的对话中,你始终不能跟用户生气。

2、乐于助人

多数网站或程序并不会试图提供相关信息。相反,它只是很呆板地回答我们问它的问题。比如程序告诉我们打印一份文档的时候,不会告诉我们打印纸不够了。而乐于助人的朋友是会告诉我们这些的。

3、具有常识

在不合适的地方提供不合适的功能是最没有常识的做法。把常用的功能放在显眼的地方,方便用户操作。

4、体贴

一个体贴的朋友会记住你的喜好以便将来使你开心。程序也应努力记住用户的习惯,特别是用户告诉过程序的事。比如在编写email时,能提供自动保存。

5、自信

程序总是用错误的信息向用户报怨,用确认的对话框打断用户,用毫无必要的通知来向用户炫耀。

程序应该是自信的!当你点击打印按钮,然后去喝杯咖啡,回来的时候却发现一个可恶的对话框:“你真的要打印吗?”。。。天!这种不安且没自信的感觉会让人生气。

6、积极

虽然我们不希望程序因为它的小担心或小成功而不断地纠缠我们,但我们却真的希望它能对关系到我们的事及时通知。用户操作过程中可以提供实时的非模态反馈。

7、能预见需求

程序可以利用空闲时间为用户办事。比如网络相册的图片“预处理”或“预加载”。

8、不纠缠

程序不会问用户许多问题。人们不愿意也不希望陌生人像查户口一样地盘问自己。

9、失败也不失风度

举个例子,你在填完你认为需要填写的表单信息后可能按下提交按钮,但由于有未输入完整或输入错误,程序拒绝提交,于是用户返回却看到之前即使正确的也被删除了。

当你的一个朋友严重失礼的时候,他会试图弥补,挽回可以挽回的损失。同样,当程序发现一个致命问题的时候,应该选择充分的时间弥补过失而不是让用户受到损害。

10、适时调整

在现实世界,限制总是可以调整的。程序也需要意识并包容这种事实。

时间

对计算机用户来说,滚动是非常熟悉的常用用法。滚动也解决了跨越月的边界进行时间安排的机械表达问题。(不要一成不变地将旧的限制带入新的平台)

文章来源:http://blog.dearcolor.com/20090228/internet-products-design-ten-recommendations.html

西城百幕 前端技术, 工作文档

也谈用户需求

2009年2月16日

  Baiya同学关闭了“评论”,而后发起了《装不装用户》的讨论话题。这个想法和我先前提倡的一个有相似之处,除了评论,博客针对于信息的重复转载是没有意义的,针对于搜索引擎也会产生大量无意义的链接(很高兴的是看到谷歌、雅虎、微软推出复制内容规范)。博客的意义在于表达自己对话题的认知和思考,尽管这篇文章有些迟,我想还是做为一个回复。

  先谈“用户”,到底谁是真正的用户,设计师是不是用户?针对于互联网上的用户,还有一个说法叫“活跃用户”。针对设计师是不是用户的问题,IDEO的五十三张卡片中有一种叫“Role-Playing、角色扮演”方法,原文和翻译如下:

  How: Identify the stakeholders involved in the design problem and assign those roles to members of the team.(定义出涉众(与该设计利益关系最紧密的人,可能是直接使用者或者受用者),并让自己团队的成员去分别扮演这些人。)

  What:By enacting the activities within a real or imagined context, the team can trigger empathy for actual users and raise other relevant issues.(在一个真实的或假想的使用情景下操作一下,能够使用团队产生对真实用户的同理心,并可引发出其他相关的问题。)案例:在设计一个医疗设备过程中,IDEO团队的成员分别扮演了可能涉及的一个医生、一个护士、一个病人和一个麻醉师,假装去使用手术室的设备来完成一个需要共同协作的任务。

  简单来说:设计师可以去模拟真实的用户去感受用户的使用,从而再来改进产品。

  为了了解产品,设计师把自己当成用户去了解用户如何使用产品,只有在更近一步的去接近用户去发掘用户需求的时候,设计师才算是一个用户。白浓在举Jobs的例子,我觉得有一些极端,不知道这娃从哪儿看的:“白浓的博客:我记得乔布斯就是一个很高傲的设计师,他极度反对用户参与设计的过程,因为他有对自己产品无限的了解和无数idea。”因为现在我们对苹果的了解太少了,有一点肯定的是不近距离接触用户,很难做好产品,而很可能的是Jobs在先前的时间里,已经非常的深入的了解用户。

  再谈“需求”。首先我先说的是一个特例。

  早期的互联网有一个叫“BBS”的东西,那个时候只有简单的发帖功能,和今天BBS超强的功能相比起来简直不能同日而语。BBS的开发者们也不会想到今天的BSS功能这么强大,但有时候,产品的新功能的需求也并不是由开发者们和用户直接产生。我举一个例子:约2002年我在学院工作的时候,学院网络提供了BBS作为师生们一个交流的平台。但学生们使用BBS发帖时显得随意,而上级需要对BBS的帖子内容进行保证,没办法,审核功能出来了。我和沙滩小子说学院可以购买正版的动网程序,但一定希望有帖子审核的功能。BBS带审核功能,我想是基于这个出发点开始的。

  这个是特例,需求产生的根本原因还是在于用户,你推出一个功能,就会有许多个问题和需求出来,你无法知道高智能的人类能想出其它什么东西。所有需求,在产品初期都无法准确预见的到。

  有人说QQ最牛逼的就是“群”这个功能。细品下,“群”功能需求的产生并不是腾讯,而是用户自己产生的。人们在一对一的交流基础之上,渐渐有了群聊的想法,物以类聚,人以群为,我们几个人玩仙剑的可以一起聊攻略,你们几个考研的可以一起讨论学习。这个需求的产生是基于一对一的交流与沟通,无疑问的是腾讯最先满足了这个需求。

  也有满足不了的需求,那是因为各种条件的限制。比如我想在Youtube上观看蓝光DVD视频,今天似乎还不可以;我想下载音乐和电影,似乎政策和制片商更不允许;07年在做Q首改版设计时,希望设计一个针对话题的评价功能,和谐又不允许。所以,期望值是可以商量的,你可以看到压缩过的高清视频在Youtube播放,你也可以看到付费下载音乐或电影也慢慢开始(如QQ绿钻、虾米付费下载音乐),你还可以在新版的TOM首页上看到“声音”。不否认的是设计师可以对开始的方案进行一步步完善。

  94Smart说:“做产品不是只有一种方法,装是一种方法,不装是另一种方法,且还有其他方法。”我很认同这句话,越来越多的产品采用beta、A/B测试、限量公测、泄露版等方法来推出,虽有地方法有些“不地道”,但这的的确确是探寻用户需求的前期方法。

  无论需求是如何产生、或从何产生,采用多种手段去感知、挖掘、提炼需求,才是设计师所要去做的。至于装与不装、是或不是用户,我想不是最重要的。

西城百幕 界面开发, 视觉设计