??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲精品国产精品乱码在线观看,国产国拍亚洲精品mv在线观看,亚洲精品国产自在久久http://www.tkk7.com/hongqiang/archive/2012/08/16/385633.html张慧张慧Thu, 16 Aug 2012 14:26:00 GMThttp://www.tkk7.com/hongqiang/archive/2012/08/16/385633.htmlhttp://www.tkk7.com/hongqiang/comments/385633.htmlhttp://www.tkk7.com/hongqiang/archive/2012/08/16/385633.html#Feedback0http://www.tkk7.com/hongqiang/comments/commentRss/385633.htmlhttp://www.tkk7.com/hongqiang/services/trackbacks/385633.html
需求大致分ZU:(x)
1.震动
2.pȝxQ无需提供音频文gQ?/span>
3.自定义音效(需提供音频文gQ?/span>
我的工具cȝ装Q?/span>

  1. //  
  2. //  WQPlaySound.h  
  3. //  WQSound  
  4. //  
  5. //  Created by 念茜 on 12-7-20.  
  6. //  Copyright (c) 2012q?nbsp;__MyCompanyName__. All rights reserved.  
  7. //  
  8.   
  9. #import <UIKit/UIKit.h>  
  10. #import <AudioToolbox/AudioToolbox.h>  
  11.   
  12. @interface WQPlaySound : NSObject  
  13. {  
  14.     SystemSoundID soundID;  
  15. }  
  16.   
  17. /** 
  18.  *  @brief  为播N动效果初始化 
  19.  * 
  20.  *  @return self 
  21.  */  
  22. -(id)initForPlayingVibrate;  
  23.   
  24. /** 
  25.  *  @brief  为播攄l音效初始化(无需提供音频文g) 
  26.  * 
  27.  *  @param resourceName pȝx名称 
  28.  *  @param type pȝxcd 
  29.  * 
  30.  *  @return self 
  31.  */  
  32. -(id)initForPlayingSystemSoundEffectWith:(NSString *)resourceName ofType:(NSString *)type;  
  33.   
  34. /** 
  35.  *  @brief  为播攄定的音频文g初始化(需提供音频文gQ?nbsp;
  36.  * 
  37.  *  @param filename 音频文g名(加在工程中) 
  38.  * 
  39.  *  @return self 
  40.  */  
  41. -(id)initForPlayingSoundEffectWith:(NSString *)filename;  
  42.   
  43. /** 
  44.  *  @brief  播放x 
  45.  */  
  46. -(void)play;  
  47.   
  48. @end  


  1. //  
  2. //  WQPlaySound.m  
  3. //  WQSound  
  4. //  
  5. //  Created by 念茜 on 12-7-20.  
  6. //  Copyright (c) 2012q?nbsp;__MyCompanyName__. All rights reserved.  
  7. //  
  8.   
  9. #import "WQPlaySound.h"  
  10.   
  11. @implementation WQPlaySound  
  12.   
  13. -(id)initForPlayingVibrate  
  14. {  
  15.     self = [super init];  
  16.     if (self) {  
  17.         soundID = kSystemSoundID_Vibrate;  
  18.     }  
  19.     return self;      
  20. }  
  21.   
  22. -(id)initForPlayingSystemSoundEffectWith:(NSString *)resourceName ofType:(NSString *)type  
  23. {  
  24.     self = [super init];  
  25.     if (self) {  
  26.         NSString *path = [[NSBundle bundleWithIdentifier:@"com.apple.UIKit"] pathForResource:resourceName ofType:type];  
  27.         if (path) {  
  28.             SystemSoundID theSoundID;  
  29.             OSStatus error =  AudioServicesCreateSystemSoundID((__bridge CFURLRef)[NSURL fileURLWithPath:path], &theSoundID);  
  30.             if (error == kAudioServicesNoError) {  
  31.                 soundID = theSoundID;  
  32.             }else {  
  33.                 NSLog(@"Failed to create sound ");  
  34.             }  
  35.         }  
  36.           
  37.     }  
  38.     return self;  
  39. }  
  40.   
  41. -(id)initForPlayingSoundEffectWith:(NSString *)filename  
  42. {  
  43.     self = [super init];  
  44.     if (self) {  
  45.         NSURL *fileURL = [[NSBundle mainBundle] URLForResource:filename withExtension:nil];  
  46.         if (fileURL != nil)  
  47.         {  
  48.             SystemSoundID theSoundID;  
  49.             OSStatus error = AudioServicesCreateSystemSoundID((__bridge CFURLRef)fileURL, &theSoundID);  
  50.             if (error == kAudioServicesNoError){  
  51.                 soundID = theSoundID;  
  52.             }else {  
  53.                 NSLog(@"Failed to create sound ");  
  54.             }  
  55.         }  
  56.     }  
  57.     return self;  
  58. }  
  59.   
  60. -(void)play  
  61. {  
  62.     AudioServicesPlaySystemSound(soundID);  
  63. }  
  64.   
  65. -(void)dealloc  
  66. {   
  67.     AudioServicesDisposeSystemSoundID(soundID);  
  68. }  
  69. @end  


调用Ҏ(gu)步骤Q?br />1.加入AudioToolbox.framework到工E中
2.调用WQPlaySound工具c?br />

2.1震动

  1. WQPlaySound *sound = [[WQPlaySound alloc]initForPlayingVibrate];  
  2. [sound play];  

2.2pȝxQ以TockZ

  1. WQPlaySound *sound = [[WQPlaySound alloc]initForPlayingSystemSoundEffectWith:@"Tock" ofType:@"aiff"];  
  2. [sound play];  

2.3自定义音效,tap.aif音频文g加入到工E?/span>

  1. WQPlaySound *sound = [[WQPlaySound alloc]initForPlayingSoundEffectWith:@"tap.aif"];  
  2. [sound play];  

tap.aif音频文g样例下蝲点击



张慧 2012-08-16 22:26 发表评论
]]>
UML建模之状态图http://www.tkk7.com/hongqiang/archive/2012/08/08/385092.html张慧张慧Wed, 08 Aug 2012 15:38:00 GMThttp://www.tkk7.com/hongqiang/archive/2012/08/08/385092.htmlhttp://www.tkk7.com/hongqiang/comments/385092.htmlhttp://www.tkk7.com/hongqiang/archive/2012/08/08/385092.html#Feedback0http://www.tkk7.com/hongqiang/comments/commentRss/385092.htmlhttp://www.tkk7.com/hongqiang/services/trackbacks/385092.html 状态图主要描述一个对象在其生命周期内的状态变化,对象׃仉动ƈ满一定的条g从一个状态{换到另一个状态。状态图昄了一个状态机?/span>


下面是一个表C借书的状态图Q描qC的状态{换)



状态图都由哪些元素l成呢?

一、初始状?/span>


      初始状态是状态机的v始位|,它不需要事件的触发?span style="color: #ff0000; ">一个状态图只能有一个初始状态?/span>状态图L以初始状态开始,以终止状态结?/span>

二、状?/span>


状态是对象执行某项zd或等待某个事件时的条件。状态可以由以下几部分组成:(x)

