在使用ExtJs过程中,性能一直是一个比较头疼的问题,从用户的角度来看,就一个字:慢。从技术的角度来说,这个“慢”字可以分为两种,加载“慢”和渲染“慢”。想分辨这两种情况很容易:如果居于网不慢而互联网上慢,说明是加载慢;如果Chrome不慢而IE慢,就是渲染慢。还有另一种情况:越用越慢,这个“慢”通常是内存泄露造成的。
针对以下这三种情况讨论一下解决方案:
1,加载慢
1.1 减少要加载的东西
不要动不动就ext-all.js,extjs是可以定制的,如果你用不到tree,就不要包含这个组件了。ExtJs的官网上有详细的定制方法和工具。
1.2 给出合适的用户提示
把Js后置,然后前面做一个加载的提示。如果像Gmail那样给出进度条,或者像很多网游那样来点图片或者Tips啥的就更好了,说不定用户还会觉得怎么加载这么快,我还没看清楚呢,呵呵。
1.3 用的时候再加载
动态加载,参考使用ExtJs开发MIS系统(2):Js的动态加载。
1.4 只加载一次
别用iframe了,如果你的静态内容过期做的不好,浏览器会经常再不厌其烦的从服务器下载同样的东西。
1.5 对你的Js添加过期标记
ext-base.js、ext-all.js都可以设置很长的过期时间,甚至永不过期(如果你不换extjs的版本)。这点对所有静态内容都很有用,如何设置过期标记请垂询Google。
2,渲染慢
2.1 少加载少解析、晚加载晚解析
1.1,1.3,1.4都对改善渲染慢的情况有效——加载的少了自然渲染的快了。
2.2 别用iframe
iframe不仅仅可能会使浏览器加载两遍,还一定会使浏览器解析两遍,放弃它吧,真的。
2.3 精心设计你的Js代码
例如缓存getElementByID()的结果、编译查询表达式之类的东西,这个纯看Js功力。
2.4 可能的话,让用户换个浏览器吧
Chrome比IE的Js渲染快是数量级上的差异!构造一个40列,50行的复杂GridPanel试试,你就会深有体会了……对于企业内部的MIS系统,换浏览器还是具有可能性的。
3,内存泄露
Ext性能调优方案
1. 将JS进行合并压缩。
使用yahoo的yui-compress.jar进行压缩JS,去掉过多的空格和注释,并合并,减少IO的支出。
2. 将前后台传输的数据进行GZIP压缩。
大数据量的数据传输,通过GZIP的压缩方案,可以减少到25%,有些数据可能会更多。
3. 对大量的JS分析依赖关系,进行动态加载。
这个是关键,通过分析所有的JS中的依赖关系,减少了JS加载的数量。从很大程度上提高了性能。
4. 另外对部分页面进行缓存,而非真正的关闭。
还有一个外部的因素,由于系统使用的客户机环境上的复杂,我们在多个浏览器上进行了测试,只有IE是最慢的,尤其是IE6,后来发现不是IE6要比IE7慢,是因为发现MS发布了脚本引擎cscript 5.7, 而大部分的ie6系统都装的是5.6, 这个版本上的升级,不仅仅是修改了BUG,在JS的执行速度上也有了较大的提升,于是我们在环境因素上又加上了一条,要求客户安装cscript5.7,也大大的提升了页面的打开时间。
ext-all.js这个文件都有500多k,在页面中直接引用这个js文件是很不现实的,曾经在一个大的项目中使用这个js,则直接导致页面半天出不来的后果。于是自己研究了下,目前通过下面的方法来优化提升Ext Js的性能。
使用JSVM
JSVM (JavaScript Virtual Machine的缩写),一个JavaScript基础框架,sourceforge开源项目,由万常华(wch3116)于2003年底发起, 目前最新版本是2.05,采用的是 BSD License 授权协议。本身JSVM也提供了JSVM+Ext2的实例,看看就知道怎么在JSVM下加入ext的js库了。
我在项目中是这么用的:
<script type= "text/javascript" src= "/depporject/comjs/jsvm2/jsre.js" classpath= "dom2.gzjs;ext2p.gzjs" modules= "smartloader" ></script>
为什么扩展名是gzjs呢,这是使用了gzip压缩js文件
使用Gzip压缩
gzip压缩后,ext js文件的大小将只有100k左右。
只是对gzip压缩的文件需要提供filter(Java开发),为你的应用提高解压缩功能,filter的写法很简单:
public void doFilter(HttpServletRequest request,
HttpServletResponse response, FilterChain chain)
throws IOException, ServletException {
for (Iterator it = headers.entrySet().iterator();it.hasNext();) {
Map.Entry entry = (Map.Entry)it.next();
response.addHeader((String)entry.getKey(),(String)entry.getValue());
}
chain.doFilter(request, response);
}
public void init(FilterConfig config) throws ServletException {
String headersStr = config.getInitParameter( "headers" );
String[] headers = headersStr.split( "," );
for ( int i = 0 ; i < headers.length; i++) {
String[] temp = headers[i].split( "=" );
this .headers.put(temp[ 0 ].trim(), temp[ 1 ].trim());
}
}
}
web.xml配置
< filter >
< filter-name > addHeaderFilter </ filter-name >
< filter-class >org .common.AddHeaderFilter </ filter-class >
< init-param >
< param-name > headers </ param-name >
< param-value > Content-Encoding = gzip </ param-value >
</ init-param >
</ filter >
通过以上两步,整个页面装载速度很快了。大家可以试试。
另外在实际开发中,并不是将ext-all.js全部在jsvm中装载,只是将常用的ext js代码归到一起,由gzip压缩,然后又jsvm装载(即ext2p.js,p代表部分),剩下的ext js代码由jsvm按需装载。
概念解释
在实际的业务中,对于工作流一般是这样定义的:
定义完成某项工作需要多少个环节,每个环节由哪些人处理,完成这项工作的表单。
实际处理的时候,通常由发起人填好表单,然后去找各个环节的负责人签字审批,一直到流程结束。
在JBPM的框架中,用ProcessDefinition来描述某项工作,Activity描述各个定义的环节,Transition描述环节中的路径。
ProcessDefinitionInstance来描述实际执行的工作,可能是继承了ProcessDefinition,但又多出很多属性,如建立时间,发起人等,
Task或Excution来描述实际执行的步骤。
相应地有RespositoryService,ExcutionService,TaskService,来操作ProcessDefinition,Excution,Task,使工作一步步地往定义好的步骤往下走。
Excution表示实际流程中的当前环节,即以前的Token。
编程实务
画好流程图,即定义流程,画好一堆的步骤。
作好每个环节中要展示的JSP页面,并配到流程定义中。
写好每个环节提交后要处理的JAVA代码。
JBPM流程定义
流程定义的中间环节有两种:
一种是流程引擎碰到这种环节,会自动流转到下一环节,如Decision,Java等。
另一种是流程引擎碰到这种环节,会处于等待状态,直到程序下指令如:excuSinal才流转到下一环节,
这里面又分两种:一种是有处理人属性的Task,由处理人决定下一环节的流向,另一种是没设处理人,由程序决定下一环节的走向,如State。
实际流程中可以放变量值,以供整个流程环节存取。
如果流程定义中用了变量或表达式,则其实际值,会取实际流程中放进去的值。
如Task节点:
加一个Task节点时,将assignee设成表达式,这样在生成Task记录时,会读取绑定到流程实例中变量的值,作为assignee的值,
也可以指定一个CLASS,在生成Task记录时,会运行其中的assign方法,读取assignable中的getAssignee()的值,作为Task的分配人。
退回的解决方案
退回就是将此Task退回到上一环节的处理人处。
画图的时候不画退回的路径,但在程序处理中用代码加这一Task指向上一环节的路径,complete(taskId,newTransition)使其回到上一环节,然后再删除这一Transition。
会签的解决方案
会签指的是将同一任务同时分派给多人并行处理。
用For-each和join实现,或动态增加子任务。
1. 流程定义(Process Definition)
流程定义是记录在xml文件中的对流程的描述,它包含唯一的流程开始节点和多个流程功能节点,每个节点之间使用transition进行连接。
Process Definition使用id, key和version进行标识,jBPM中可能包含多个key值相同的Process Definition,key值相同的Process Definition会拥有不同的version值,而id是使用key-version的形式用来表示唯一的Process Definition的。
jBPM中使用RepositoryService来控制流程定义的发布,浏览,删除等操作。
2. 流程实例(Process Instance)
以流程定义为蓝本生成的流程实例,在jBPM属于Execution的一种。
当我们执行start时,会根据流程定义启动一个新的流程实例,然后它会根据流程定义里的节点运行,在遇到state或task时停顿,等待外部用户调用signal,最后会执行到end节点,结束整个流程。
jBPM中只允许有一个start节点,所以每个流程都是单一入口的,jBPM4中可以允许有多个end节点,所以我们可以在任意位置结束流程。
jBPM中使用ExecutionService来控制流程实例的启动,浏览,执行,删除等操作
3. state节点
状态结点是一个典型的等待状态。同任务结点不同的是,状态结点不会向任务列表添加任务实例。当业务进程需要等待外部系统的干预时,这种结点是很有用的。(需要外部系统干预,但又不是让人去干预)假设如下情况:在进入该结点时,通过node-enter事件向外部系统发送一个消息,然后结点进入等待状态;当外部系统完成处理,并回送一个消息,这将导致触发一个signal()方法的运行,该方法重新激活正在等待的流程继续下行
jBPM中使用ExecutionService来控制对state的signal操作。
4. task节点
任务结点(task-node)任务结点是代表由人介入的一个或多个任务。因此当流程运行到一个任务结点时,会生成“任务实例对象(task instances)”,并添加到参与人的任务列表中,之后结点会处于等待状态,直到参与人完成他们的任务,并激活流程继续向下执行。
task节点可以使用assignee, swimelane等方式为任务定义分配到某个人或者某个组,对应的用户可以执行completeTask()结束任务,并控制任务结束后流程实例向哪个方向前进。
jBPM中使用TaskService控制task的各项操作。
5. Identity身份验证
jBPM中的身份验证分为User, Group和Membership三部分,用户表示登陆用户,Group表示用户组,用户和用户组之间的关联关系保存在Membership中。User和Group与Task中的assignee和swimelane是息息相关的。
6.事件
Event反映的是流程执行中的各个时刻。在流程执行中 JBPM引擎会在计算下一个状态的时候触发各种事件。一个事件通常和流程定义中的一个元素相关联,比如流程定义本身,节点或者转移。大部分的元素能够触发不同类型的事件,比如一个节点可以触发节点进入事件,节点离开事件。事件其实是和动作连接在一起的。每个事件维护一个动作列表。当JBPM引擎触发一个事件的时候,该事件维护的动作列表中的动作将被执行。
JBPM中事件类型是写死在事件类中的,共有16种:
EVENTTYPE_TRANSITION = "transition"; // 转移
EVENTTYPE_BEFORE_SIGNAL = "before-signal"; // 发信号前
EVENTTYPE_AFTER_SIGNAL = "after-signal"; // 发信号后
EVENTTYPE_PROCESS_START = "process-start"; // 处理开始状态
EVENTTYPE_PROCESS_END = "process-end"; // 处理结束状态
EVENTTYPE_NODE_ENTER = "node-enter"; // 进入节点
EVENTTYPE_NODE_LEAVE = "node-leave"; // 离开节点
EVENTTYPE_SUPERSTATE_ENTER = "superstate-enter"; // 进入超级状态
EVENTTYPE_SUPERSTATE_LEAVE = "superstate-leave"; // 离开超级状态
EVENTTYPE_SUBPROCESS_CREATED = "subprocess-created"; // 子流程创建
EVENTTYPE_SUBPROCESS_END = "subprocess-end"; // 子流程结束
EVENTTYPE_TASK_CREATE = "task-create"; // 任务创建
EVENTTYPE_TASK_ASSIGN = "task-assign"; // 任务分派
EVENTTYPE_TASK_START = "task-start"; // 任务启动
EVENTTYPE_TASK_END = "task-end"; // 任务结束
EVENTTYPE_TIMER = "timer"; // 定时器
7.transition
关联两个节点,用于表示节点的走向
8.常用类说明
ProcessEngine:它是整个jBPM4的入口,并且是单例模式。通过它可以获取processEngine,并藉此获得工作流引擎所提供的各种服务
RepositoryService:控制流程定义的发布,浏览,删除等操作
ExecutionService:控制流程实例的启动,浏览,执行,删除等操作
IdentityService:控制身份的各项操作
*********************************************************************************************
对jBPM4.3数据库的几张表简单介绍
JBPM4_DEPLOYMENT 流程定义表
JBPM4_DEPLOYPROP 流程定义属性表
JBPM4_EXECUTION 流程实例表
JBPM4_HIST_ACTINST 流程活动(节点)实例表
JBPM4_HIST_DETAIL 流程历史详细表
JBPM4_HIST_PROCINST 流程实例历史表
JBPM4_HIST_TASK 流程任务实例历史表
JBPM4_HIST_VAR 流程变量(上下文)历史表
JBPM4_ID_GROUP 角色表
JBPM4_ID_MEMBERSHIP 用户角色表
JBPM4_ID_USER 用户表
JBPM4_JOB 定时表
JBPM4_LOB 存储表
JBPM4_PARTICIPATION 参与者表
JBPM4_SWIMLANE 泳道表
JBPM4_TASK 任务表
JBPM4_VARIABLE 上下文表
红色的表为经常使用的表.这里不使用JBPM自己的权限角色定义.
发布一个流程deploy后
jbpm4_deployment新增一条记录
jbpm4_deployprop新增三条记录
jbpm4_lob新增一条记录
开始一个流程startProcessInstanceByKey后
jbpm4_execution新增一条记录
jbpm4_hist_actinst新增一条记录
jbpm4_hist_procinst新增一条记录
jbpm4_hist_task新增一条记录
jbpm4_task新增一条记录
流程定义相关的布署信息就存储在(1) JBPM4_DEPLOYMENT、(2) JBPM4_DEPLOYPROP 及(3) JBPM4_LOB 中。上传一个包含png和jpdl.xml的zip包后,JBPM4_DEPLOYMENT多一条记录 JBPM4_DEPLOYPROP多三条, JBPM4_LOB多两条。
(4)J B PM4_HIST_PROCINST 与(5) JBPM4_HIST_ACTINST 分别存放的是Process Instance、Activity Instance的历史记录。
(6)JBPM4_EXECUTION 主要是存放JBPM4的执行信息,Execution机制代替了JBPM3的Token机制(详细参阅JBPM4的PVM机制,过段时间我也会进一步分析)。
(7)JBPM4_TASK 存放需要人来完成的Activities,需要人来参与完成的Activity 被称为Task。
(8)JBPM4_PARTICIPATION 存放Participation的信息,Participation的种类有Candidate、Client、Owner、 Replaced Assignee和Viewer。而具体的Participation既可以是单一用户,也可以是用户组。
(9)JBPM4_SWIMLANE。 Swim Lane是一种Runtime Process Role。通过Swim Lane,多个Task可以一次分配到同一Actor身上。
(10) JBPM4 _VARIABLE 存的是进行时的临时变量。
(11) JBPM4_HIST_DETAIL 保存Variable的变更记录。
(12)JBPM4_HIST_VAR 保存历史的变量 。
(13) JBPM4_HIST_TASK Task的历史信息。
(14)JBPM4_ID_GROUP (15)JBPM_ID_MEMBERSHIP (16)JBPM4_ID_USER 这三张表很常见了,基本的权限控制,关于用户认证方面建议还是自己开发一套,JBPM4的功能太简单了,使用中有很多需要难以满足。
(17) JBPM4_JOB 存放的是Timer的定义。
一个人不可能独立地在社会中生活,人与人之间的合作是我们社会生存和发展的动力,也是个人实现自我价值和奋斗目标的前提。随着当今时代社会化大生产的趋势日见其深,“同事”一词的作用和内涵也远远超出了前些年的范畴。那些善于处理同事关系,巧妙赢得同事支持的人总能使“芝麻开门”的咒语处处灵验,而那些自面清高,不屑或者根本不会与同事“周旋”、来往的人,则免不了时时被动挨打,举步维艰。越来越多长久深陷于同事圈儿,早已习惯成自然的人们突然顿悟:若想在事业上获得成功,在工作中得心应手,就不得不深谙同事间相处的学问。
不要显示优越性
如果你要得到仇人,就表现得比你的朋友优越吧;如果你要得到朋友,就让你的朋友表现得比你优越。
――(法)罗西法古
日常工作中不难发现这样的同事,其人虽然思路敏捷,口若悬河,但一说话就令人感到狂妄,因此别人很难接受他的任何观点和建议,这种人多数都是因为太爱表现自己,总想让别人知道自己很有能力,处处想显示自己的优越感,从而能获得他人的敬佩和认可,结果却往往势得其反,失掉了在同事中的威信。
在心理交往的世界里,人与人之间理应是平等和互惠的,正所谓“投之以桃,报之以李”。那些谦让而豁达的人们总能赢得更多的朋友,天天门庭若市,日日高朋满座。相反,那些妄自尊大,高看自己,小看别人的人总会引得别人的反感,最终在交往中使自己走到孤立无援的地步,别人都敬而远之,甚至厌而远之。
在交往中,任何人都希望能得到别人的肯定。性评价,都在不自觉地强烈维护着自己的形象和尊严,如果他的谈话对手过分地显示出高人一等的优越感,那么无形之中是对他自尊和自信的一种挑战与轻视,排斥心理、乃至敌意也就不自觉地产生了。
法国哲学家罗西法古说:“如果你要得到仇人,就表现得比你的朋友优越吧;如果你要得到朋友,就要让你的朋友表现得比你优越。”
这句话真是没错。因为当我们的朋友表现得比我们优越时,他们就有了一种重要人物的感觉,但是当我们表现得比他还优越,他们就会产生一种自卑感,造成羡慕和嫉妒。
我的一个好朋友是某地区人事局调配科一位相当得人缘儿的骨干,按说搞人事调配工作是很难不得罪人的,可他却是个例外。当然,这也是吃了一番苦头才获得的。在他刚到人事局的那段日子里,几乎在同事中连一个朋友都没有。因为他正春风得意,为自己的机遇和才能满意得不得了。因此每天都使劲吹嘘他在工作中的成绩,每天有多少人找他请求帮忙,哪个几乎记不清名字的人昨天又硬是给他送了礼……等等“得意事”,但同事们听了之后不仅没有人分享他的“成就”,而且还极不高兴,后来还是由当了多年领导的老父亲一语点破,他才意识到自己的症结到底在哪里。从此开始很少谈自己而多听同事说话,因为他们也有很多事情要吹嘘,把他们的成就说出来,远比听别人吹嘘更令他们兴奋。后来,每当他有时间与同事闲聊的时候,他总是先请对方滔滔不绝地把他们的欢乐炫耀出来,与其分享,而只是在对方问他的时候,才谦虚地说一下自己的成就。
德国有这样一句谚语说:“最纯粹的快乐,是我们从别人的麻烦中所得到的快乐。”这话虽然听起来似乎有些残酷,但仔细琢磨一下竟也不无道理。是的,很多人,甚至包括我们自己在内,从别人的麻烦中得到的快乐,极可能比从自己的胜利中得到的快乐大得多。也许,这正是人性本身的劣根性,然而却是难以克服的劣根性。
因此,我们对自己的成就要轻描淡写。我们必须学会谦虚,这样的话,我们才能永远受到欢迎。要知道,从彻头彻尾的本质上讲,谁都不比谁更优越,百年之后,今天的一切也许就被忘得一干二净了。生命如白驹过隙,不要在别人面前大谈我们的成就和不凡。对此戴尔?卡耐基曾有过一番相当精彩的论述:“你有什么可以炫耀的呢?你知道是什么东西使你没有变成白痴的吗?其实不是什么大不了的东西,只不过是你甲状腺中的碘罢了,价值才五分钱。如果医生割开你颈部的甲状腺,取出一点点的碘,你就变成一个白痴了。五分钱就可以在街角药房中买到的一点点的碘,是使你没有住在病人院的东西。价值五分钱的东西,有什么好谈的?”
学会先说“是我错”
即使傻瓜也会为自己的错误辩护,但能承认自己错误的人,更会获得他人的尊重,而且有一种高贵怡然的感觉。
――戴尔?卡耐基
人无完人,没有人会不犯错误,有时甚至还一错再错。既然错误是不可避免的,那么可怕的并不是错误本身,而是怕知错不肯改。错了也说不悔过。
其实如果能坦诚面对自己的弱点和错误,再拿出足够的勇气去承认它,面对它,不仅能弥补错误所带来的不良后果,在今后的工作中更加谨慎端正,而且能加深领导和同事对你的良好印象,从而很痛快地原谅你的错误。
某公司财务处小李一时粗心,错误地给一位请病假的员工发了全薪。在他发现这项错误之后,首先想到的是最好想办法蒙混过去,千万别让老板知道,否则肯定会对他的办事能力有所怀疑。于是他匆匆找到那位员工,说必须纠正这项错误,求他悄悄退回多发的薪金。但遭到断拒绝,理由是公司给发多少就领多少,*是你们愿意给,又不是我要的,白给谁不要?”小李很气愤,他明白这位员工是故意拿他一把,因为他肯定不敢公开声张,否则老板必然知道。真是乘人之危。气愤之余的小李平静地对那位员工说:“那好,既然这样,我只能请老板帮忙了。我知道这样做一定会使老板大为不满,但这一切混乱都是我的错,我必须在老板面前承认。”就在那位员工还站在那里发呆的时候,小李已大步走进了老板的办公室,告诉他自己犯了一个错误,然后把前因后果都告诉了他,并请他原谅和处罚。老板听后大发脾气地说这应该是人事部门的错误,但小李重复地说这是他自己的错误,老板于是又大声地指责会计部门的疏忽,小李又解释说不怪他们,实在是他自己的错,但老板又责怪起与小李同办公室的另外两个同事起来,可小李还是固执地一再说是他自己的错,并请求处罚。最后老板看着他说:“好吧,这是你的错,可×××(那位错领全薪的员工)那小子也太差劲了!”这个错误于是很轻易地纠正了,并没给任何人带来麻烦。自那以后,老板更加看重小李了,因为他能够知错认错,并且有勇气不寻找借口推脱责任。
事实上,一个人有勇气承认自己的错误,也可以获得某种程度的满足感。这不仅可以消除罪恶感和自我保护的气氛,而且有助于这项错误所制造的问题。卡耐基告诉我们,即使傻瓜也会为自己的错误辩护,但能承认自己错误的人,就会获得他人的尊重,而且有一种高贵抬然的感觉。
喜欢听赞美,哪怕明知是虚伪的赞美是每个人的天性。忠言逆耳,当有人、尤其是和自己平起平坐的同事对着自己狠狠数落一番时,不管那些批评如何正确,大多数人都会感到不舒服,有些人更会拂袖而去,连表面的礼貌功夫也不会做,实在令提意见的同事尴尬万状。下一次就算你犯更大的错误,相信也没有人敢劝告你了,这岂不是你最大的损失?
如果你总是害怕向别人承认自己曾经犯错,那么,请接受以下这些建议:
①即便错了,也不要自责太深,更毋须自怨自艾,轻看自己。你应当把这次犯错当作一种新经验,从中吸取教训,获得智慧,吃一堑,长一智。
②假若你的错必须向别人交代,与其替自己找借口逃避责难,不如勇于认错,在别人没有机会把你的错到处宣扬之前,对自己的行为负起一切的责任。
③如果你在工作上出锗,要立即向领导汇报自己的失误,这样当然有可能会被大骂一顿,可是上司的心中却会认为你是一个诚实的人,将来或许对你更加倚重。你所得到的可能比你失去的还多。
④如果你所犯的错误可能会影响到其它同事的工作成绩或进度时,无论同事是否已经发现这些不利影响,都要赶在同事找你“兴师问罪”之前主动向他道歉、解释,千万不要企图自我辩护,推卸责任,否则只会火上浇油,令对方更感愤怒。
如果你总是觉得听到人家指出自己的错误,是一种耻辱,令你面红耳赤,无地自容,以下这些建议或能帮你克服这种心理障碍,慢慢懂得从批评中吸取教训:
①要明白,别人对你的批评并无损你的价值,无须一概以敌视的态度对待意见与你相左的人。
②如果别人对你的工作表现,颇有微言,你要知道人家是针对事情发出意见,而不是故意与你做对,或者瞧不起你。
③切勿把“我的工作不被接受‘理解为’我不被接受。”
每个人都会犯错误,尤其是当你精神不足,工作过重,承受太沉重的生活压力时,偶尔不小心犯错是很普通的事情。人们在犯错后能以正确的态度面对它,错而能改,犯错便不算什么罪大难饶的事情,反而对于你日后的工作,升迁大有弊益。
人人最爱是面子
你希望别人怎样对待你,你就应该怎样对待别人。
――《圣约?马太福音》
聪明人在与同事交往的过程中,从不会把话说死,说绝,说得自己毫无退路可走。例如“我永远不会办你所搞砸的那些愚事。”“谁像你那么不开窍,要我几分钟就做完了。”“你跟XX一样缺心眼儿,看他那巴结相。”如此种种,估计谁听了都不会痛快,人人都最爱惜自己的面子。而这样绝对的断言显示是极不给人面子的一种表现。
汤姆?韦思原先在电气部门的时候,是个一级天才,但后来调到计算部门当主管后,却被发现非其所长,不能胜任。但公司当局不愿伤他自尊,毕竟他是个不可多得的人才――何况他还十分敏感。于是,当局给了他新头衔:奇异公司咨询工程师――工作性质仍与原来一样――而让别人主管那个部门。
此事汤姆很高兴。
奇异公司当局也很高兴,因为他们终于把这位易怒的明星遣调成功,而没有引起什么风暴――因为他仍保留了面子。
保留他人的面子!这是何等重要的问题!而我们却很少会考虑到这个问题。我们常喜欢摆架于、我行我素、挑剔、恫吓、在众人面前指责同事或下属,而没有考虑到是否伤了别人的自尊心。其实,只要多考虑几分钟,讲几句关心的话,为他人设身处地想一下,就可以缓和许多不愉快的场面。
《圣经?马太福音》有句话:“你希望别人怎样对待你,你就应该怎样对待别人。”这句话被大多数西方人视作是工作中待人接物的“黄金准则。”真正有远见的人不仅要在与同事一点一滴的日常交往中为自己积累最大限度的“人缘儿”,同时也会给对方留有相当大的回旋余地。给别人留面子,其实也就是给自己挣面子。言谈交往中少用一些“绝对肯定”或感情色彩太强烈的语言,而适当多用一些“可能”、“也许”、“我试试看”和某些感情色彩不强烈,褒贬意义不太明确的中性词,以便自己“伸缩自如”是相当可取的。
汤姆和乔治原来是很好的同事和朋友,可最近却关系紧张,大有“割袍断义”之势。不明真相的人以为他们之间肯定是发生了天大的事情。否则形影相随的两个人绝不至于搞成这个样子。,可事实上远没有那么严重,他们只是为了一只钮扣而己,一只最多价值几分钱的钮扣。乔治新近买了一套非常满意的高档西服,却刚穿不到一周就丢了一只关键部位的钮扣,惋惜之余偶然发现整日挂在洗手间的那件不知是哪位清洁工的工作服上的扣子,与自己丢失的纽扣简直如出一辙,遂乘人不备悄悄地扯下了一粒,打算缝到自己的衣服上滥竿充数,并得意地将此“妙计”告诉了汤姆。不料未出数日,多数同事都知道了乔治的这个笑料――汤姆竟然在大庭广众之下拿这件事跟乔治开玩笑,弄得当时在场的人都笑做一团,而乔治也终因太没面子而恼羞成怒,反唇相讥,大揭汤姆的许多很令其丢面子的“底牌”,于是乎后果也就不得而知了。
人人都有自尊心和虚荣感,甚至连乞丐都不愿受嗟来之食,因为太伤自尊、太没面子,更何况是原本地位相当,平起平坐的同事。但很多人却总爱扫别人的的兴――当面令同事面子难保,以致当面撕破脸皮,因小失大。
纵使别人犯错,而我们是对的,如果没有为别人保留面子就会毁了一个人。
“红人”原本是“俗人”
永远不要同“红人”争道,那些人都是魔鬼。
――一位父亲给儿子的忠告
几乎所有的上班族都有过这样的牢骚和困惑:瞧××那小子,典型一个“哈巴狗”,见了上司那副点头哈腰的丑态,实在让人看不惯,可这样的人又偏偏“红极一时”,这世界怎么就总是“小人得势”?我到底要不要与上司的“红人”斗?不斗吧,他实在是仗势欺人,显得自家懦弱;斗吧,又怕自己丢官弃职,得不偿失。真是左右为难,大伤脑筋。
1996年最得人心的一部电视连续剧《宰相刘罗锅》引起了千千万万观众的共呜,很多人都深感在戏中找到了自己的种种“心酸”体会,看到了自己升迁路上的艰辛和无奈。虽说刘罗锅的时代早已烟消云散了,但今天这个社会里,象乾隆那样的领导又何尝少见,即便再精明能干、刚愎自用,却仍然喜欢听奉承话,喜欢有人能替他在做了些“有失身份”或“影响形象”的小事之后,大唱赞歌,大拍马屁。而这种本事又并非人人都有。可悲的是,每个组织里到底还能找到这种“奇才”;可叹的是,逢迎拍马如和?的人却偏偏官运亨通,这些人最精通怎样才能成为上司的心腹。
一位苦心经营却始终在官场上毫无建树的父亲在退休的那一天忠告他的儿子:“永道不要和红人争道,那些人都是魔鬼。”
然而刘罗锅却在剧中与和?斗了一辈子,思恩怨怨、沉沉浮浮,其间的复杂与微妙又岂是一句简单的“好人斗坏人、好人必胜,坏人必败”所能注释得清的?
其实“红人”原本是常人,更是俗人。他们之所以能成为领导的心腹,则定然是有其过人之处,同这样的同事相处,一味退让或一味攻击都不是上策,最聪明的办法应该是在吸收。欣赏对方优点的前提下与其推心置腹的交流、沟通。体谅对方的苦衷也是各种沟通的关键。试想:这些红人通常没有自我,靠着卑躬屈膝,谨慎做事过日子,辟如和?大人,也属实是不容易的。
同时也应该意识到:“心腹红人”们通常是“心”思细、“心”机重,和他们讲话得多点心眼。最好只是守着自己的专业和工作本分来说,只谈事不谈人。而且心腹的“腹”事实很小,绝没有“宰相肚里能撑船”那种大度和雅量。因此任何带刺的话千万别说,否则对方定会记仇,弄不好违会放支暗箭伤害你。“心腹”、“红人”多半都长了一双四面八方都环顾得到的利眼,往往能抓住细节不放,喜欢从鸡蛋里挑骨头。所以多谈些天马行空、救国救民的言词,而少讲细节、少谈个人。这样才不至于留下话柄,被“红人”抓了小辫子。
“保持距离,以策安全”尤其是适用于与红人交往的情势中,必竟他的权力是依附在某个上司身上,而这个上司又未必能一直有权有势,更未必只他一个红人,一直单单信赖他,所谓“人无千日好,花无百日红”,一旦大树轰然倒地,昔日“红人”不再受宠,那么与他交往过密的人岂不要连带遭殃?何况红人一般都手快脚快,动作麻利,若我们搞得比他还快,则定会招忌,恐怕还是拙嘴笨舌,行动谨慎些为妙。
那么到底要不要和“红人”斗呢?恐怕首先要看你是不是“刘罗锅”,有没有那过人的才智和生来就“身弯心不弯”的本事。然后还要看你的上司是否比“乾隆”更正直,有无可能做到“亲贤臣、远小人”?第三还要想一下与“红人”争道是为大局,为工作好,还是仅仅想为自己出口怨气。否则,就不必吃力不讨好,自费心机了。
帮人就是帮自己
天底下只有一个办法可以影响别人,就是想到别人的需要,然后热情地帮助别人,满足他们的需要。
――(法)卢梭
查尔斯是纽约一家大银行的秘书,奉命写一篇有关欲吞并另一小银行的可行性报告,但事关机密,他知道只有一个人可以帮助他拥有他非常需的那些资料――那人曾在那家银行效力了十几年,不久前他们变成了同事。于是查尔斯找到了这位同事,请他帮忙。当他走进这位叫做威廉?华特尔的同事的办公室时,华特尔先生正在接电话,并且很为难地说:“亲爱的,这些天实在没什么好邮票带给你了。”
“我在为我那12岁的儿子搜集邮票。”华特尔解释道。
查尔斯说明了他的来意,开始提出问题。但也许是华特尔对他过去的组织感情颇深吧,竟不很愿意合作。因此说话含糊、概括、模棱两可。他不想把心里的话说出来,无论怎样好言相劝都没有效果。这次见面的时间很短,没有达到实际目的。
起初查尔斯很是着急,不知该怎么办才好。情急之中突然想起华特尔为他儿子搜集邮票的事情……并也想起他的一个朋友在航空公司工作,一度喜欢搜集世界各地的邮票……
第二天一早,查尔斯带了一些以一顿法式大餐为代价换来的精美邮票,坐到了华特尔的办公桌前――他满脸带着笑意,客气得很。“我的乔治将会喜欢这些,”他不停地说,一面抚弄着那些邮票。“瞧这张,这是一张无价之宝。”
于是他们花了一个小时谈论邮票,瞧瞧他儿子的照片,然后他又花了一个多小时,把查尔斯所想要知道的资料都说了出来――查尔斯甚至都没有提议他那么做,他把他所知道的,全都说了出来。而且还当即打电话给他以前的一些同事,把一些事实、数字、报告和信件中的相关内容,全部告诉了查尔斯。“帮人最终帮自己”,这成了查尔斯后来一直信奉不疑的真理。
日常的工作生活中,同事之间免不了互相帮帮忙。平常我们总说“助人为乐,”但是在办公室这个没有硝烟的战场上,怎样助人为乐才能真正既帮了别人的忙又帮了自己的忙呢?
当一个同事请你提意见,如何是好呢?诸如“你认为我的工作态度不对吗?”“是不是我不该以那种方式处理同老安的矛盾!”这些问题当然都不易处理,却也给了你一个帮助对方进步和表现气度的机会。最愚蠢的回答就是直接答“是”或“不是”,而应有一些建设性,也就是说你应该提议一个可行办法而不会被误为批评。因为要是你的答案不能令对方畅快,他肯定不会接受你的意见,甚至认为你是敷衍他,白白辜负了他对你的信任。正确的做法是,告诉你的同事,如果换了是你,会怎样处理这件事,为什么?例如他因为未能准时预备开会用的文件,遭到领导责备,就应婉转开解他;“大家谁都知道李主任那人认真得很,所以我替他做事永远都是以最快的时间去完成,并且认真得很,使他知道我的确已经尽力去符合他的要求了。”千万不要跟着附和,指责对方或其他领导的错处!“李主任真是过份,你也只能按他的摆布去做了。”这样无异于火上浇油,对同事,对他的领导,甚至你自己,肯定都没好处,那又何苦为之呢?
当然,要表示你的关切,这跟其它人际关系一样,必须是诚挚的。这不仅使得付出关切的人有些成果,接收这种关切的人也是一样。它是条双向道,当事人双方都会受益。
努力学会为别人效力,做那些不惜花时间、精力和诚心诚意为别人设想的事情,这样才能获得真正的帮助。
中国有句古话:“有心栽花花不发,无心插柳柳成荫。”往往有时候一些原本并没有在意回报的帮助,能带给你意想不到的惊喜和幸运。
笑脸不会遭耳光
没有人会拒好意于千里之外。
――(台)罗兰
上班的日子里好多人都遇到过这样的尴尬:刚刚换到一个新的工作岗位上,总会感到万分别扭,战战兢兢,对很多事情都是既新鲜,又提防,总想尽快磨合,适应新环境,可是一些资深的同事却是对你带理不理。甚至在一些事情上还故意跟你做对,使你觉得简直无所适从,可又别无选择。谁让他们是你的同事呢?不跟他们好好合作,讨好近乎,今后简直难以工作。
该如何面对这种处境呢?最好不要再寄希望于对方向你伸出援手,哪怕自己多辛苦些,延长点工作时间,也不要想尽办法要求对方的帮忙,否则弄不好还会弄巧成拙,徒添烦恼。
另外,在未断定对方是老油条,或是一个无可救药的人以前,可以尝试着去了解对方的难言之隐,如能化敌为友,说不定还会有意想不到的收获。同时还应们心自问,无法与对方精诚合作的原因,究竟出在对方,还是自己的身上?自己是不是也应该负一点责任,去努力营造愉快融洽的气氛?要知道这些笑脸与人和平相处的技巧,可是日后事业成败的关键。
与同事相交,应本乎诚,当他需要你的意见时,不要使劲给他戴高帽,做无意义的赞叹;而当他遇到任何工作中的困难时,要尽力而为伸出援助之手,而不是冷眼旁观,落井下石,甚至乘人之危;当同事无意中冒犯了你,又忘记或根本没意识到说声“Im sorry”时,也应该有一个宽宏、豁达的心情,真心真意原谅他,日后一旦要有求于你,还要毫不犹豫地帮助他。
那么,明明是自己有理,“为什么还要待他这么好?”原因很简单,因为他是你的同事,你不能够得理就不饶人,毕竟你每天有三分之一的时间与同事相厮守,你能否从工作中获得快乐与满足,是否被人称为敬业乐业,同事们扮演着一个很重要的角色。试想:“如果清晨你满怀热情地冲进办公室,准备今天大干一场时,竟发现人人对你视若无睹,谁都不愿主动与你说话,更不会有人与你倾吐工作中的苦与乐,你还会有心情好好工作吗?当然没有!因为你现只想知道:为什么?
就让我来告诉你。
首先,是因为当大家趁着上司不在,聚在一起聊天的时候,你仍然自命清高地宁愿去做自己的工作,从来不走过去参与其中,开上一些无伤大雅的玩笑或谈些家务琐事。
其次,是因为你很不负责地随便把同事告诉你的话转告了上司,大家岂能不提防你?
还有,你忘了,经常有同事在你面前有意无意地表示自己有多能干,有多受上司的宠幸,你不但从不称赞,祝贺他们,还总是显出一副不以为然并颇带妒忌的样子。
再有……
同事,同事,要的就是相互合作,共同做事,而要合作愉快,就贵在和善、真诚,如果始终心存芥蒂,又寸利不让,就只会最终弄得成事不足,败事有余。
小王和小李大学毕业后分到了同一家单位,同一个科室的同一个办公室,两年来一直焦不离赞,赞不离焦,协作搞了许多工作,是一对“黄金搭挡”,领导对他二人都十分满意。可不久前上边公布的升职名单里却只有小李而没有小王。从平起平坐,不相伯仲的同事、搭挡,到突然地位忽变,一个要服从另一个的上下级的关系,实在今小王心中愤愤难平,仿佛一盆冷水浇达全身。见了小李不仅别扭起来,而且越想越不服气,再加上其它同事的同情和“关心”,令小王痛苦之极,继而就是对小李的一股明显的敌意。
对此小李并非全无知晓,却并没有在意小王的敌视情绪,甚至一些冷嘲热讽,对同事们的恭贺和夸赞也表现得极为冷淡,到处散播“其实小王工作能力比我强,只是不善表现自己,才让我得了这个便宜”的舆论。并且在工作中还像以前那样,该干什么都抢着干了,而且还不时客气地问小王是否需要他帮忙。
所有这一切都令小王十分感动,也终于服气了领导为什么就没看上他,也许就是没有这个度量和胸怀吧!于是满腔的愤慨和不平都渐渐消退,自己也终于得到了平衡。两人的关系又回到了当初的友好、和谐状态,后来才知道竟然有人还曾想借此事无中生有,离间他俩的关系,以达到个人目的,真是好险。
巴掌不打笑脸,多以笑脸待人就能赢得友谊、理解和发展,化干戈为玉帛。“没有人喜欢挨耳光,没有人会拒好意于千里之外,”这话真是再英明不过了。 (来源:孙莉文集)