1、NameQ状态名U?/span>
2、Entry/Exit ActionQ进入和退出动?/span>
3、Internal TransitionQ内部{U(对事件作出响应,执行一定的动作Q但不会(x)发生状态的转换Q?/span>
4、DoQ状态保持不变时执行的动?/span>
5、SubStageQ子状态(当状态是复合状态时Q?/span>
6、Deferred EventQgq事Ӟ未在本状态中处理Q但不被丢弃Q而是延迟到其它状态中处理的事Ӟ


下面是一个灯的点燃状态的例子


       如果一个状态比较复杂,那么它还可以拥有子状态,拿上面借书的例子,书的被借状态又可包含两个子状态:(x)被正常借、被l?/span>


三、{U?/span>

      上面已经讲过了一U特D的转移Q内部{U,但是q种转移只是响应一定的事gQ执行一定的动作Qƈ不会(x)攄状态的转移
下面介绍一下一般{Uȝ格式Q?/span>


状态的转移一般由三部分组?/span>

1、eventQ事ӞQ触发状态{Uȝ原因
2、Guard ConditionQ保卫条ӞQ是一个布?yu)(dng)表辑ּQ当事g被触发时要判断保卫条件的|gؓ(f)True才会(x)发生状态的转换
3、ActionQ活动)Q状态{换时执行的活?/span>

下面是一个电(sh)水壶烧水的状态{?/span>


       当事件turn on攄Ӟ只有水壶内有_(d)have waterQ才能由off状态{换到on状态,q发生烧水的动作QBoiling WaterQ。其实动作也可以攑֜on状态中?/span>

四、结束状?/span>



l束状态表C状态机执行l束或对象生命的l结Q?span style="color: #ff0000; ">一个状态图可以有多个结束状?/span>?/span>


      在实际的应用中,不必为每个对象都创徏状态图Q而是只ؓ(f)那些比较复杂的,状态比较多的对象创建状态图。状态图是一U很有用的图Q它可以帮助我们分析复杂对象的状态{换和对象在什么时候执行什么样的动作。网上购物过E中Q我们会(x)l常查看订单的状态,描述订单的状态机是一个比较经典的状态图Q网上有很多关于订单状态图的例子,大家可以查一下,我在q里׃再赘qC?/span>


张慧 2012-08-08 23:38 发表评论
]]>
《时间管理》课E笔讎ͼ一Q?/title><link>http://www.tkk7.com/hongqiang/archive/2012/08/08/385093.html</link><dc:creator>张慧</dc:creator><author>张慧</author><pubDate>Wed, 08 Aug 2012 15:38:00 GMT</pubDate><guid>http://www.tkk7.com/hongqiang/archive/2012/08/08/385093.html</guid><wfw:comment>http://www.tkk7.com/hongqiang/comments/385093.html</wfw:comment><comments>http://www.tkk7.com/hongqiang/archive/2012/08/08/385093.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.tkk7.com/hongqiang/comments/commentRss/385093.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/hongqiang/services/trackbacks/385093.html</trackback:ping><description><![CDATA[<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-family: FangSong_GB2312; font-size: 18px; ">1. Z么要旉理    曄有过q样一个报道:(x)有一名记者随机采访了几个人,问了q样一个问题:(x)<br />    你认Z的时间是p己来掌控的吗Q得到的回答却是q样的:(x)<br />    如今各种竞争如此Ȁ烈,能拉C个客户不Ҏ(gu)Q只要客户一个电(sh)话,我就马上要出玎ͼ我的旉完全由客h控?br />    我只不过是一名普通的职员,ȝl我安排什么我做什么。自己掌控时_(d)Q等我当了经理再说吧?br />    我L有忙不完的工作,哪还来得?qing)自己安排时_(d)别开玩笑了?br />    在这样一个信息爆炸的C会(x)里,我不抓紧旉充电(sh)׃(x)落后了,现在是时间在控制我啊Q?br />    怿你对q个问题?x)有自己的见解,但是仔细x你的{案是否跟他们的很类似呢Q像他们一P也有q样的困惑或是感受呢Q之所以有q样的困惑,有一个最主要的因素在影响着我们Q这个因素是什么呢Q?br />    职位Q竞争?旉Q?br />    每个人的旉L不够用,Z渴望扑ֈ一U灵丹妙药,d改变自己旉不够用的局面。你是否也是q里的一员呢Q?/span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-family: FangSong_GB2312; font-size: 18px; ">2. 概述    旉是一U资源,我们无法对它q行买卖Q不可能与别人分享或是从别h那里获得Q也不可能得到更多或是拥有更?br />    每天Q我们每一个h都拥有相同数量的旉——24时Q差别在于我们用它来做什么。之所以每个h?x)有U种的困惑,I其原因Q是因ؓ(f)大多Ch在时间的理上存在着很多误区Q只有消除这些误区,才有可能让我们把旉理得更好、更有效?br />    我们现在׃起去看看q些误区都是什么样的吧Q?/span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-family: FangSong_GB2312; font-size: 18px; ">3. 误区展示    当你的工作中出现问题Ӟ你认为是什么原因造成的?<br />    无论Q你的实际情冉|怎么L(fng)Q往往我们都忽略了一个最关键的问题,那就?#8220;旉”?br />    因ؓ(f)旉的不充而没来得?qing)做q个或是做那个,D最后的l果L不尽如h意。所以,每个人在旉理上都或多或少存在一定的问题Q这也是接下来我们要解决的问题。请点击下一吧?/span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-family: FangSong_GB2312; font-size: 18px; ">4. 反?nbsp;   q个世界上根本不存在“没时?#8221;q回事?br />    如果你跟很多ZP也是因ؓ(f)“太忙”而没旉完成自己的工作的话,那请你一定记住,在这个世界上q有很多人,他们比你更忙Q结果却完成了更多的工作。这些hq没有比你拥有更多的旉Q他们只是学?x)了如何更好地利用自q旉而已Q有效的利用旉是一Uh人都可以掌握的技?#8212;—像开车一栗?br />    因此Q希望大家能通过q门评的学?fn),在今后的生活中有效的珍惜旉Q而一旦把握好旉Q你掌握了自己的生命,q能够将其h(hun)值发挥到极限?/span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-family: FangSong_GB2312; font-size: 18px; ">5. 旉理评概述    在本评中,通过四个斚w的内容帮助你更好的掌握自q旉Q而不是成为时间的奴隶Q从而让你实现自q人生目标?br />    首先Q我们要谈谈人生目标Q也是我们׃旉都做了些什么,比如你想成ؓ(f)什么样的hQ你来要达CU什么样的成q?br />    W二、当你有了明的人生目标Q那该用什么方法来实现呢,也就是接下来要讲的时间管理的核心思想“旉理矩阵”{?br />    W三、了解了如何理旉Q那么接下来要介l的是怎么来自我管理。如何利用好每一天的旉来帮助我们实Ch生的大目标?br />    最后,是学会(x)利用工具来管理时间?br />    总而言之,对于你来_(d)q个世界上没有Q何东西比旉更加重要了。每个h的时间都是相同的Q我们每个h每个星期都只?68个小Ӟ不可能有更多的时间?br />    q门评可以帮助你更有效的利用这些时间?br />    让我们开始吧Q?/span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-family: FangSong_GB2312; font-size: 18px; ">6. 概述    旉我们无法随意的让它变大或是羃?yu),我们也不能像存钱一h旉储备hQ以备不时之需Q更不能用其它的东西来代替,甚至我们更不能把已经失去的时间像倒带子一P有选择性的倒回来或是快放?br />    因此Q当Z无所事事Q或者忙得晕头{向却不见成效Ӟ应该暂时停下来审视一下自q旉利用效率Q审视一下自己在旉中所处的角色Q寻找一条更为合适的途径Q实现自q目标Q追求自q人生价倹{?br />    在经理h的所有管理技能中Q时间管理最Ҏ(gu)被忽略。初U经理h从员工的岗位q渡到管理者的岗位Q比较容易忽略管理的角色和时间管理的技能,而中、高U管理者的工作旉更忙,工作d更多Q时间效率的理也就昑־更加重要?/span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-family: FangSong_GB2312; font-size: 18px; ">7. 案例    假设一个h的生命中有三枚硬币,W一枚代表胦富,W二枚代表健PW三枚代表时_(d)请问哪一个更重要Q?br />    无论你选择了什么,我们来逐一分析一下吧?/span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-family: FangSong_GB2312; font-size: 18px; ">8. 分析一    q三枚硬币哪个更重要呢?<br />    W一U情况:(x)<br />    通常Z都趋向于q求财富Q如果在q三枚硬币中Q把代表财富的硬币拿掉,则表C个h有够多的健P也有_多的旉Q他有可能重新去创业Q赢得胦富,把代表胦富的币重新放进自己的生命中?br />    你赞成这个说法吗Q?br />    赞成    不赞?br />    无论你选择了什么,我们来看一个实例:(x)<br />    房地产大亨李嘉诚Q相信你一定听说过吧!<br />    17岁独自外出闯荡,l商60多年Q徏立v亚洲最大的商业王国?nbsp;<br />    李嘉诚现在年q八旬仍然精矍铄,思维敏捷。他_(d)(x)“健康好似堤坝一P如果快要崩堤了再做补救,p多少人力物力可能救不回来?#8221;<br />    问到成功U诀Ӟ李嘉诚认为惜时如金,是他的一个成功秘诀Q李嘉诚每天清晨不到6点就起床了,中午不睡午觉Q晚上睡觉前q要看书?br />    李嘉诚认为:(x)在商业竞争中Q你输了Q那么你输在旉Q反之,你赢了,也赢在时间?/span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-family: FangSong_GB2312; font-size: 18px; ">9. 分析?nbsp;   W二U情况:(x)<br />    如果在这三枚币中,把代表健L(fng)币拿掉Q这表示q个人有_多的财富Q也有够多的时_(d)则他可以p无以计数的金钱来ȝ自己的疾病,臛_可以拖g一定的旉Q或借助高科技手段来g长生命,他可能把代表健康的硬币重新放q自q生命中?br />    你赞成这个说法吗Q?br />    赞成    不赞?br />    我想梅艳芛_安听说q吧Q?br />    梅艳x癌后Q每周必L?天的ȝQ光是每个月的医药费高达港?0万,一q下来要p千万港币。她可以用胦富g长自q生命Qƈ用这些有限的生命完成自己最后的心愿Q但是健康依然离她很遥远?/span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-family: FangSong_GB2312; font-size: 18px; ">10. 分析?nbsp;   W三U情况:(x)<br />    如果把代表时间的币拿走Q让一个h没有自己的时间了Q这时候,即他有无数的胦富,有很强壮的n体,可是生命留给他的只有一刚wQ他无法?亿美元去?0分钟Q这好比无数的0前面没有?Q是没有M意义的,他不仅不能将代表旉的硬币重新放q自q人生Q而且财富和健康对他也变得毫无意义了?br />    你赞成这个说法吗Q?br />    赞成    不赞?br />    无论你选择的是什么,旉Ҏ(gu)们确实很重要?br />    大家都知道,U始皇是W一位统一六国q实C文化?qing)货币统一的皇帝?br />    他ؓ(f)了让自己永远E_江山Q就zhdN生不老药。他非常清楚旉是生命Q如果自p永生q于掌握了旉q永q稳坐江山?br />    最l,q是以失败告l。即便他有再多的财富与健L(fng)体魄Q他依然无法实现永生的愿望。因为时间不?x)根据Q何h的愿望而改变?/span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-family: FangSong_GB2312; font-size: 18px; ">11. ȝ    MQ对于所有的人,其是经理h、企业家Q他们有大量的金钱,可是他们感到最~的q是旉Q所以对旉的要求就更高Q这需要良好的旉理。时间管理就是有效地应用旉q种资源以便我们有效地取得个人的重要目标?br />    接下来,p我们一h学习(fn)有关个h目标的内容吧?/span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-family: FangSong_GB2312; font-size: 18px; ">12. 自我旉状态判?nbsp;   学习(fn)了时间管理的重要性和概念Q现在我们一起应用这些知识来分析一下你自己吧!</span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-family: FangSong_GB2312; font-size: 18px; ">13. 拖g商数试    在回{这些问题时Q一斚w是ؓ(f)了让你重新认识一下自己,另一斚wq些可能也是你浪Ҏ(gu)间的原因?br />    现在请做一个测试,看看你做事的拖g情况I竟如何吧?br />    你的拖g情况严重吗?<br />    做事拖gQ会(x)严重费你的旉Q一h看看费旉的因素具体是哪些吧。时间盗|(x)(找东ѝ懒惎ͼ时断时箋Q一个h包打天下Q偶发g误,惋惜不已/做白日梦Q拖拖拉拉,寚w题缺乏理解就匆忙行动Q消极情l,分不清轻重缓?</span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-family: FangSong_GB2312; font-size: 18px; ">14. 结    xQ我们已l了解了旉理的误区有哪些Q以?qing)时间管理的定义、必要性,同时通过试对自己有了新的认识?br />    如果你确认对上述内容已经完全掌握Q就请开始下一章的学习(fn)吧!</span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-family: FangSong_GB2312; font-size: 18px; ">15. 概述  你有人生目标吗?请你试着回答下面的问题:(x)<br />  你现在是把时间真正用在你惛_的事情上了吗Q?br />  你是?#8220;原地t步”吗?<br />  你正在左右ؓ(f)?#8212;—是前q还是放慢脚步,或者正在犹豫不冻I<br />  如果你不能把旉用来dC认ؓ(f)最重要的目标的话,那么你就要对其进行调整。现在请点击下一让我来帮助你一起回{以上这些问题吧?/span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-family: FangSong_GB2312; font-size: 18px; ">16. Z么需要目?nbsp;   Z么要讑֮人生目标呢?<br />    许多人拼命埋头苦qԌ却不知所Z来,到头来却发现q求的梯子搭错了墙,懊?zhn)不已Q只可惜为时已晚Q之所以有的hL很忙,而做的事情却没有太大意义Q就是因Z们没有一个明的目标?br />    你现在处于最理想的状态吗Q?br />    最理想的状态是指,你所做的每g事对你都是有价值的——其h(hun)值在于它U极推动你实现职业上的或是个人生zM的目?#8212;—q些事情都是你希望可以完成的。没有其他h可以替你做决定,你必d明确什么事情对于你来说才是最重要的?br />    需要注意的是,实现目标Q需要一个过E。而在q程中的每一个阶D,都会(x)有一个阶D|目标,往后发展,阶段性目标就接q最l目标。正是通过每一个阶D|目标的成功实现Q才能实现最l目标。因此,目标永远指明了前q的方向?br />    现在你明白ؓ(f)什么需要目标了吗?<br />    L(fng)l学?fn)后面的内容吧?/span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-family: FangSong_GB2312; font-size: 18px; ">17. 人生目标序言    大h们dƢ问自己的孩子:(x)你长大了惛_什么啊Q?br />    孩子会(x)毫不犹U的说Q?br />    “我要像爸怸P当一名徏{工E师……”<br />    “我要当一名科学家或是一名作?#8230;…”<br />    “我要像妈妈一P当一名医?#8230;…”<br />    “我要当一名警察或者天文学?#8230;…”<br />    “我要当一名宇航员Q飞上太I?#8230;…”<br />     …… …… ……<br />    各种各样的回{,都代表了孩子的一个h生目标?br />    你认些目标可以更改吗Q?br />    无论你的目标是否发生变化Q时间都?x)一分一U的q去Q这是一个不变的规律?/span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-family: FangSong_GB2312; font-size: 18px; ">18. 要明h生目?nbsp;   Z加深你对目标的理解,一h看看q样一l调查数据?br />    表中列出了某一q哈?jng)大?00名学生及(qing)他们毕业?5q的调查数据。那些没有目标的人,l果是生zdC会(x)的底层,而那些目标明的人,都生zdC会(x)的中上层。o(h)人深思的是,q些人的L(fng)几乎是一L(fng)Q然而,正是因ؓ(f)目标q一因素D了巨大的l果差异。可见,目标对h生的影响是多么的巨大?br />    到这里,我想问你一个问题,你有长期或者短期的目标吗?<br />    有没有不重要Q希望从q一d始,你要p定明且合理的长期与短期目标?br />    现在Q请写出你的人生目标Q?br />    h出几张纸Q一支铅W或钢笔Q一只带有秒针的手表或时钟,p?5分钟旉。在U的最上端写下问题?/span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-family: FangSong_GB2312; font-size: 18px; ">19. 你的人生目标到底是什么?    W一个问题:(x)<br />    你的人生目标到底是什么?<br />    用第一人称、现在时、肯定语气来写,q样Q这些目标就能立卌入你的潜意识中?br />    不要x写出那些看h距离自己很遥q的目标。这些目标可以是有Ş的或是无形的?br />    比如说登上珠I朗玛峰、去参加马拉N跑、休假一q、退休后在意大利Z座房子、买艘游艇、购C辆宝马车;拥有一个美满幸的三口之家Q自p拥有一个健L(fng)w体……q些都可以列出来Q同时请列出优先序?/span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-family: FangSong_GB2312; font-size: 18px; ">20. 如何度过今后三年    W二个问题:(x)<br />    如何度过今后三年Q?br />    三年的时_(d)看似很长Q那么在q么长的旉里你能做些什么呢Q?br />    你可以写下一些比较空泛的目标Q比如说“获得q福”?#8220;取得成功”?#8220;赢得爱情”?#8220;为社?x)做贡?#8221;?#8220;d30本书”?#8220;渔R30个国?#8221;{等?/span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-family: FangSong_GB2312; font-size: 18px; ">21. 只能zd个月你该怎样渡过    W三个问题:(x)<br />    只能zd个月怎样度过Q?br />    如果你知道自׃(x)在六个月后因为病的侵入而失ȝ命,你会(x)怎样度过q六个月的时_(d)你可以从不同的角度去惟?br />    h意:(x)q意味着你的人生只剩下六个月的时_(d)你必d分利用这D|间做一些你觉得最重要或者自׃直都惛_而没做的事情?/span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-family: FangSong_GB2312; font-size: 18px; ">22. 三个问题之间的思?nbsp;   你可以花上至两分钟的时_(d)仔细斟酌q修改你对以上三个问题的回答。如果愿意,你也可以׃更多的时间?br />    同时Q请你认真思考一下这三个问题之间的关pL怎样的?<br />    现在我们来分析一下这三个问题Q第一个可以看作是长期目标、第二个是短期目标、第三个是被分解后的目标?br />    你可能会(x)发现W二个问题的{案其实是第一个问题答案的延Q还有一些h发现自己在第三个问题上的{案跟前两个问题的答案截然不?#8212;—那是因ؓ(f)他们H然意识到自q旉不多了,必须在有限的旉内完成最重要、最紧急的事情?/span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-family: FangSong_GB2312; font-size: 18px; ">23. 如何讑֮人生目标    了解Z么设定h生目标后Q现在我们就来学?fn)一下如何设定h生目标吧?br />    事实上,讑֮一个适当的目标就{于辑ֈ了目标的一部分?br />    人生的大目标也是人生大志Q可能需要十q、二十年甚至l生Z奋斗。一个h不可能一口吃成一个胖子,所以我们在q求人生目标的过E中Q要时刻清楚自己现在做的每一件事都要有助于实现自己最l的目标?br />    接下来,我们pl讲解一下如何有效地讑֮人生目标?/span></p><img src ="http://www.tkk7.com/hongqiang/aggbug/385093.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/hongqiang/" target="_blank">张慧</a> 2012-08-08 23:38 <a href="http://www.tkk7.com/hongqiang/archive/2012/08/08/385093.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>单例设计模式中用dom4j来完?数据库配|文?xml的解析,q完成数据库的连?/title><link>http://www.tkk7.com/hongqiang/archive/2012/08/08/385091.html</link><dc:creator>张慧</dc:creator><author>张慧</author><pubDate>Wed, 08 Aug 2012 15:37:00 GMT</pubDate><guid>http://www.tkk7.com/hongqiang/archive/2012/08/08/385091.html</guid><wfw:comment>http://www.tkk7.com/hongqiang/comments/385091.html</wfw:comment><comments>http://www.tkk7.com/hongqiang/archive/2012/08/08/385091.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/hongqiang/comments/commentRss/385091.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/hongqiang/services/trackbacks/385091.html</trackback:ping><description><![CDATA[<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><strong>本文主要q的内容有单例设计模式、dom4j解析xml文gQ这里解析的数据库的配置文gQ、通过解析出来的配|信息完成数据库的连接?/strong></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><br /></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><strong><span style="color: #ff0000; ">1、首先要看的是单例设计模?/span></strong><br /></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">       单例设计模式的实现有两种Q饿汉式Q预先加载)、懒汉式Qgq加载)Q下面分别来看这两种实现方式?/p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">Q?Q、饿汉式Q预先加载)<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">class</span> Singleton{<br />    <span style="color: #0000FF; ">private</span> <span style="color: #0000FF; ">static</span> Singleton instance = <span style="color: #0000FF; ">new</span> Singleton();<br />    <br />    <span style="color: #0000FF; ">private</span> Singleton(){}<br /><br />    <span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">static</span> <span style="color: #0000FF; ">synchronized</span> Singleton getInstance(){<br />        <span style="color: #0000FF; ">return</span> instance;<br />    } <br />}</div>Q?Q懒汉式Qgq加载) <br /><br /><div style="font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; border-image: initial; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">class</span> Singleton{<br />    <span style="color: #0000FF; ">private</span> <span style="color: #0000FF; ">static</span> Singleton instance = <span style="color: #0000FF; ">null</span>;<br />    <br />    <span style="color: #0000FF; ">private</span> Singleton(){}<br /><br />    <span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">static</span> <span style="color: #0000FF; ">synchronized</span> Singleton getInstance(){<br />        <span style="color: #0000FF; ">if</span>(instance==<span style="color: #0000FF; ">null</span>){<br />             instance = <span style="color: #0000FF; ">new</span> Singleton();<br />        }<br />        <span style="color: #0000FF; ">return</span> instance;<br />    } <br />}</div><br />观察上面的这两种模式Q看h区别q不大,前一U方式是cM旦加载就得将对象实例化了Q而后一U则是在使用的时候才q行判断是否要实例化对象Qƈ且在后一U的getInstanceҎ(gu)中加入了同步Q这h得更加的合理Q个人更加偏好于使用W二U方式?p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><br /></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong><span style="color: #ff0000; ">2、用dom4j来完成数据库配置文g的解?/span></strong></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">l出下面q个数据库的配置文g<strong>sys-config.xml</strong></p><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; "><?</span><span style="color: #FF00FF; ">xml version="1.0" encoding="UTF-8"</span><span style="color: #0000FF; ">?></span><br /><span style="color: #0000FF; "><</span><span style="color: #800000; ">config</span><span style="color: #0000FF; ">></span><br />    <span style="color: #0000FF; "><</span><span style="color: #800000; ">db-info</span><span style="color: #0000FF; ">></span><br />        <span style="color: #0000FF; "><</span><span style="color: #800000; ">driver</span><span style="color: #0000FF; ">></span>oracle.jdbc.driver.OracleDriver<span style="color: #0000FF; "></</span><span style="color: #800000; ">driver</span><span style="color: #0000FF; ">></span><br />        <span style="color: #0000FF; "><</span><span style="color: #800000; ">url</span><span style="color: #0000FF; ">></span>jdbc:oracle:thin:@127.0.0.1:1521:ORCL<span style="color: #0000FF; "></</span><span style="color: #800000; ">url</span><span style="color: #0000FF; ">></span><br />        <span style="color: #0000FF; "><</span><span style="color: #800000; ">user</span><span style="color: #0000FF; ">></span>username<span style="color: #0000FF; "></</span><span style="color: #800000; ">user</span><span style="color: #0000FF; ">></span><br />        <span style="color: #0000FF; "><</span><span style="color: #800000; ">password</span><span style="color: #0000FF; ">></span>password<span style="color: #0000FF; "></</span><span style="color: #800000; ">password</span><span style="color: #0000FF; ">></span><br />    <span style="color: #0000FF; "></</span><span style="color: #800000; ">db-info</span><span style="color: #0000FF; ">></span><br /><span style="color: #0000FF; "></</span><span style="color: #800000; ">config</span><span style="color: #0000FF; ">></span></div><br />完成解析的javac:(x)<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">Q?Q、保存数据库jdbc配置信息的模型类<strong>JdbcConfig.java</strong></p><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">package</span> org.ml.drp.util;<br /><br /><span style="color: #008000; ">/**</span><span style="color: #008000; "><br /> * 用于保存数据库连接时的jdbc参数<br /> * <br /> * </span><span style="color: #808080; ">@author</span><span style="color: #008000; "> MuLing<br /> * <br /> </span><span style="color: #008000; ">*/</span><br /><span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">class</span> JdbcConfig {<br />    <span style="color: #0000FF; ">private</span> String DbDriver;<br />    <span style="color: #0000FF; ">private</span> String DbUrl;<br />    <span style="color: #0000FF; ">private</span> String DbUser;<br />    <span style="color: #0000FF; ">private</span> String DbPass;<br /><br />    <span style="color: #0000FF; ">public</span> String getDbDriver() {<br />        <span style="color: #0000FF; ">return</span> DbDriver;<br />    }<br /><br />    <span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">void</span> setDbDriver(String dbDriver) {<br />        DbDriver = dbDriver;<br />    }<br /><br />    <span style="color: #0000FF; ">public</span> String getDbUrl() {<br />        <span style="color: #0000FF; ">return</span> DbUrl;<br />    }<br /><br />    <span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">void</span> setDbUrl(String dbUrl) {<br />        DbUrl = dbUrl;<br />    }<br /><br />    <span style="color: #0000FF; ">public</span> String getDbUser() {<br />        <span style="color: #0000FF; ">return</span> DbUser;<br />    }<br /><br />    <span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">void</span> setDbUser(String dbUser) {<br />        DbUser = dbUser;<br />    }<br /><br />    <span style="color: #0000FF; ">public</span> String getDbPass() {<br />        <span style="color: #0000FF; ">return</span> DbPass;<br />    }<br /><br />    <span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">void</span> setDbPass(String dbPass) {<br />        DbPass = dbPass;<br />    }<br /><br />    @Override<br />    <span style="color: #0000FF; ">public</span> String toString() {<br />        <span style="color: #0000FF; ">return</span> "JdbcConfig [DbDriver=" + DbDriver + ", DbUrl=" + DbUrl<br />                + ", DbUser=" + DbUser + ", DbPass=" + DbPass + "]";<br />    }<br />}</div><br />Q?Q、解析数据库配置文g的工L(fng)<strong>XmlConfigReader.java</strong>,q里使用单例模式完成Q采用的是懒汉式?nbsp;<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">package</span> org.ml.drp.util;<br /><br /><span style="color: #0000FF; ">import</span> java.io.InputStream;<br /><br /><span style="color: #0000FF; ">import</span> org.dom4j.Document;<br /><span style="color: #0000FF; ">import</span> org.dom4j.DocumentException;<br /><span style="color: #0000FF; ">import</span> org.dom4j.Element;<br /><span style="color: #0000FF; ">import</span> org.dom4j.io.SAXReader;<br /><span style="color: #008000; ">/**</span><span style="color: #008000; "><br /> * 用于解析xml文g <br /> * </span><span style="color: #808080; ">@author</span><span style="color: #008000; "> MuLing<br /> *<br /> </span><span style="color: #008000; ">*/</span><br /><span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">class</span> XmlConfigReader {  <br />    <br />    <span style="color: #0000FF; ">private</span> JdbcConfig jdbcConfig = <span style="color: #0000FF; ">null</span>;<br />    <span style="color: #0000FF; ">private</span> <span style="color: #0000FF; ">static</span> XmlConfigReader instance = <span style="color: #0000FF; ">null</span>; <br />    <br />    <span style="color: #0000FF; ">private</span> XmlConfigReader(){<br />        SAXReader reader = <span style="color: #0000FF; ">new</span> SAXReader();<span style="color: #008000; ">//</span><span style="color: #008000; ">取得SAXReader的对?/span><span style="color: #008000; "><br /></span>        InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream("sys-config.xml");<span style="color: #008000; ">//</span><span style="color: #008000; ">得到输入对?/span><span style="color: #008000; "><br /></span>        jdbcConfig = <span style="color: #0000FF; ">new</span> JdbcConfig();<br />        Document doc = <span style="color: #0000FF; ">null</span>;<br />        <span style="color: #0000FF; ">try</span> {<br />            doc = reader.read(input); <span style="color: #008000; ">//</span><span style="color: #008000; ">q行d</span><span style="color: #008000; "><br /></span>        } <span style="color: #0000FF; ">catch</span> (DocumentException e) { <br />            e.printStackTrace(); <br />        }<br />                <span style="color: #008000; ">//</span><span style="color: #008000; ">取得对应的节点对?/span><span style="color: #008000; "><br /></span>               &nbsp;Element driverEle = (Element)doc.selectObject("/config/db-info/driver");<br />        Element urlEle = (Element)doc.selectObject("/config/db-info/url");<br />        Element userEle = (Element)doc.selectObject("/config/db-info/user");<br />        Element passwordEle = (Element)doc.selectObject("/config/db-info/password"); <br /><br />        jdbcConfig.setDbDriver(driverEle.getStringValue());<br />        jdbcConfig.setDbUrl(urlEle.getStringValue());<br />        jdbcConfig.setDbUser(userEle.getStringValue());<br />        jdbcConfig.setDbPass(passwordEle.getStringValue()); <br />    }<br />    <br />    <span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">static</span> <span style="color: #0000FF; ">synchronized</span> XmlConfigReader getInstance(){<br />        <span style="color: #0000FF; ">if</span>(instance==<span style="color: #0000FF; ">null</span>){<br />            instance = <span style="color: #0000FF; ">new</span> XmlConfigReader();<br />        }<br />        <span style="color: #0000FF; ">return</span> instance;<br />    }<br />    <br />    <span style="color: #0000FF; ">public</span> JdbcConfig getJdbcConfig(){<br />        <span style="color: #0000FF; ">return</span> <span style="color: #0000FF; ">this</span>.jdbcConfig;<br />    }<br />}</div><br /><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong><span style="color: #ff0000; ">3、根据解析出了的配置信息完成数据库的q接</span></strong></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">下面是一个完成数据库q接操作的测试工L(fng)<strong>DbUtil.java</strong></p><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">package</span> org.ml.drp.util;<br /><br /><span style="color: #0000FF; ">import</span> java.sql.Connection;<br /><span style="color: #0000FF; ">import</span> java.sql.DriverManager;<br /><span style="color: #0000FF; ">import</span> java.sql.SQLException;<br /><br /><span style="color: #008000; ">/**</span><span style="color: #008000; "><br /> * 装数据库常用操作类<br /> * </span><span style="color: #808080; ">@author</span><span style="color: #008000; "> MuLing<br /> *<br /> </span><span style="color: #008000; ">*/</span><br /><span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">class</span> DbUtil {<br />  <br />    <span style="color: #008000; ">/**</span><span style="color: #008000; "><br />     * 取得数据库的q接<br />     * </span><span style="color: #808080; ">@return</span><span style="color: #008000; "><br />     </span><span style="color: #008000; ">*/</span><br />    <span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">static</span> Connection getConnection(){<br />        Connection conn = <span style="color: #0000FF; ">null</span>;        <br />        <span style="color: #008000; ">//</span><span style="color: #008000; ">取得数据库连接字W串</span><span style="color: #008000; "><br /></span>        JdbcConfig jdbcConfig = XmlConfigReader.getInstance().getJdbcConfig();<br />        String DBDRIVER = jdbcConfig.getDbDriver();<br />        String DBURL = jdbcConfig.getDbUrl();<br />        String DBUSER = jdbcConfig.getDbUser();<br />        String DBPASS = jdbcConfig.getDbPass();<br />        <span style="color: #008000; ">//</span><span style="color: #008000; ">1:注册驱动</span><span style="color: #008000; "><br /></span>        <span style="color: #0000FF; ">try</span> {<br />            Class.forName(DBDRIVER);<br />        } <span style="color: #0000FF; ">catch</span> (ClassNotFoundException e) { <br />            e.printStackTrace();<br />        }<br />        <span style="color: #008000; ">//</span><span style="color: #008000; ">2Q获取连?/span><span style="color: #008000; "><br /></span>        <span style="color: #0000FF; ">try</span> {<br />            conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);<br />        } <span style="color: #0000FF; ">catch</span> (SQLException e) { <br />            e.printStackTrace();<br />        }<br />        <span style="color: #008000; ">//</span><span style="color: #008000; ">3:q回数据库连?/span><span style="color: #008000; "><br /></span>        <span style="color: #0000FF; ">return</span> conn;<br />    }<br />    <br />    <span style="color: #008000; ">//</span><span style="color: #008000; ">试数据库的q接是否成功</span><span style="color: #008000; "><br /></span>    <span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">static</span> <span style="color: #0000FF; ">void</span> main(String args[]){ <br />        System.out.println(DbUtil.getConnection());<br />    }<br />}</div><br />上完成了单例模式下用dom4j来读取数据库配置文gQƈ实现数据库的q接操作?nbsp;<br /><br /><br /><br /><br /></p><img src ="http://www.tkk7.com/hongqiang/aggbug/385091.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/hongqiang/" target="_blank">张慧</a> 2012-08-08 23:37 <a href="http://www.tkk7.com/hongqiang/archive/2012/08/08/385091.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>破除“系l学?fn)”的情结http://www.tkk7.com/hongqiang/archive/2012/08/08/385090.html张慧张慧Wed, 08 Aug 2012 15:33:00 GMThttp://www.tkk7.com/hongqiang/archive/2012/08/08/385090.htmlhttp://www.tkk7.com/hongqiang/comments/385090.htmlhttp://www.tkk7.com/hongqiang/archive/2012/08/08/385090.html#Feedback5http://www.tkk7.com/hongqiang/comments/commentRss/385090.htmlhttp://www.tkk7.com/hongqiang/services/trackbacks/385090.html常有同学惛_自己译֤学习(fn)的安排中Q?#8220;pȝ?#8221;学习(fn)点什么。这L(fng)事情常发生在喜欢做A专业的事Q却上了B专业Q且A不等于BQ甚至相似度(A, B)于无穷。对有些同学Q一不留发现自q学习(fn)落后了不,比如学计机的,到大三了Q却发现q简单程序也~不出来Q再如学完高CQ才知道高数原来如此重要Q于是想要系l地重学一遍?/span>
  何ؓ(f)pȝ学习(fn)Q系l学?fn)就是要按照已有的一套规定,先学什么,再学什么,按步q地走完一个流E。ؓ(f)什么要pȝ学习(fn)Q将做事能专业些。规定从何而来Q业界专家。系l学?fn)有什么好处?基础扎实。系l学?fn)的路线Q先理论Q再理论指导实践?/span>
  q就怪了。当今大学饱受批评之一在于重理论,dc而到了课外自q安排Q还也要走入q条巷子。深层的原因在于Q我们要惛_点东西,无意识地延箋了一Uƈ不是很合理的思维Q学?fn)的模式被单一化了。一边在批评着本专业系l化教学中的弊端Q一斚w在本来不受约束的自由安排中又要去q求q种pȝ化,谬矣?/span>
  pȝ地学Q意味着开始一个比较庞大和长期的计划。雄心勃勃地hQ灰溜溜的,或者不知不觉地停止。这U情冉|l历了不止一ơ。还有一U情冉|Q祥林嫂式地叨叨一生:(x)“一直想pȝ学习(fn)一?#8230;…Q却没有Z(x)?#8221;
  要想满自己的兴,其实很简单,用合适的方式行动h卛_。喜Ƣ电(sh)子的Q先C套gQ备把烙铁,焊个攉机出来;喜欢计算机的Q就先自学编个程序出来;喜欢l济的,Ml济学著?#8230;…。系l学?fn)的条g往往有些苛刻Q所以不要寄望于pȝ学习(fn)?/span>
  实际上,pȝ学习(fn)q个东东Q确实用不着Z如此着q系l学?fn)本wƈ没有什么太多的道理Q那是对某方面知识的套装Q是Z适应大规模h才培养而用的。一旦Ş成系l,也就意味着僵化Q意味着单一标准Q在q一套东西广Z播的同时Q也为相应的学科q一步发展套上了枷锁Q这是一个躲不开的?zhn)论。单按这个系l培d来的人才Q没有特Ԍ~Z创新Q这是现在教育的一个非常大的弊端?/span>
  我们不能直接全盘否认pȝ学习(fn)Q这U方法是有效的,也将l箋持箋。需要我们每个h做的Q是不单一C赖系l化Q要H破q个所谓的pȝQ找出适合自己的办法,q而ؓ(f)q个pȝ做出贡献。这是创新。要创新Q就一定要有hH破pȝ的制U?/span>
  一个最单的问题Q各行业都有个祖师爷Q哪个祖师爷是科班出w,pȝ学习(fn)q的Q在现实中,我们发现很多有所成就的h物往往是多面手Q不能说他的每一面都是系l学来的。在职场中,复合型h才受Ƣ迎Q复合型人才不可以单一理解Zq几个专业,拿过几个学位。野路子nQ被智叟们看不上的,常常能做出大的成l?/span>
  在我理想的大学中Q同学们的学?fn)将是这L(fng)Q他们接受着一专业教Ԍ一斚w由教授系l地传授着专业知识Q接受着一U?#8220;正规”的训l,另一斚wQ学生能够根据自q兴趣、感觉自由地拓展Q拓展的内容有的是和pȝ相关的,有的完全?#8220;节外生枝”。这是课内与译֤有效的结合?/span>
  破除“pȝ学习(fn)”的情l,Ҏ(gu)自己当前的环境、条Ӟ首先行动h。在hӞ着重直接的体验Q而专门的理论。在整个q程中,看重自己的感受,而不是专家的观点。坚持下来,你将有能力自由出入这个系l,面对的是更ؓ(f)qK的空间。没有经q系l学?fn),实在不能不说是一件值得庆幸的事?/span>
  有条件系l学?fn),或许可以乐一乐;而没有条件系l学?fn)的Q一定不要纠l?/span>

  有条件进入了pȝ学习(fn)轨道的,也要常想着“捣ؕ”Q往pȝ外冲一册Ӏ没有条件以pȝ学习(fn)开始的Q不妨在野\子v步,甚至成ؓ(f)高手后,往pȝq边看一看,q会(x)让你上到一个新的境界?/p>


ȝ一下:(x)能进入系l学?fn)轨道的人是q运的,但也要提防着“pȝ”l你造成的限Ӟ既然没有条gpȝ学习(fn)的,׃要去q等Q先动v来再说?/p>

张慧 2012-08-08 23:33 发表评论
]]>
探讨i++?+ihttp://www.tkk7.com/hongqiang/archive/2012/08/01/384557.html张慧张慧Wed, 01 Aug 2012 13:56:00 GMThttp://www.tkk7.com/hongqiang/archive/2012/08/01/384557.htmlhttp://www.tkk7.com/hongqiang/comments/384557.htmlhttp://www.tkk7.com/hongqiang/archive/2012/08/01/384557.html#Feedback1http://www.tkk7.com/hongqiang/comments/commentRss/384557.htmlhttp://www.tkk7.com/hongqiang/services/trackbacks/384557.html文章的楼主连左值都可以q算Q还若无其事得当作可以编译,在那讲解Q若无其事就了Q可以当做没有发现编译问题,但是那讲解也太误gh了吧Q然后我跟帖的楼下还出现一?#8220;石破?#8221;Q以教导式的口吻Q在那讲解,不知道的人岂不是׃了吗Q真真一害Z马,当然我只是指其中几位Q很多跟帖的朋友Q我自认q是不如的?/p>

׃ؓ(f)了这个媄响广泛的害h帖子Q在csdn上弹框出来,影响能不吗Q)Q我也来探讨一下i++Q我是菜鸟,我不?x)用教导式口L讲解?/p>

首先说文章楼L到的

if((i++=j++)!=4){}  

看到q句代码我真惛_Q因让我对自׃生了不自信,q去~译了一下,果然是错误的Q左Ҏ(gu)么能够q行q算呢?g真强?..Z么昨天没有写文章Q没有情l激动,?/p>

为我知道C++风格也是q样赋|不知道能不能~译q去Q但是今天看到跟帖的朋友_(d)VC98q不去,DEV-C++也过不去Q我才感到真有一U被耍的感觉?#8220;左Dq算吗?What  the hellQ?q一句,只是骂我自己怀疑自己,没有对其他Q何h?/p>

假设Q楼L手误Q咱们来一个正的能编译的代码讨论一下:(x)

int i=4,j=3;   
if((i = j++) != 4) {}  

j++的具体动作应该是怎样的,我想看过《Thinking in Java》的朋友都掌握得q不错,如果实在x更深入一Ҏ(gu)讨i++的书Q个人看q《JavaE序员面试宝典》,里面有提到i++q个部分Q讲得很仔细。j++Q是一个依赖于java里面?#8220;中间~存变量机制”来实现的Q很多h都会(x)?+在前是“先加后赋”Q?+在后是“先赋后加”Q但是这?#8220;?#8221;和这?#8220;?#8221;是针对哪个对象呢Q有几个清楚的解释?“宝典”q本书上面的解释Q个得非常好Q就来这里秀一Dc首先,像文章中2楼所说那P(x)++的时间是以整个语句ؓ(f)衡量的,所以,什么时候自增,跟一整句q算语句有关Q现在的情况?span style="color: #ff0000; "> i = j++Q这样一句应该被拆分为:(x)

 

temp = j;//先赋
j = j + 1;//后加
i = temp;

 

再来一?span style="color: #ff0000; ">i = ++jQ这一句应该被拆分为:(x)

j = j + 1;//先加
temp = j;//后赋
i = temp;

用这L(fng)语句Q来解释“?#8221;?#8220;?#8221;应该是很明了的吧Q记住,“?#8221;只涉?qing)了本nQ?#8220;?#8221;涉及(qing)本n和中间缓存变量?/p>

如何理解“++的时间是以整个语句ؓ(f)衡量?#8221;Q咱们来一D复杂的可以很好地理解了,拿那个被我L(fng)“石破?#8221;的吧?/p>

 

/* q个是原式,重版权Q但是误gh*/
int i=10;
i=i++ + i++;//20  --q里应该?x)?1,note by jacob
i=++i + ++i;//44  --q里应该?x)?5,note by jacob
 

 

首先׃把这都拆开来理解:(x)

/* l说W一?nbsp;i = i++ + i ++; */
temp1 = i;//temp1 == 10
i = i + 1;//i == 11;
temp2 = i;//temp2 == 11
i = i + 1;//i == 12;
i = temp1 + temp2;//i == 21

/*W二?nbsp;i = ++i + ++i;*/
i = i + 1;
temp1 = i;
i = i + 1;
temp2 = i;
i = temp1 +temp2;


q样的例子,应该是比较复杂的吧Q如果需要,q可以来一个更加复杂的Q不q不再详l解释,大家可以拿来推敲一下:(x)

int j =0,k = 0,h=0;
k = k++ + k++ + k++ + ++k;//k == 7
j = ++j + j++ + j++ + j++;//j ==7;
h = ++h + ++h;


张慧 2012-08-01 21:56 发表评论
]]>
javascript的gq等待实?/title><link>http://www.tkk7.com/hongqiang/archive/2012/08/01/384555.html</link><dc:creator>张慧</dc:creator><author>张慧</author><pubDate>Wed, 01 Aug 2012 13:50:00 GMT</pubDate><guid>http://www.tkk7.com/hongqiang/archive/2012/08/01/384555.html</guid><wfw:comment>http://www.tkk7.com/hongqiang/comments/384555.html</wfw:comment><comments>http://www.tkk7.com/hongqiang/archive/2012/08/01/384555.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/hongqiang/comments/commentRss/384555.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/hongqiang/services/trackbacks/384555.html</trackback:ping><description><![CDATA[<span style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "> q段旉遇到一个问题:(x)使用ajax生成一个列表,然后使用sorttable.js对这个列表进行排序。问题在于:(x)生成的列表还没出玎ͼ排序已经开始了Q结果没有找到列表报错。解x法:(x)</span> <br /><div style="font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; border-image: initial; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> function ifExist(table){<br />    if(table.tBodies[0]==null)<br />   {<br />  setTimeout( function(){ifExist(table);}, 1000);  <br />   }<br />   else<br />   {<br />  sorttable.makeSortable(table);<br />   }<br /> }</div><br /><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">判断节点是否生成了,如果没有Q那么就{待1U,再@环执行。一切ok了!</p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "> </p><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">最后,补充一下关于javascript同步和异步的问题Q{载)Q?/p><div style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><strong>一、同步加载与异步加蝲的Ş?/strong></div><div style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "></div><div style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><strong>1. 同步加蝲</strong></div><div style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">我们qx最怋用的是q种同步加蝲形式Q?/div><pre style="white-space: pre-wrap; word-wrap: break-word; line-height: 25px; text-align: left; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; "><span style="color: #808030; "><</span>script src<span style="color: #808030; ">=</span>"http://yourdomain.com/script.js"<span style="color: #808030; ">></span><span style="color: #808030; "><</span><span style="color: #808030; ">/</span>script<span style="color: #808030; ">></span> </pre><div style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><div>同步模式Q又U阻塞模式,?x)阻止浏览器的后l处理,停止了后l的解析Q因此停止了后箋的文件加载(如图像)、渲染、代码执行?/div><div>js 之所以要同步执行Q是因ؓ(f) js 中可能有输出 document 内容、修改dom、重定向{行为,所以默认同步执行才是安全的?/div><div>以前的一般徏议是?lt;script>攑֜面末尾</body>之前Q这样尽可能减少q种d行ؓ(f)Q而先让页面展C出来?/div></div><div style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "></div><div style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">单说Q加载的|络 timeline 是瀑布模型Q而异步加载的 timeline 是ƈ发模型?/div><div style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "></div><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><strong>2. 常见异步加蝲QScript DOM ElementQ?/strong></p><div style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><pre style="white-space: pre-wrap; word-wrap: break-word; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; color: #000000; "><span style="color: #808030; ">(</span><span style="font-weight: bold; ">function</span><span style="color: #808030; ">(</span><span style="color: #808030; ">)</span> { <span style="font-weight: bold; ">var</span> s <span style="color: #808030; ">=</span> document<span style="color: #808030; ">.</span>createElement<span style="color: #808030; ">(</span>'script'<span style="color: #808030; ">)</span>; s<span style="color: #808030; ">.</span>type <span style="color: #808030; ">=</span> 'text/javascript'; s<span style="color: #808030; ">.</span>async <span style="color: #808030; ">=</span> true; s<span style="color: #808030; ">.</span>src <span style="color: #808030; ">=</span> 'http://yourdomain.com/script.js'; <span style="font-weight: bold; ">var</span> x <span style="color: #808030; ">=</span> document<span style="color: #808030; ">.</span>getElementsByTagName<span style="color: #808030; ">(</span>'script'<span style="color: #808030; ">)</span><span style="color: #808030; ">[</span>0<span style="color: #808030; ">]</span>; x<span style="color: #808030; ">.</span>parentNode<span style="color: #808030; ">.</span>insertBefore<span style="color: #808030; ">(</span>s<span style="color: #808030; ">,</span> x<span style="color: #808030; ">)</span>; }<span style="color: #808030; ">)</span><span style="color: #808030; ">(</span><span style="color: #808030; ">)</span>;</pre><br />异步加蝲又叫非阻塞,览器在下蝲执行 js 同时Q还?x)l进行后l页面的处理?/div><div style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "></div><div style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">q种Ҏ(gu)是在面?lt;script>标签内,?js 创徏一?script 元素q插入到 document 中。这样就做到了非d的下?js 代码?/div><div style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">async属性是HTML5中新增的异步支持Q见后文解释Q加上好Q不加也不媄响)?/div><div style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">此方法被UCؓ(f) Script DOM Element 法,不要?js 同源?/div><div style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "></div><div style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">js代码包裹在匿名函Cq立x行的方式是ؓ(f)了保护变量名泄露到外部可见,q是很常见的方式Q尤其是?js 库中被普遍用?/div><div style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><div></div><div>例如 Google Analytics ?Google+ Badge 都用了q种异步加蝲代码Q?/div><div><pre style="white-space: pre-wrap; word-wrap: break-word; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; color: #000000; "><span style="color: #808030; ">(</span><span style="font-weight: bold; ">function</span><span style="color: #808030; ">(</span><span style="color: #808030; ">)</span> { <span style="font-weight: bold; ">var</span> ga <span style="color: #808030; ">=</span> document<span style="color: #808030; ">.</span>createElement<span style="color: #808030; ">(</span>'script'<span style="color: #808030; ">)</span>; ga<span style="color: #808030; ">.</span>type <span style="color: #808030; ">=</span> 'text/javascript'; ga<span style="color: #808030; ">.</span>async <span style="color: #808030; ">=</span> true; ga<span style="color: #808030; ">.</span>src <span style="color: #808030; ">=</span> <span style="color: #808030; ">(</span>'https:' <span style="color: #808030; ">==</span> document<span style="color: #808030; ">.</span>location<span style="color: #808030; ">.</span>protocol ? 'https://ssl' : 'http://www'<span style="color: #808030; ">)</span> <span style="color: #808030; ">+</span> '.google-analytics.com/ga.js'; <span style="font-weight: bold; ">var</span> s <span style="color: #808030; ">=</span> document<span style="color: #808030; ">.</span>getElementsByTagName<span style="color: #808030; ">(</span>'script'<span style="color: #808030; ">)</span><span style="color: #808030; ">[</span>0<span style="color: #808030; ">]</span>; s<span style="color: #808030; ">.</span>parentNode<span style="color: #808030; ">.</span>insertBefore<span style="color: #808030; ">(</span>ga<span style="color: #808030; ">,</span> s<span style="color: #808030; ">)</span>; }<span style="color: #808030; ">)</span><span style="color: #808030; ">(</span><span style="color: #808030; ">)</span>; </pre></div><div><span style="font-family: monospace; color: #808030; white-space: pre; ">(</span><span style="font-family: monospace; font-weight: bold; white-space: pre; ">function</span><span style="font-family: monospace; color: #808030; white-space: pre; ">(</span><span style="font-family: monospace; color: #808030; white-space: pre; ">)</span></div><div><pre style="white-space: pre-wrap; word-wrap: break-word; "> {<span style="font-weight: bold; ">var</span> po <span style="color: #808030; ">=</span> document<span style="color: #808030; ">.</span>createElement<span style="color: #808030; ">(</span>"script"<span style="color: #808030; ">)</span>; po<span style="color: #808030; ">.</span>type <span style="color: #808030; ">=</span> "text/javascript"; po<span style="color: #808030; ">.</span>async <span style="color: #808030; ">=</span> true;po<span style="color: #808030; ">.</span>src <span style="color: #808030; ">=</span> "https://apis.google.com/js/plusone.js"; <span style="font-weight: bold; ">var</span> s <span style="color: #808030; ">=</span> document<span style="color: #808030; ">.</span>getElementsByTagName<span style="color: #808030; ">(</span>"script"<span style="color: #808030; ">)</span><span style="color: #808030; ">[</span>0<span style="color: #808030; ">]</span>; s<span style="color: #808030; ">.</span>parentNode<span style="color: #808030; ">.</span>insertBefore<span style="color: #808030; ">(</span>po<span style="color: #808030; ">,</span> s<span style="color: #808030; ">)</span>; }<span style="color: #808030; ">)</span><span style="color: #808030; ">(</span><span style="color: #808030; ">)</span>; </pre></div><div>但是Q?strong>q种加蝲方式在加载执行完之前?x)阻?onload 事g的触?/strong>Q而现在很多页面的代码都在 onload 时还要执行额外的渲染工作{,所以还是会(x)d部分面的初始化处理?/div><div style="font-weight: bold; "><strong><br /></strong></div>3. onload 时的异步加蝲</div><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "></p><pre style="white-space: pre-wrap; word-wrap: break-word; line-height: 25px; text-align: left; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; "><span style="color: #808030; ">(</span><span style="font-weight: bold; ">function</span><span style="color: #808030; ">(</span><span style="color: #808030; ">)</span> { <span style="font-weight: bold; ">function</span> async_load<span style="color: #808030; ">(</span><span style="color: #808030; ">)</span>{ <span style="font-weight: bold; ">var</span> s <span style="color: #808030; ">=</span> document<span style="color: #808030; ">.</span>createElement<span style="color: #808030; ">(</span>'script'<span style="color: #808030; ">)</span>; s<span style="color: #808030; ">.</span>type <span style="color: #808030; ">=</span> 'text/javascript'; s<span style="color: #808030; ">.</span>async <span style="color: #808030; ">=</span> true; s<span style="color: #808030; ">.</span>src <span style="color: #808030; ">=</span> 'http://yourdomain.com/script.js'; <span style="font-weight: bold; ">var</span> x <span style="color: #808030; ">=</span> document<span style="color: #808030; ">.</span>getElementsByTagName<span style="color: #808030; ">(</span>'script'<span style="color: #808030; ">)</span><span style="color: #808030; ">[</span>0<span style="color: #808030; ">]</span>; x<span style="color: #808030; ">.</span>parentNode<span style="color: #808030; ">.</span>insertBefore<span style="color: #808030; ">(</span>s<span style="color: #808030; ">,</span> x<span style="color: #808030; ">)</span>; } <span style="font-weight: bold; ">if</span> <span style="color: #808030; ">(</span>window<span style="color: #808030; ">.</span>attachEvent<span style="color: #808030; ">)</span> window<span style="color: #808030; ">.</span>attachEvent<span style="color: #808030; ">(</span>'onload'<span style="color: #808030; ">,</span> async_load<span style="color: #808030; ">)</span>; <span style="font-weight: bold; ">else</span> window<span style="color: #808030; ">.</span>addEventListener<span style="color: #808030; ">(</span>'load'<span style="color: #808030; ">,</span> async_load<span style="color: #808030; ">,</span> false<span style="color: #808030; ">)</span>; }<span style="color: #808030; ">)</span><span style="color: #808030; ">(</span><span style="color: #808030; ">)</span>; </pre><div style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">q和前面的方式差不多Q但关键是它不是立即开始异步加?js Q而是?onload 时才开始异步加载。这样就解决了阻?onload 事g触发的问题?/div><div style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "></div><div style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">补充Q?strong>DOMContentLoaded ?OnLoad 事g</strong></div><div style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">DOMContentLoaded : 面(document)已经解析完成Q页面中的dom元素已经可用。但是页面中引用的图片、subframe可能q没有加载完?/div><div style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">OnLoadQ页面的所有资源都加蝲完毕Q包括图片)。浏览器的蝲入进度在q时才停止?/div><div style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">q两个时间点页面加载的timeline分成了三个阶Dc?/div><div style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "></div><p style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><strong>4.异步加蝲的其它方?/strong></p><div style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">׃Javascript?strong>动态特?/strong>Q还有很多异步加载方法:(x)</div><div style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><ul><li>XHR Eval</li><li>XHR Injection</li><li>Script in Iframe</li><li>Script Defer</li><li>document.write Script Tag</li><li>q有一U方法是?setTimeout 延迟0U??其它Ҏ(gu)l合?/li></ul></div><div style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "></div><div style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><strong>XHR Eval </strong>Q通过 ajax 获取js的内容,然后 eval 执行?/div><div style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><pre style="white-space: pre-wrap; word-wrap: break-word; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; color: #000000; "><span style="font-weight: bold; ">var</span> xhrObj <span style="color: #808030; ">=</span> getXHRObject<span style="color: #808030; ">(</span><span style="color: #808030; ">)</span>; xhrObj<span style="color: #808030; ">.</span>onreadystatechange <span style="color: #808030; ">=</span> <span style="font-weight: bold; ">function</span><span style="color: #808030; ">(</span><span style="color: #808030; ">)</span> { <span style="font-weight: bold; ">if</span> <span style="color: #808030; ">(</span> xhrObj<span style="color: #808030; ">.</span>readyState <span style="color: #808030; ">!=</span> 4 <span style="color: #808030; ">)</span> <span style="font-weight: bold; ">return</span>; <span style="font-weight: bold; ">eval</span><span style="color: #808030; ">(</span>xhrObj<span style="color: #808030; ">.</span>responseText<span style="color: #808030; ">)</span>; }; xhrObj<span style="color: #808030; ">.</span>open<span style="color: #808030; ">(</span>'GET'<span style="color: #808030; ">,</span> 'A.js'<span style="color: #808030; ">,</span> true<span style="color: #808030; ">)</span>; xhrObj<span style="color: #808030; ">.</span>send<span style="color: #808030; ">(</span>''<span style="color: #808030; ">)</span>; </pre></div><div style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><strong>Script in Ifram</strong>eQ创建ƈ插入一个iframe元素Q让其异步执?js ?/div><div style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><pre style="white-space: pre-wrap; word-wrap: break-word; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; color: #000000; "><span style="font-weight: bold; ">var</span> iframe <span style="color: #808030; ">=</span> document<span style="color: #808030; ">.</span>createElement<span style="color: #808030; ">(</span>'iframe'<span style="color: #808030; ">)</span>; document<span style="color: #808030; ">.</span>body<span style="color: #808030; ">.</span>appendChild<span style="color: #808030; ">(</span>iframe<span style="color: #808030; ">)</span>; <span style="font-weight: bold; ">var</span> doc <span style="color: #808030; ">=</span> iframe<span style="color: #808030; ">.</span>contentWindow<span style="color: #808030; ">.</span>document; doc<span style="color: #808030; ">.</span>open<span style="color: #808030; ">(</span><span style="color: #808030; ">)</span><span style="color: #808030; ">.</span>write<span style="color: #808030; ">(</span>'<body onload="insertJS()">'<span style="color: #808030; ">)</span>; doc<span style="color: #808030; ">.</span>close<span style="color: #808030; ">(</span><span style="color: #808030; ">)</span>; </pre></div><div style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><strong>GMail Mobile</strong>Q页?js 的内容被注释Q所以不?x)执行,然后在需要的时候,获取script元素?text 内容Q去掉注释后 eval 执行?/div><div style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><pre style="white-space: pre-wrap; word-wrap: break-word; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; color: #000000; "><span style="color: #808030; "><</span>script type<span style="color: #808030; ">=</span>"text/javascript"<span style="color: #808030; ">></span> <span style="color: #696969; ">/* </span> <span style="color: #696969; ">var ... </span> <span style="color: #696969; ">*/</span> <span style="color: #808030; "><</span><span style="color: #808030; ">/</span>script<span style="color: #808030; ">></span> </pre></div><div style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; ">详见参考资料中2010q的Velocity 大会(x) Steve Souders 和淘宝的那两个讲义?/div><div style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "></div><div style="color: #362e2b; font-family: Arial; line-height: 25px; text-align: left; background-color: #ffffff; "><div></div><div><strong>二、async ?defer 属?/strong></div><div><strong>1. defer 属?/strong></div><div><pre style="white-space: pre-wrap; word-wrap: break-word; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; color: #000000; "><span style="color: #808030; "><</span>script src<span style="color: #808030; ">=</span>"file.js" defer<span style="color: #808030; ">></span><span style="color: #808030; "><</span><span style="color: #808030; ">/</span>script<span style="color: #808030; ">></span> </pre></div><div>defer属性声明这个脚本中不?x)?document.write ?dom 修改?/div><div>览器将?x)ƈ行下?file.js 和其它有 defer 属性的scriptQ而不?x)阻塞页面后l处理?/div><div></div><div>defer属性在IE 4.0中就实现了,过13q了QFirefox ?3.5 开始支持defer属??/div><div>注:(x)所有的defer 脚本保证?strong>按顺序依ơ执?/strong>的?/div><div></div><div></div><div><strong>2. async 属?/strong></div><div><pre style="white-space: pre-wrap; word-wrap: break-word; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; color: #000000; "><span style="color: #808030; "><</span>script src<span style="color: #808030; ">=</span>"file.js" async<span style="color: #808030; ">></span><span style="color: #808030; "><</span><span style="color: #808030; ">/</span>script<span style="color: #808030; ">></span> </pre></div><div>async属性是HTML5新增的。作用和defercMQ但是它?yu)在下蝲后尽快执行?strong>不能保证脚本?x)按序执?/strong>。它们将在onload 事g之前完成?/div><div>Firefox 3.6、Opera 10.5、IE 9 ?最新的Chrome ?Safari 都支?async 属性。可以同时?async ?deferQ这样IE 4之后的所?IE 都支持异步加载?/div><div></div><div><strong>3. 详细解释</strong></div><div><div></div><div><strong><script> 标签?HTML 4.01 ?HTML5 的区别:(x)</strong></div><div><ul><li>type 属性在HTML 4中是必须的,在HTML5中是可选的?/li><li>async 属性是HTML5中新增的?/li><li>个别属性(xml:spaceQ在HTML5中不支持?/li></ul></div></div><div></div><div><strong>说明Q?/strong></div><div><ol><li>没有 async 属性,script 立卌取(下蝲Qƈ执行Q然后才l箋后面的处理,q期间阻塞了览器的后箋处理?/li><li>如果?async 属性,那么 script 被异步下蝲q执行,同时览器l后l的处理?/li><li>HTML4中就有了defer属性,它提C浏览器q个 script 不会(x)产生M文档元素Q没有document.writeQ,因此览器会(x)l箋后箋处理和渲染?/li><li>如果没有 async 属?但是?defer 属性,那么script 在面parse之后执行?/li><li>如果同时讄了二者,那么 defer 属性主要是Z让不支持 async 属性的老浏览器按照原来?defer 方式处理Q而不是同步方式?/li></ol></div><div></div><div>另参见官方说明:(x)<a rel="nofollow" target="_blank" style="color: #6a3906; text-decoration: none; ">script async</a></div><div></div><div>个h补充Q?/div><div>既然 HTML5 中已l支持异步加载,Z么还要用前面推荐的那种ȝQ动态创?script 元素Q的方式Q?/div><div>{:(x)Z兼容不支持 async 老浏览器。如果将来所有浏览器都支持了Q那么直接在script中加上async 属性是最单的方式?/div><div></div><div></div><div><strong>三、gq加载(lazy loadingQ?/strong></div><div></div><div><div>前面解决了异步加载(async loadingQ问题,再谈谈什么是延迟加蝲?/div><div>延迟加蝲Q有?js 代码q不是页面初始化的时候就立刻需要的Q而稍后的某些情况才需要的。gq加载就是一开始ƈ不加载这些暂时不用的jsQ而是在需要的时候或E后再通过js 的控制来异步加蝲?/div></div><div></div><div>也就是将 js 切分成许多模块,面初始化时只加载需要立x行的 js Q然后其?js 的加载gq到W一ơ需要用到的时候再加蝲?/div><div>特别是页面有大量不同的模块组成,很多可能暂时不用或根本就没用到?/div><div>像囄的gq加载,在图片出现在可视区域内时Q在滚动条下拉)才加载显C图片?/div><div></div><div></div><div><div><strong>四、script 的两阶段加蝲 ?延迟执行Qlazy executionQ?/strong></div><div><div>JS的加载其实是׃阶段l成Q下载内容(download bytesQ和执行Qparse and executeQ?/div><div><strong>览器在下蝲?js 的内容后׃(x)立即对其解析和执行,不管是同步加载还是异步加载?/strong></div><div></div><div>前面说的异步加蝲Q解决的只是下蝲阶段的问题,但代码在下蝲后会(x)立即执行?/div><div>而浏览器在解析执?JS 阶段是阻塞Q何操作的Q这时的览器处于无响应状态?/div><div></div><div><div>?们都知道通过|络下蝲 script  需要明昄旉Q但Ҏ(gu)忽略了第二阶D,解析和执行也是需要时间的。script的解析和执行所q旉比我们想象的要多Q尤其是script  很多很大的时候。有些是需要立L行,而有些则不需要(比如只是在展C某个界面或执行某个操作时才需要)?/div><div>q些script 可以延迟执行Q先异步下蝲~存hQ但不立x行,而是在第一ơ需要的时候执行一ơ?/div><div></div><div>利用Ҏ(gu)的技巧可以做?下蝲 ?执行的分?(再次感谢 javascript 的动态特?。比如将 JS 的内容作?Image?object 对象加蝲~存hQ所以就不会(x)立即执行了,然后在第一ơ需要的时候再执行?/div><div></div><div>此部分的更多解释 h看末֏考资料中 ControlJS 的相关链接?/div></div></div><div></div><div><strong>技巧:(x)</strong></div><div>1. <strong>模拟较长的下载时?/strong>Q?/div><div>写个后端脚本Q让?sleep 一定时间。如?jsp ?Thread.sleep(5000); Q这?U后才能收到内容?/div><div></div><div>2. <strong>模拟较长?js 代码执行旉</strong>Q因步一般比较快不容易观察到Q:(x)</div><div><div>var t_start = Number(new Date());</div><div>while ( t_start + 5000 > Number(new Date()) ) {}</div></div><div>q个代码 js 执行5U才能完成!</div><div></div></div><div></div><div><strong>五、script 标签使用的历?/strong></div><div><strong><br /></strong></div><div><strong>1. script 攑֜ HEAD ?/strong></div><div><pre style="white-space: pre-wrap; word-wrap: break-word; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; color: #000000; "><<span style="font-weight: bold; ">head</span>> <<span style="font-weight: bold; ">script src=“…”</span>></<span style="font-weight: bold; ">script</span>> </<span style="font-weight: bold; ">head</span>> </pre><pre style="white-space: pre-wrap; word-wrap: break-word; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; color: #000000; "><ul><li><span style="font-family: Arial, Helvetica, sans-serif; white-space: normal; ">L了后l的下蝲Q?/span></li><li><span style="font-family: Arial, Helvetica, sans-serif; white-space: normal; ">在IE 6-7 ?script 是顺序下载的Q而不是现在的 “q行下蝲、顺序执?#8221; 的方式;</span></li><li><span style="font-family: Arial, Helvetica, sans-serif; white-space: normal; ">在下?strong>?/strong>解析执行阶段L渲染QrenderingQ;</span></li></ul></pre></div><div></div><div><strong>2. script 攑֜面底部Q?007Q?/strong></div><div><pre style="white-space: pre-wrap; word-wrap: break-word; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; color: #000000; ">... <<span style="font-weight: bold; ">script src=“…”</span>></<span style="font-weight: bold; ">script</span>> </<span style="font-weight: bold; ">body</span>> </pre><ul><li>不阻止其它下载;</li><li>在IE 6-7 ?script 是顺序下载的Q?/li><li>在下?strong>?/strong>解析执行阶段L渲染QrenderingQ;</li></ul></div><div></div><div></div><div><strong>3. 异步加蝲scriptQ?009Q?/strong></div><div><pre style="white-space: pre-wrap; word-wrap: break-word; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; color: #000000; "><span style="font-weight: bold; ">var</span> se <span style="color: #808030; ">=</span> document<span style="color: #808030; ">.</span>createElement <span style="color: #808030; ">(</span>'script'<span style="color: #808030; ">)</span>; se<span style="color: #808030; ">.</span>src <span style="color: #808030; ">=</span> 'http://anydomain.com/A.js'; document<span style="color: #808030; ">.</span>getElementsByTagName<span style="color: #808030; ">(</span>'head'<span style="color: #808030; ">)</span> <span style="color: #808030; ">[</span>0<span style="color: #808030; ">]</span><span style="color: #808030; ">.</span>appendChild<span style="color: #808030; ">(</span>se<span style="color: #808030; ">)</span>; </pre></div><div>q就是本文主要说的方式?/div><div><ul><li>不阻止其它下载;</li><li>在所有浏览器中,script都是q行下蝲Q?/li><li><strong>只在</strong>解析执行阶段L渲染QrenderingQ;</li></ul></div><div></div><div><strong>4. 异步下蝲 + 按需执行 (2010)</strong></div><div><pre style="white-space: pre-wrap; word-wrap: break-word; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; color: #000000; "><span style="font-weight: bold; ">var</span> se <span style="color: #808030; ">=</span> <span style="font-weight: bold; ">new</span> <span style="color: #797997; ">Image</span><span style="color: #808030; ">(</span><span style="color: #808030; ">)</span>; se<span style="color: #808030; ">.</span>onload <span style="color: #808030; ">=</span> registerScript<span style="color: #808030; ">(</span><span style="color: #808030; ">)</span>; se<span style="color: #808030; ">.</span>src <span style="color: #808030; ">=</span> 'http://anydomain.com/A.js'; <span style="line-height: 20px; ">把下?js ?解析执行 js 分离出来</span></pre></div><div><ul><li>不阻止其它下载;</li><li>在所有浏览器中,script都是q行下蝲Q?/li><li><strong>不阻?/strong>渲染QrenderingQ直到真正需要时Q?/li></ul></div><div></div><div></div><div><strong>六、异步加载的问题</strong></div><div>在异步加载的时候,无法使用 document.write 输出文内容?/div><div>在同步模式下Qdocument.write 是在<strong>当前 script 所在的位置</strong>?出文档的。而在异步模式下,览器l处理后l页面内容,Ҏ(gu)无法定 document.write  应该输出C么位|,所以异步模式下 document.write 不可行。而到了页面已l?onload  之后Q再执行 document.write 导致当前页面的内容被清I,因ؓ(f)它会(x)自动触发 document.open Ҏ(gu)?/div><div></div><div>实际上document.write的名声ƈ不好Q最好少用?/div><div></div><div><div>替代Ҏ(gu)Q?/div><div>1. 虽然异步加蝲不能?document.writeQ但q是可以onload之后执行操作domQ创建dom或修改domQ的Q这样可以实C些自q动态输出。比如要在页面异步创Z个Q动元素,<strong>q和它在面中的位置没关系?/strong>Q只要创建出该dom元素d?document 中即可?/div></div><div>2. 如果需要在<strong>固定位置</strong>异步生成元素的内容,那么可以在该固定位置讄一个dom元素作ؓ(f)目标Q这样就知道位置了,异步加蝲之后可以对q个元素q行修改?/div><div></div><div></div><div></div><div><strong>六、JS 模块化管?/strong></div><div>异步加蝲Q需要将所?js 内容按模块化的方式来切分l织Q其中就存在依赖关系Q而异步加载不保证执行序?/div><div>另外Qnamespace 如何理 {相关问题。这部分已超出本文内容,可参考:(x)</div><div><a rel="nofollow" target="_blank" style="color: #6a3906; text-decoration: none; ">RequireJS</a> ?nbsp;<a rel="nofollow" target="_blank" style="color: #6a3906; text-decoration: none; ">CommonJS</a> 以及(qing) 王保q?淘宝)?nbsp;<a rel="nofollow" target="_blank" style="color: #6a3906; text-decoration: none; ">SeaJS</a> ?qing)?a rel="nofollow" target="_blank" style="color: #6a3906; text-decoration: none; ">博客</a> ?/div><div></div><div><strong>七、JS最?jng)_践:(x)</strong></div><div>1. 最化 js 文gQ利用压~工具将其最化Q同时开启http gzip压羃。工P(x)</div><div>2. 量不要攑֜ <head> 中,量攑֜面底部Q最好是</body>之前的位|?/div><div>3. 避免使用 document.write Ҏ(gu)</div><div>4. 异步加蝲 js Q用非d方式Q就是此文内宏V?/div><div>5. 量不直接在面元素上?Inline JavascriptQ如onClick 。有利于l一l护和缓存处理?/div></div><br /><img src ="http://www.tkk7.com/hongqiang/aggbug/384555.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/hongqiang/" target="_blank">张慧</a> 2012-08-01 21:50 <a href="http://www.tkk7.com/hongqiang/archive/2012/08/01/384555.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用hjquery库文件的理由http://www.tkk7.com/hongqiang/archive/2012/08/01/384553.html张慧张慧Wed, 01 Aug 2012 13:43:00 GMThttp://www.tkk7.com/hongqiang/archive/2012/08/01/384553.htmlhttp://www.tkk7.com/hongqiang/comments/384553.htmlhttp://www.tkk7.com/hongqiang/archive/2012/08/01/384553.html#Feedback1http://www.tkk7.com/hongqiang/comments/commentRss/384553.htmlhttp://www.tkk7.com/hongqiang/services/trackbacks/384553.html使用hjquery库文件的理由
q前端开?/a>看到Q那些引用jquery的文仉些网站,好多是用谷歌的库;像这L(fng)<script type=”text/javascript”src=”http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js“></script>(最q发展到1.7.1版本的,好神速呐Q前两天q看C哥们用的1.2.6感慨啊。。。?
像上面这样加载j(lu)query通过h的CDN-Content Delivery NetworkQ内容分发网l)来让你的|站加蝲jquery库文件。有的同学可能会(x)问了Qؓ(f)什么要加蝲h的jquery库文件呢Q(PSQ我们一般不 都是加蝲自己服务器上的jquery库文件的吗?Q。呵呵~~之前也和大家一h的,也一直都是加载自q服务器上的jquery文g?/span>
下面我来和大家说_(d)使用h加蝲jquery库文件的好处?/span>
1Q增加网늚同时载入速度
Z避免服务的过载,览器限制了同时q接的数目,依据不同的浏览器Q这个限制可能是每个机房仅仅两个之少?/span>
使用h的AJAX内容服务|络来响应你的网站,使你本地服务器上更多服务可以同时q行?/span>
2Q减等待时?/span>
大家应该也差不多Q在感慨jquery的强大,也在感慨jquery的团队也是如此之强大Q呵呵~现在最新的jquery已经出到1.7.1版本了呢Q但是让人很不爽的是即是mini压羃q后的代码都?3.2KB。但是不知道大家有没有去官方首页看过?/span>
CDN-Content Delivery NetworkQ内容分发网l)的羃写,通过各种各样的服务途径把你的一些静态内容分散开来,当用L(fng)览器提交这些文件的链接hQ他们便?x)自动下载网l上最q的可用的文件?/span>
因ؓ(f)q个原因QQ何用你的服务的用户从谷歌下载JQuery库都获得比从你自己的服务器上下载更快的速度。其实有很多的CDN服务可与h的相比拟Q但是他们很难超谷歌的免费服务的优势,q个益处以军_问题Q但q仅仅是一部分?/span>
3Q更好的~存
利用hAJAX图书馆内容发布服务的最大好处是你的用户Ҏ(gu)不需要下载j(lu)Query. 不论你的~存多么强大Q如果你用自q服务器提供jQueryQ那么你的用戯要下蝲一ơ它Q某个用户很有可能在他们览器的~存区里下蝲了许多完全相 同的jQuery.min.js的拷贝版本,但是当他们第一ơ访问你的网站的时候,q些拯版本?x)被忽略?/span>
另一斚wQ当览器检到同样版本的指向谷歌的链接Q它?yu)׃?x)知道q是下蝲同一个文Ӟ不仅是谷歌的服务器会(x)q回一?04Q不需要修Ҏ(gu)件的指o(h)Q即服务器上的文件未改动q)来回复一个重复的hQ而且?x)命令浏览器的缓存该文g长达一q的旉。http://www.jqueryba.com/14.html
q意味着即一些h讉K了数癄使用h服务的jQuery|站,他们只需要下载一ơ就够了?/span>
不过好像最q天朝对h的东西有点反感呀Q就像以前谷歌生气出走香港一P有的时候谷歌的东西?x)打不开Q那么会(x)不会(x)有一天用这U方式加载j(lu)query库文件也?x)失败呢Q呵呵~~万事皆有可能Q呵呵~不要紧,此处有一个万全的Ҏ(gu)Q?/span>
 <script type=text/javascript src=”http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js”></script>
<script>!window.jQuery && document.write(‘<script src=”jquery-1.7.1.min.js”><\/script >’);</script>
上面的代码攑ֈ你的html代码的头部。意义是q样的:(x)首先d载谷歌的jquery库文Ӟ如果没有加蝲成功的话Q那么就只好加蝲自己服务器上的jquery库文件咯?/span>

张慧 2012-08-01 21:43 发表评论
]]>
վ֩ģ壺 ŷa߹ۿ| ԻAVƬѲŲ| ձƷþþþþþþ| պAVһ| ޶߹ۿ| ޹һƵ| þþþAVۿ| ϸëƬ| ˳Ƶ߹ۿվ| ˰ձƵ| ޹˳߹ۿ69վ| þþ޾ҺҺҺ | һëƬ߲| ޹һ| ޾ƷҺһ| һ| ˬִ̼ëƬ| avպav| Ƶһ| 18ڵվ| ޸avվ| avۺ| 18ڵѹۿվ| ߹ۿѲ| Ƶ߹ۿվ| ɫƵ| ˾վ߹ۿ| аӰԺ߹ۿ| ҹƬ| վۿƵ| AVþƷ鵺̳ | ޳av߹ۿվ| һ| ձ| ƷavƬ| պ伤Ƶ߲| պ޹| ɫ͵͵ۺAV| ŷ޾Ʒ99ëƬѸۿ| Ļһ| AVһδ|