优大网

分类存档: 开发 ( 4 / 8)

超实用的JavaScript技巧及最佳实践(下)

http://www.csdn.net/article/2014-01-06/2818025-Useful-JavaScript-Tips-Best-Practices

摘要:JavaScript是一门非常流行的编程语言,许多开发者都会把JavaScript选为入门语言,本文向大家分享JavaScript开发的小技巧、最佳实践等非常实用的内容。

在前段时间,CSDN研发频道发表了超实用的JavaScript技巧及最佳实践(上),很多开发者都觉得里面所提到的技巧非常实用,基于此,我们再向大家推荐超实用的JavaScript技巧及最佳实践(下),希望对大家有所帮助。

文中所提供的代码片段都已经过最新版的Chrome 30测试,该浏览器使用V8 JavaScript引擎(V8 3.20.17.15)。

1.使用逻辑符号&&或者||进行条件判断

 

  1. var foo = 10;
  2. foo == 10 && doSomething(); // is the same thing as if (foo == 10) doSomething();
  3. foo == 5 || doSomething(); // is the same thing as if (foo != 5) doSomething();

||也可以用来设置函数参数的默认值

  1. Function doSomething(arg1){
  2.     Arg1 = arg1 || 10; // arg1 will have 10 as a default value if it’s not already set
  3. }

2.使用map()方法来遍历数组 

 

  1. var squares = [1,2,3,4].map(function (val) {
  2.     return val * val;
  3. });
  4. // squares will be equal to [1, 4, 9, 16]

3.舍入小数位数 

 

  1. var num =2.443242342;
  2. num = num.toFixed(4);  // num will be equal to 2.4432

4.浮点数问题 

 

  1. 0.1 + 0.2 === 0.3 // is false
  2. 9007199254740992 + 1 // is equal to 9007199254740992
  3. 9007199254740992 + 2 // is equal to 9007199254740994

0.1+0.2等于0.30000000000000004,为什么会发生这种情况?根据IEEE754标准,你需要知道的是所有JavaScript数字在64位二进制内的都表示浮点数。开发者可以使用toFixed()和toPrecision()方法来解决这个问题。

5.使用for-in loop检查遍历对象属性 

下面这段代码主要是为了避免遍历对象属性。

 

  1. for (var name in object) {
  2.     if (object.hasOwnProperty(name)) {
  3.         // do something with name
  4.     }
  5. }

6.逗号操作符 

 

  1. var a = 0;
  2. var b = ( a++, 99 );
  3. console.log(a);  // a will be equal to 1
  4. console.log(b);  // b is equal to 99

7.计算或查询缓存变量 

在使用jQuery选择器的情况下,开发者可以缓存DOM元素

 

  1. var navright = document.querySelector(‘#right’);
  2. var navleft = document.querySelector(‘#left’);
  3. var navup = document.querySelector(‘#up’);
  4. var navdown = document.querySelector(‘#down’);

8.在将参数传递到isFinite()之前进行验证 

 

  1. isFinite(0/0) ; // false
  2. isFinite(“foo”); // false
  3. isFinite(“10”); // true
  4. isFinite(10);   // true
  5. isFinite(undifined);  // false
  6. isFinite();   // false
  7. isFinite(null);  // true  !!!

9.在数组中避免负向索引 

 

  1. var numbersArray = [1,2,3,4,5];
  2. var from = numbersArray.indexOf(“foo”) ;  // from is equal to -1
  3. numbersArray.splice(from,2);    // will return [5]

确保参数传递到indexOf()方法里是非负向的。

10.(使用JSON)序列化和反序列化 

 

  1. var person = {name :’Saad’, age : 26, department : {ID : 15, name : “R&D”} };
  2. var stringFromPerson = JSON.stringify(person);
  3. /* stringFromPerson is equal to “{“name”:”Saad”,”age”:26,”department”:{“ID”:15,”name”:”R&D”}}”   */
  4. var personFromString = JSON.parse(stringFromPerson);
  5. /* personFromString is equal to person object  */

11.避免使用eval()或Function构造函数 

eval()和Function构造函数被称为脚本引擎,每次执行它们的时候都必须把源码转换成可执行的代码,这是非常昂贵的操作。

 

  1. var func1 = new Function(functionCode);
  2. var func2 = eval(functionCode);

12.避免使用with()方法 

如果在全局区域里使用with()插入变量,那么,万一有一个变量名字和它名字一样,就很容易混淆和重写。

13.避免在数组里使用for-in loop

而不是这样用:

 

  1. var sum = 0;
  2. for (var i in arrayNumbers) {
  3.     sum += arrayNumbers[i];
  4. }

这样会更好: 

 

  1. var sum = 0;
  2. for (var i = 0, len = arrayNumbers.length; i < len; i++) {
  3.     sum += arrayNumbers[i];
  4. }

因为i和len是循环中的第一个语句,所以每次实例化都会执行一次,这样执行起来就会比下面这个更快:

 

 

  1. for (var i = 0; i < arrayNumbers.length; i++)

为什么?数组长度arraynNumbers在每次loop迭代时都会被重新计算。 

14.不要向setTimeout()和setInterval()方法里传递字符串

如果在这两个方法里传递字符串,那么字符串会像eval那样重新计算,这样速度就会变慢,而不是这样使用:

 

  1. setInterval(‘doSomethingPeriodically()’, 1000);
  2. setTimeOut(‘doSomethingAfterFiveSeconds()’, 5000);

相反,应该这样用: 

 

  1. setInterval(doSomethingPeriodically, 1000);
  2. setTimeOut(doSomethingAfterFiveSeconds, 5000);

15.使用switch/case语句代替较长的if/else语句 

 

如果有超过2个以上的case,那么使用switch/case速度会快很多,而且代码看起来更加优雅。

16.遇到数值范围时,可以选用switch/casne 

 

  1. function getCategory(age) {
  2.     var category = “”;
  3.     switch (true) {
  4.         case isNaN(age):
  5.             category = “not an age”;
  6.             break;
  7.         case (age >= 50):
  8.             category = “Old”;
  9.             break;
  10.         case (age <= 20):
  11.             category = “Baby”;
  12.             break;
  13.         default:
  14.             category = “Young”;
  15.             break;
  16.     };
  17.     return category;
  18. }
  19. getCategory(5);  // will return “Baby”

17.创建一个对象,该对象的属性是一个给定的对象 

可以编写一个这样的函数,创建一个对象,该对象属性是一个给定的对象,好比这样:

 

  1. function clone(object) {
  2.     function OneShotConstructor(){};
  3.     OneShotConstructor.prototype= object;
  4.     return new OneShotConstructor();
  5. }
  6. clone(Array).prototype ;  // []

18.一个HTML escaper函数 

 

  1. function escapeHTML(text) {
  2.     var replacements= {“<“: “<“, “>”: “>”,”&”: “&”, “\””: “””};
  3.     return text.replace(/[<>&”]/g, function(character) {
  4.         return replacements[character];
  5.     });
  6. }

19.在一个loop里避免使用try-catch-finally 

try-catch-finally在当前范围里运行时会创建一个新的变量,在执行catch时,捕获异常对象会赋值给变量。

不要这样使用:

 

  1. var object = [‘foo’, ‘bar’], i;
  2. for (i = 0, len = object.length; i <len; i++) {
  3.     try {
  4.         // do something that throws an exception
  5.     }
  6.     catch (e) {
  7.         // handle exception
  8.     }
  9. }

应该这样使用: 

 

  1. var object = [‘foo’, ‘bar’], i;
  2. try {
  3.     for (i = 0, len = object.length; i <len; i++) {
  4.         // do something that throws an exception
  5.     }
  6. }
  7. catch (e) {
  8.     // handle exception
  9. }

20.给XMLHttpRequests设置timeouts  

如果一个XHR需要花费太长时间,你可以终止链接(例如网络问题),通过给XHR使用setTimeout()解决。

 

  1. var xhr = new XMLHttpRequest ();
  2. xhr.onreadystatechange = function () {
  3.     if (this.readyState == 4) {
  4.         clearTimeout(timeout);
  5.         // do something with response data
  6.     }
  7. }
  8. var timeout = setTimeout( function () {
  9.     xhr.abort(); // call error callback
  10. }, 60*1000 /* timeout after a minute */ );
  11. xhr.open(‘GET’, url, true);
  12. xhr.send();

此外,通常你应该完全避免同步Ajax调用。 

21.处理WebSocket超时

一般来说,当创建一个WebSocket链接时,服务器可能在闲置30秒后链接超时,在闲置一段时间后,防火墙也可能会链接超时。

为了解决这种超时问题,你可以定期地向服务器发送空信息,在代码里添加两个函数:一个函数用来保持链接一直是活的,另一个用来取消链接是活的,使用这种方法,你将控制超时问题。

添加一个timeID……

 

  1. var timerID = 0;
  2. function keepAlive() {
  3.     var timeout = 15000;
  4.     if (webSocket.readyState == webSocket.OPEN) {
  5.         webSocket.send(”);
  6.     }
  7.     timerId = setTimeout(keepAlive, timeout);
  8. }
  9. function cancelKeepAlive() {
  10.     if (timerId) {
  11.         cancelTimeout(timerId);
  12.     }
  13. }

keepAlive()方法应该添加在WebSocket链接方法onOpen()的末端,cancelKeepAlive()方法放在onClose()方法下面。
 

22.记住,最原始的操作要比函数调用快

对于简单的任务,最好使用基本操作方式来实现,而不是使用函数调用实现。

例如

 

  1. var min = Math.min(a,b);
  2. A.push(v);

基本操作方式: 

 

  1. var min = a < b ? a b;
  2. A[A.length] = v;

23.编码时注意代码的美观、可读 

JavaScript是一门非常好的语言,尤其对于前端工程师来说,JavaScript也非常重要,点击 这里可以访问更多优秀的JavaScript资源。

来自: flippinawesome.org

直接拿来用!最火的Android开源项目(一)

http://www.csdn.net/article/2013-05-03/2815127-android-open-source-projects

摘要:对于开发者而言,了解当下比较流行的开源项目很是必要。利用这些项目,有时能够让你达到事半功倍的效果。为此,CSDN特整理了GitHub上最受欢迎的Android及iOS开源项目,本文详细介绍了20个Android开源项目。

GitHub在中国的火爆程度无需多言,越来越多的开源项目迁移到GitHub平台上。更何况,基于不要重复造轮子的原则,了解当下比较流行的Android与iOS开源项目很是必要。利用这些项目,有时能够让你达到事半功倍的效果。为此,CSDN特整理了在GitHub平台上最受欢迎的Android及iOS开源项目,以飨开发者。

下面,就让我们一起来看看,在GitHub平台上,究竟有哪些Android开源项目最火,也最受开发者欢迎。

1. ActionBarSherlock

ActionBarSherlock应该算得上是GitHub上最火的Android开源项目了,它是一个独立的库,通过一个API和主题,开发者就可以很方便地使用所有版本的Android动作栏的设计模式。

对于Android 4.0及更高版本,ActionBarSherlock可以自动使用本地ActionBar实现,而对于之前没有ActionBar功能的版本,基于Ice Cream Sandwich的自定义动作栏实现将自动围绕布局。能够让开发者轻松开发一款带动作栏(Action bar)的应用,并且适用于Android 2.x及其以上所有版本。

详情请参考:ActionBarSherlock

2. facebook-android-sdk

Facebook SDK for Android是一个开源库,允许开发者将Facebook集成到所开发的Android应用中。

如果想要获取更多关于示例、文档、将SDK集成到App中、源代码等信息,可直接登陆Facebook Developers查看。

3. SlidingMenuSlidingMenu Demos

SlidingMenu是一个开源的Android库,能够让开发者轻松开发一款应用,实现类似于Google+、Youtube和Facebook应用中非常流行的滑动式菜单。

  

使用SlidingMenu的Android应用:

 

 

4. cocos2d-x

在移动开发领域,将Cocos2D-X用于主流iOS/Android游戏开发的公司、开发团队多不胜数。cocos2d-x是一个开源的支持多平台的2D游戏框架,使用C++开发,基于cocos2d-iphone,在MIT许可证下发布。主分支在GitHub上使用OpenGL ES 2.0渲染,而旧版gles11分支则使用OpenGL ES 1.1渲染。

支持iOS、Android、Windows Phone 8、Bada、BlackBerry、Marmalade、Windows、Linux等多个平台。支持C++、Lua、JavaScript编程语言。

5. android

GitHub Android App是GitHub开源的Android客户端,支持Issues、Gists,并集成了新闻Feed,能够让你及时跟进组织及关注的开发者、库等。同时,该应用还提供了一个用户快速访问你所创建、监控及发布issue的面板,可查看并将问题加入到收藏夹,可对标签、里程碑和任务进行过滤配置。

android资源库包含了GitHub Android App的所有源代码。

6. Android-ViewPagerIndicator

ViewPager指针项目,在使用ViewPager的时候能够指示ViewPager所在的位置,就像Google Play中切换的效果一样,还能使用在应用初始化的介绍页面。

兼容Android支持库的ViewPager及ActionBarSherlock,最初是基于Patrik Åkerfeldt的ViewFlow,开发者可以直接登陆Google Play下载该项目的演示应用。

7. MonoGame

MonoGame是一个Microsoft XNA 4.x Framework的开源跨平台实现。用于让XNA开发者将他们在Xbox 360、Windows & Windows Phone上开发的游戏移植到iOS、Android、Mac OS X、Linux及Windows 8 Metro上,目前,PlayStation Mobile & Raspberry PI的开发正在进行中。

详情请参考:MonoGame

8. Android-PullToRefresh

该项目用于为Android提供一个可重用的下拉刷新部件。它最初来源于Johan Nilsson的库(主要是图形、字符串和动画),但这些后来都已被取代。

9. android-async-http

android-async-http是Android上的一个异步、基于回调的HTTP客户端开发包,建立在Apache的HttpClient库上。

10. Android-Universal-Image-Loader

Android上最让人头疼的莫过于从网络获取图片、显示、回收,任何一个环节有问题都可能直接OOM,这个项目或许能帮到你。

Universal Image Loader for Android的目的是为了实现异步的网络图片加载、缓存及显示,支持多线程异步加载。它最初来源于Fedor Vlasov的项目,且自此之后,经过大规模的重构和改进。

11. GreenDroid

GreenDroid最初是由Cyril Mottier发起,是一个Android的UI开发类库,能够让UI开发更加简便,并且在应用中始终保持一致。

详情请参考:Cyril Mottier’s Blog

12. Anki-Android

AnkiDroid是一个免费、开源的Android的闪存应用,可直接从Google Play进行下载。

详情请参考:ankidroid

13. android-actionbar

Action bar是一个标识应用程序和用户位置的窗口功能,并且给用户提供操作和导航模式。在大多数的情况下,当开发者需要突出展现用户行为或在全局导航的activity中使用action bar,因为action bar能够使应用程序给用户提供一致的界面,且系统能够很好地根据不同的屏幕配置来适应操作栏的外观。

Action bar的主要目的:

 

  • 提供一个用于识别应用程序的标示和用户的位置的专用空间。
  • 在不同的应用程序之间提供一致的导航和视觉体验。
  • 突出Activity的关键操作,并且在可预见的方法内给用户提供快捷的访问。

 

14. android-viewflow

android-viewflow是Android平台上的一个视图切换的效果库,ViewFlow相当于Android UI部件提供水平滚动的ViewGroup,使用Adapter进行条目绑定。

 

15. android-mapviewballoons

当使用Android地图外部库(com.google.android.maps)时,android-mapviewballoons会提供一个简单的方式来对地图覆盖进行标注,就是一个简单的信息气泡。

它由BalloonOverlayView组成,是一个代表显示你的MapView及BalloonItemizedOverlay的气泡的视图,BalloonItemizedOverlay是ItemizedOverlay的一个抽象扩展。

16. PushSharp

一个向iOS(iPhone/iPad APNS)、Android(C2DM和GCM)、Windows Phone和Windows 8设备发送推送通知的服务器端库。

17. androidannotations

Android Annotations是一个开源的框架,用于加速 Android应用的开发,可以让你把重点放在功能的实现上,简化了代码,提升了可维护性。

18. HockeyKit

Hockey是一个iOS Ad-Hoc自动更新框架。苹果App Store中的所有App都可以使用它,它能够显著地提高Beta测试的整个过程,分为两部分:服务器和客户端框架。服务器组件需要所有脚本,但在没有客户端库的情况下,也可以单独工作。它提供一个Web接口,Beta测试者可以使用它来安装最新的AdHoc配置文件,也可以直接在设备上通过Safari安装最新的Beta版本。

 

  • 只需在服务器上安装一次服务端,就可以处理包标识符不同的多个应用程序(有开发者强烈建议对Debug、AdHoc Beta和AppStore发布版使用不同的包标识符)。
  • 默认当App启动或唤醒时,客户端会从服务器检测更新,用户可以在设置对话框中进行修改:一天一次或手动检查更新。
  • 除了支持iOS,HokeyKit也支持Android平台,不过Android版还处在Alpha阶段,支持OTA及应用内更新。
  • 为HockeyKit用户提供服务器托管服务。

 

19. android-menudrawer

Android上的菜单展示风格各异,其中用得最多且体验最好的莫过于左右滑动来显示隐藏的菜单,android-menudrawer是一个滑动式菜单实现,允许用户在应用当中实现无缝导航。该项目具有多种菜单展示效果,其中最常见的就是通过屏幕边缘拖动或点击动作栏的“向上”按钮显示。

 

实现功能:

 

  • 菜单可以沿着四个边放置。
  • 支持附加一个始终可见、不可拖动的菜单。
  • 菜单的内容和整个窗口都可以隐藏。
  • 可用于XML布局。
  • 显示当前可见屏幕的指示器。

 

20. android-flip

Aphid FlipView是一个能够实现Flipboard翻页效果的UI组件。

以上为GitHub上最受欢迎的Android开源项目TOP20,敬请期待“GitHub上最受欢迎的Android开源项目(二)”。

 

最常用的Java库一览

http://www.importnew.com/7530.html

本文由 ImportNew – 邢 敏 翻译自 programcreek。如需转载本文,请先参见文章末尾处的转载要求。

写在前面:

1) 本文列出的名单是根据我自己的调查,并结合个人的经验。有可能是它们不恰恰是最流行的,但至少众所周知的。

2) 我会不断更新这个列表,使之更加完整和准确。感谢您的意见。

一个典型的Java项目依赖于第三方库。本文总结的Java库适用于各种应用,比较流行并且广泛使用。其中一些还提供简单的示例(来自ProgramCreek)。

Java SDK 肯定是使用最广的库,所以本文的名单焦点是流行的第三方库。该列表可能并不完善,所以如果你觉得有什么应该出现在列表中的,请留下您的评论。非常感谢!

1、核心库

  • Apache Commons Lang:来自Apache的核心库,为java.lang API补充了许多常用的工具类,如字符串操作、对象的创建等。
  • Google Guava:来自谷歌的核心库,包括集合(Collection)、缓存(Caching)、支持原语(Primitives)等。(示例)

2、HTML、XML Parser

  • Jsoup:一个简化了的 HTML操作的库。(示例)
  • STaX:一组可以高效处理 XML的API。 (示例)

3、Web框架

  • Spring:Java平台上众所周知的开源框架和依赖注入容器。(示例)
  • Struts2:来自Apache的流行Web框架。 (示例)
  • Google Web Toolkit:Google提供的开发工具库,主要用于构建和优化复杂的Web程序用。 (示例)
  • Strips:使用最新Java技术构建的Web程序框架,推荐使用。
  • Tapestry:面向组件的框架,用于使用Java创建动态、健壮、扩展性高的Web应用程序。

请猛击这里 查看以上面框架之间的比较。

4、图表、报表、图像

  • JFreeChart:用于创建如条形图、折线图、饼图等图表。
  • JFreeReport:创建于输出PDF格式的报表。
  • JGraphT:创建图像,其中只包含由线段连接的点集。

5、窗口

SWT与Swing的比较

6.、GUI框架

7、自然语言处理

  • OpenNLP:来自Apache的自然语言处理库。 (示例)
  • Stanford Parser:斯坦福大学提供的自然语言处理库。(示例)

如果你是一名NLP专家,请猛击这里 查看更多工具库介绍。

8、静态分析

  • Eclipse JDT:由IBM提供的静态分析库,可以操作Java源代码。(示例)
  • WALA:可以处理jar包文件(即字节码)的工具库。(示例)

9、JSON

  • Jackson: 用于处理JSON数据格式的多用途的Java库。Jackson 旨在快速、准确、轻量、对开人员友好之间找到最好的平衡点。
  • XStream:一个简单用于对象和XML互相转换的库。
  • Google Gson:一个专门用于Java对象和Json对象相互转换的工具库。(示例)
  • JSON-lib:用于 beans、maps、collections、java arrays、XML 和 JSON 之间相互转换操作的工具库。

10、数学

  • Apache Commons Math:提供数学计算和数值统计需函数的工具库。

11、日志

  • Apache Log4j:风行一时的日志记录操作库。 (示例)
  • Logback:当前流行的log4j项目的继任者。
  • SLF4J(The Simple Logging Facade for Java): 各种日志框架的一个简单的外观或抽象(如java.util.logging 、logback、log4j等),允许用户在部署时加入需要的日志框架。

12、Office

  • Apache POI:利用其提供的APIs,可以使用纯Java代码操作各种基于微软OLE2合成文档格式的文档。
  • Docx4j:一个用于创建、操作微软公开的XML文件的库(支持Word docx、 Powerpoint pptx和Excel xlsx)。

13、日期和时间

  • Joda-Time:如有质量问题包退包换的Java日期和时间类。

14、数据库

  • Hibernate、EclipseLink、JPA
  • JDO
  • jOOQ
  • SpringJDBC、Spring Data
  • Apache DbUtils

15、开发工具

  • Lambok: 旨在减少代码编写的Java开发库。

开发者必备:测试网站速度的五个免费在线工具

http://www.csdn.net/article/2013-11-04/2817380-website-speed-testing-tools

摘要:网页性能很大程度上决定了用户体验,最终可以决定网站的成功。虽然大家都知道提高浏览速度的重要性,可很多时候不知道什么元素拖了后腿。本文将介绍测试网站速度的五个免费在线工具,帮你设计出高效的网站。

如果你认为一个网站建成后,工作就已经完成,你就大错特错了。你需要不断监测其可用性和可访问性,一个小问题,可能毁了一切。而网页载入速度对于一个网站来讲至关重要,试想一下,你喜欢进一个需要很长时间才载入完毕的网站吗?而且,搜索引擎对网页载入速度也提出了要求。“The web should be fast。”据悉,网站若没有在4秒内读取出来,大多数的访客就会选择离开,甚至Google也将网页载入速度作为网站排名的众多因素之一,唯有提升网站效能才能让你的网站访客更多、更快乐。

国外开发/设计网站DesignInstruct推荐了5个最具代表性的测试工具,将帮助你确保你的网站正常、高效工作。

1. Pingdom Website Speed Test

Pingdom是一个免费的网站速度测试工作,不仅是看起来非常棒,而且尽可能多的呈现出你的网站的各方面信息。它可测试网站加载速度,对页面和大小进行分析。测试完成后会得到一份非常详细的测试报告,包括图片、CSS等,告诉你哪些地方出现问题。

2. Load Impact

Load Impact是一款在线网站压力测试工具。只需要输入网址进行测试,其便可以统计出加载网站的一些详细载入数据。包括整体加载和站内图片,javascript, CSS等代码载入。测试完成之后,网站还可以存储测试过的统计数据。(注:如果你未注册该网站使用进行测试,那么你的网站性能信息可能会被公开在网上。)

测试有两种方案,虽然免费方案能够测试的虚拟访客比较少(免费仅能够测试10、20、30、40、50人同时在线上),但一般使用已经足够了!如果不够,可以考虑购买Premium Account服务。不过,其功能可能会对网站产生一定的压力,大家可别用它去DoS别人网站哦。

3. Google PageSpeed Insights

相信有接触前端开发的大神们都听说过Google官方的PageSpeed Tools,这个网页载入速度检测工具有在线版本也有一个 Chrome 扩展,叫PageSpeed Insights。

PageSpeed Insights 的Chrome扩展是由谷歌官方开发的一款可以分析页面载入的各个方面,包括资源、网络、DOM以及时间线等等信息的插件,安装以后会附加到Developer Tools(开发者工具)中。所以安装之后,大家只需要在页面上点击右键——审查元素,就可以在最后一个标签中看到PageSpeed了。

PageSpeed的分析基于一个分为五类的最佳实践列表:

  • 优化缓存——让你应用的数据和逻辑完全避免使用网络
  • 减少回应时间——减少一连串请求-响应周期的数量
  • 减小请求大小——减少上传大小
  • 减小有效负荷大小——减小响应、下载和缓存页面的大小
  • 优化浏览器渲染——改善浏览器的页面布局

去谷歌开发者官网看了看,发现PageSpeed 不仅仅只是个在线工具、插件那么简单,还有开发者使用的API、SDK;甚至还有可以安装在Apache或者Nginx服务器上的开源模块!

4. OctaGate SiteTimer

OctaGate SiteTimer 是一个在线的网页读取速度测试工具,效果图基于AJAX技术,而且它是所有工具里面最直观的;如果你就想知道你的网页里面哪个元素拖了后腿,就跑这个工具。它就一张图,告诉你每个网页元素下载需要时间。

5. GTmetrix

有些网站速度测试工具如Baidu仅提供页面元素加载时间;有些工具如Pingdom提供的Start Time、Connect Time、First Byte和Last Byte细分仍无法满足要求。功能更强大的GTmetrix是国外的一个免费评测网页载入速度的服务,可提供详细报告:显示出网页里每个元件载入、开启或存取的时间;而且会保存每一个网站的记录,方便查看一个网站载入速度的历史变化。

如果你想将报告设定为不公开、或是储存报告、定时检查网页评分的话,可以免费注册GTmetrix帐户。

测试的工具有很多,上述五个相对具有代表性,下面再简介三个:

  • Web Page Analyzer——可让用户测试网站速度以提升性能,同时可计算网页大小、 复杂度和下载时间。
  • WebPagetest——原本是由AOL开发内部使用的工具,后来在Google Code上开源,是一款非常优秀的网页前端性能测试工具。

如果你喜欢的测试工具不在上述中,也欢迎你在文章评论中发表自己的看法。(文/钱曙光 责编/魏兵)

图说Java

Top 8 Diagrams for Understanding Java

A diagram is sometimes worth 1000 words. The following diagrams are from Java tutorials on Program Creek, they have received the most votes so far. Hopefully, they can help you review what you already know. If the problem is not clear by the diagram itself, you may want to go to each article to take a further took.

 

1. String Immutability

The following diagram shows what happens for the following code:

String s = "abcd";
s = s.concat("ef");

string-immutability

2. The equals() and hashCode() Contract

HashCode is designed to improve performance. The contract between equals() and hasCode() is that:
1. If two objects are equal, then they must have the same hash code.
2. If two objects have the same hashcode, they may or may not be equal.

java-hashcode

3. Java Exception Class Hierarchy

Red colored are checked exceptions which must either be caught or declared in the method’s throws clause.

Exception-Hierarchy-Diagram

4. Collections Class Hierarchy

Note the difference between Collections and Collection.


5. Java synchronization

Java synchronization mechanism can be illustrated by an analogy to a building.

6. Aliasing

Aliasing means there are multiple aliases to a location that can be updated, and these aliases have different types.

Java Aliasing

7. Stack and Heap

This diagram shows where methods and objects are in run-time memory.

Java-array-in-memory

8. JVM Run-Time Data Areas

This diagram shows overall JVM run-time data areas.

JVM runtime data area

 

http://www.programcreek.com/2013/09/top-8-diagrams-for-understanding-java/

响应式导航设计案例解析(多图)

http://www.csdn.net/article/2013-10-10/2817135-responsive-navigation

摘要:导航设计包含多种设计元素,本文收集了响应式设计网站中各种主流的导航设计趋势,如果你想设计出更好的导航设计或者了解新的响应式设计潮流,那么这篇文章不容错过!

响应式导航的设计遵循了响应式Web设计理念,页面的设计往往会根据用户行为以及设备环境(系统平台、屏幕尺寸、屏幕定向等)进行相应的调整。通过同比例缩减元素尺寸、调整页面结构布局以及内容的优化调整等方式,使用户在不同的平台上有着独一无二的用户体验。

本文收集了响应式设计网站中各种主流的导航设计趋势,如果你想设计出更好的导航设计或者了解新的响应式设计潮流,那么这篇文章不容错过!

调整尺寸&定位

这是响应式导航设计首个步骤,也被视为最简约的方法。目的在于设计一款永不被隐藏且能优雅的调整窗口大小。设计简短的导航链接,让页面看起来更加简洁、亮丽。

Fiafo就是一款典型的案例。导航链接设计居右侧,当浏览器窗口被压缩后,链接呈现在Logo下方,就如同一个单一的导航栏。当你调整浏览器尺寸后,该页面也会随之而更改,完全不受影响。

这种设计风格非常具有吸引力,因为它不需要隐藏任何链接,无需CSS3或JavaScript,页面上任何条目都能显示出。最大的缺点是,该导航限制了最多链接数量。

Paid to Exist采用了另一种设计趋势,其链接是浮动的。当浏览器的尺寸缩小到最小尺寸时,该链接不会扩大到像100%宽度那样。其采用了区块层级设计元素,导航横向排列不变,由一行变为两行,页面简洁清晰且用户体验一致。

菜单选择样式

菜单选择在响应式导航设计中,被设计师认为一种较为棘手的设计。一起来看下设计案例。

Apache CouchDB的设计案例中可以看出,其设计布局呈现细长型且容易操控,因为它是一款单页面设计。

在移动设备上用户可能不会在意导航设计样式。导航菜单选择并不一定要采用漂亮的解决按干,只要它们能易于操作即可!

随着响应式设计的发展趋势,未来可能会有其他的解决方案来替代菜单选择。如果你需要一个快速的导航,且能够用支持所有的操作系统,那么HTML元素倒是个不错的选择。

覆盖下拉菜单

在响应式设计中,隐藏菜单是一个非常流行的设计趋势。这是因为它能为页面节省更多的空间。

在移动设备上,屏幕的运用是极其宝贵的,因此,你要尽可能地向用户提供更多的空间。采用下单隐藏菜单是个完美的选择,突出高优先级内容的处理方式。

Designmodo便采用了这种布局,通过设定图标点击对菜单进行收缩或展开,列表将显示新的下拉元素。

StickyGram采用了区块级别链接,不会因调整尺寸大小而有所更改,适用于任何设备,以最好的方式呈现在你的面前。


 Tilde Inc采用了模块下拉菜单设计。

下拉菜单的共通点是:默认情况下菜单隐藏,一旦用户需要导航链接,点击图标菜单展开,选中后菜单自动消失隐藏,下一次操作时重复。优点是不会影响其他的页面内容。

多级导航

当你需要多个子链接的导航菜单,那么你不得不规划出一个完美的解决方案。 除了采用区块层级下拉菜单,你还可以选择创建多级导航菜单。

SonySony公司的网站设计为例。用户通过滚动页面找到任何他们想要的内容。

页脚链接

一旦用户点击导航按钮,它会自动跳转到采用哈希元素ID的页脚。用户可以快速访问页脚链接,无需手动滚动。

再来看下Contents Magazine设计风格,只有几个少有的顶部导航链接。调整浏览器,你就会看到一个搜索栏,并且会呈现出一些模块链接。目的是在于保持页面布局均匀,而无需额外的脚本,比如jQuery。

隐藏滑动菜单

这种设计趋势在Apple Store里经常可看到,这也是备受iOS开发者欢迎的设计风格。

虽然在CSS3中可创建这种效果,但请记住,不是所有浏览器都能支持。jQuery倒是个更加稳定的选择,甚至还有一些免费的开源插件可供你选择。

点击查看Sequence的设计风格。

英文出自:Teamtreehouse

5款工具助你写出更好的Java代码

摘要:工欲善其事,必先利其器。一名优秀的开发者手里肯定握着不少秘密武器,本文开发者分享了他在开发Java项目时,所用到的5款有助于提高代码质量的工具。

作者在IDR解决方案中,一直寻找方法来编写出更好的代码,后来他们发现,通过使用一些工具使用好的工具不仅可以提高代码质量,还可以提高开发人员的工作效率。在本文,作者将介绍5款在IDR解决方案的(开发语言为Java)中,最常用也最实用的工具给Java开发人员,希望它们帮你开发出更好的代码。

1.FindBugs

顾名思义,FindBugs是一款帮助开发者发现bug的工具,它是一个开源项目,遵循GNU公共许可协议,运行的是Java字节码而不是源码。

它是一款静态分析工具,它检查类或者JAR文件,将字节码与一组缺陷模式进行对比来发现可能存在的问题,这些问题包括空指针引用、无限递归循环、死锁等。

FindBugs在发现错误后,会进行等级划分,它把发现的错误分为四个等级:

 

  1. scariest(恐怖的)
  2. scary(吓人的)
  3. troubling(令人困扰的)
  4. of concern(值得关注的)

 

FindBugs是一个独立的GUI应用程序,有多种使用方式,可以作为Eclipse、NetBeans、IntelliJ IDEA插件使用,也可以从命令行、Ant、Maven使用。

2.Apache Ant

Apache Ant是由Apache软件基金会所提供的一款开源软件,是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,主要用于Java环境中进行软件开发,它还可以用于构建C或C++应用程序,也可以针对目标任务运用在多种软件开发过程上。

Apache Ant有大量商用或开源的“antlibs”供大家使用,它非常灵活,因为他对编码约定或目录布局都是没有任何限制的。Apache Ant被广泛运用在各种Java IDE环境中,如Eclipse、NetBeans、IntelliJ IDEA等。

3.JProfiler

JProfiler是一个商业授权的Java剖析工具,由EJ技术有限公司开发,主要是针对Java EE和Java SE应用程序使用。它把CPU、内存和线程分析析组合在一个强大的应用中,从而可以用来分析性能瓶颈、内存泄漏、CPU负载以及线程问题。

JProfiler支持多种剖析模式:本地会话实时分析模式、远程会话实时分析模式、离线分析模式、快照比较、查看HPROF快照。此外,JProfiler既可以作为单独的应用程序使用,也可以作为一个插件使用,也可以在Adobes Coldfusion和Glassfish中作为应用服务器集成的一部分。

4.Bash

全称是Bourne-Again SHell,发布于1989年。它是一个Unix shell或命令式语言解析器,它作为GNU项目,是Bourne shell的一个免费替代。它在GNU操作系统上作为shell被广泛运用,它已是大多数Linux系统以及Mac OS X v10.4默认的shell,它能运行于大多数Unix风格的操作系统之上,甚至被移植到了Microsoft Windows上的Cygwin系统中,以实现Windows的POSIX虚拟接口。此外,它也被DJGPP项目移植到了MS-DOS上。

它通常被用作一个命令处理器,通常运行在一个文本窗口,它还可以从文件中读取各种命令、支持通配符的文件名、piping、命令替换、变量、控制结构等用来进行条件或迭代测试。

5.Sonarqube

Sonarqube是一个开源平台,是一款代码质量管理和环境搭建工具。它目前支持25种以上语言,包括Java、C/C++、C#、PHP、Flex、JavaScript、Python、PL/SQL、COBOL等,此外,它还可以作为Android开发的一部分。

它提供了完全自动化的分析工具,并且可以与Maven、Ant、Gradle和其它集成工具很好地集成,也可以与Java IDE进行很好的集成。它还可以用于报告重复的代码、编码标准、单元测试、代码覆盖率、复杂的代码、潜在的bug、评论、设计和架构。

来自:IDR solutions

http://www.csdn.net/article/2013-09-06/2816856-5-tools-to-help-you-write-better-Java-Code

有胆你就来!11个在线编码大赛

摘要:只要你敢挑战自己,那么都可以在文中提及的这些平台上展示、PK你的编码技能。或许你就是下一个幸运儿,让你有机会在这些大公司实习或工作。感兴趣的话就来试试吧!

如果你拥有出色的编码技能,或者虽然你只是名初学者,但你愿意去锻炼自己的编码能力,愿意去和顶尖的编码者进行PK,那么这篇文章就是为你而准备的。本文提供了11个在线编码竞赛,与来自世界各地的编码人员进行PK。

文中提及的这些网站都有各自的实践问题、训练课程以及竞赛试题。另外,这些项目的赞助商(包括微软、IBM、Facebook等)公司负责人也在密切关注此项目,或许你就是下一个幸运儿,让你有机会在这些大公司实习或工作。感兴趣的话就来试试吧!

Topcoder

TopCoder可以说是全球最大的竞赛软件开发社区,全球各地的开发者都会来此参加比赛。该社区提供各种类型的编程竞赛,包括算法、测试、设计、组装、SRM、马拉松等。赞助商包括微软和NSA等一些巨头公司为获奖者提供现金奖励。提交的解决方案可以采用的语言有:Java、C++、C#或VB。

CodeChef

CodeChef是一个非营利性组织,这是印度的一家软件公司DirectI提供的,总部设在孟买。它是一个全球性的编程社区,举办网上竞赛、培训等各种活动。

Sphere online judge (SPOJ)

Sphere online judge是最早的竞赛网站之一,支持超过40种编程语言以及编译器。如今,SPOJ平台已经建立了在线评测系统,用于自动评估用户提交的项目。

CodingBat

CodingBat是一个现场编程网站,支持利用Java和Python构建的相关问题。该问题提供即时反馈,此外,它还可以作为编码者实践和掌握编程基础知识的实用平台。

Google Code Jam

由谷歌公司推出的Google Code Jam是一年一度的编程竞赛。在这里,专业人士和学生程序员可自主选择编程语言在有限的时间内挑战复杂的算法竞赛。

Dream in Code

Dream In Code (DIC)是一个专为程序员和Web开发者提供的在线社区。该社区会员可以免费访问成千上万的编程教程、代码片段、论坛主题等。

Codeforces

Codeforces是一个在线编程平台,基于该平台你可以练习各种问题,提交竞赛试题并与其他用户提交的问题进行PK。

UVa Online Judge

这个在线编码网站是由西班牙Valladolid(巴利亚多利德)大学维护。在这里你可以找到以往编程竞赛各种类型问题,包括ACM国际编程大赛;此外你还可以提交各种编程语言的源代码。

Python Challenge

以Python为主,Python Challenge是个系列性的编程竞赛。尽管任何一门语言都可用来解决这个问题,但倘若你用Python,将更加有助于你理解问题。

Facebook Puzzles

顾名思义,这套编程问题是由Facebook提供的。用户可以利用各种语言提交解决方案,包括C++、C、Haskell、Java、Perl、PHP、Python、Ruby。

ACM-ICPC

ACM – ICPC是世界上最大的编程竞赛之一,每年举行一次。该竞赛是由IBM为学生团队组织的。这个竞赛主要涉及编程算法问题。从各个地区中选拨,最终进入世界级总决赛。目前支持两种语言:C/C++和Java。

值得一提的是,还有一些平台也不错,它们是 IEEEXtremehackers.orgTimus Online JudgeDWITE

英文出自: Efytimes

http://www.csdn.net/article/2013-09-03/2816800-Online-Coding-Contests-For-Programmers

积少成多:十大高效原型设计工具

摘要:本文为开发者介绍了对开发者最有效的原型工具。免费的工具现在越来越多,如何在众多工具中找到最有效,最适合自己的工具成为了开发者的难题,答案就在这里。

免费的工具其实有很多,但是哪款工具可以名副其实地提高你的效率呢?我们会在接下来的时间为大家总结出移动和Web原型设计的工具。拥有一个原型设计的工具库对于开发者,特别是对那些需要立刻针对客户反馈进行修改的开发者来说,可以提高他们的工作效率。开发者也可以根据客户的不同需求设计出不同版本的原型设计。

Pencil

Pencil是一款开源的手绘风格原型图绘制工具,可以用来绘制各种架构图和流程图。Pencil向开发者提供一个免费、开源的GUI原型工具,具备了多种原型设计模板、多页背景文档、跨页超链接、富文本编辑支持等功能,安装十分简单。

Balsamiq Mockups

使用Balsamiq Mockups有一种画画的感觉,而且由于这一切是数字化的,“画家”们可以简单地进行修改。一个开发团队需要对界面设计进行反复地修改。有了Balsamiq Mockups,产品经理、开发者甚至是客户可以坐在一起,用同一个工具共同修改。达成统一之后,开发者再进行代码的编写。

Lumzy

作为一款针对Web和应用的原型工具,Lumzy无需注册、无需下载,可以在浏览器上进行原型设计的工具。功能全面但并不复杂,这就是Lumzy最大的特点。

Jumpchart

Jumpchart其实不仅仅是一个项目管理软件,它基于Web,用于快速规划和创建原型。除了所需的项目管理功能,还可用它来追踪与Web设计相关的任务。Jumpchart有一个免费版本,不过功能受限。

Mockup Builder

Mockup Builder是一款原型设计工具,支持网页、桌面应用、移动应用。此工具具有UI模型,交互的线框图,页面布局,客户端原型甚至站点地图和屏幕导航等功能。这是一款完全免费的开发工具。

UXPin

UXPin是一款大众化的原型设计工具。UXPin公司里面经验丰富的UX设计人员提供了一系列完整实用的设计元素和模式,对新手有极大帮助。UXPin的目标是帮助项目经理为各种方案和设备开发响应式的线框图和UI原型。

iPlotz

iPlotz可以帮助你迅速创建一个可以点击的界面和网页原型的布局。iPlotz是基于Flash/Flex平台上的产品原型设计软件,允许你直接将各种元件通过鼠标的拖拽至画布上构建自己的Web项目;另外iPlotz还提供了基于Adobe AIR的客户端软件,从而能够方便用户在Windows、Mac OS X和Linux等不同平台上使用这款软件。

MockFlow

不仅是页面布局,MockFlow为开发者提供了一系列的写作Web创新服务,它是完全基于Web浏览视窗的产品。MockFlow内置了许许多多经常使用到的Widget控件,能够有效地帮助用户提高对传统软件以及富互联网应用软件的快速设计和交互式用户界面实体模型的规划进程。

Cacoo

Cacoo是一款用户在线绘图工具,允许你在线创建站点的原型、UML统一建模和框架图等。这款工具基于Flash技术,具有良好的用户体验。与此同时,Cacoo还支持实时的同步协作功能,允许多个用户同时对同一幅电子图表进行在线远程协作编辑等。

Creately

Creately在线图表制作协作平台是一款优秀的绘制产品原型的在线工具。Creately拥有50种图表、上千种样品构成的库和强大的协作功能,因此用起来很方便。

(文/侯亭 责编/张宁)

文章来源:smashingapplumzyCreately

http://www.csdn.net/article/2013-09-03/2816802-10-useful-prototype-tool

直接拿来用!10段超有用的Git命令行代码

 

摘要:本文分享了10条非常有用且先进的Git命令行语句,无论是运用在团队环境或是在私人项目中,你都可以直接来拿用。

本文分享了10条非常有用且先进的Git命令行语句,无论是运用在团队环境或是在私人项目中,你都可以直接来拿用。

1.  在最后提交中更改Export(Export changes done in last commit 

这个命令通常会使用定期发送已更改的项目,以方便其他人审查/集成。

 

1
git archive -o ../updated.zip HEAD $(git diff --name-only HEAD^)

 

2.  在两次提交之间更改Export文件(Export changed files between two commits)

同样地,如果你需要在两次提交之间更改文件,可以选择以下这段代码。

 

1
git archive -o ../latest.zip NEW_COMMIT_ID_HERE $(git diff --name-only OLD_COMMIT_ID_HERE NEW_COMMIT_ID_HERE)

3. 克隆一个特定的远程分支(Clone a specific remote branch) 

 

如果你想从远程资源库中克隆一个特定的分支,而无需克隆整个资源库分支,那么下面的这段代码将对你有用。
 

 

 

1
2
3
git init 
git remote add -t BRANCH_NAME_HERE -f origin REMOTE_REPO_URL_PATH_HERE 
git checkout BRANCH_NAME_HERE

4.  从不相关的本地资源库中应用补丁(Apply patch from Unrelated local repository) 

这里有个快捷方式可帮助你实现。

 

1
2
view plaincopy to clipboardprint?
git --git-dir=PATH_TO_OTHER_REPOSITORY_HERE/.git format-patch -k -1 --stdout COMMIT_HASH_ID_HERE| git am -3 -k

5.  检查分支是否在其它分支中遭到更改(Check if your Branch changes are part of Other branch)

 

cherry这个命令,能够检查你的分支在其他分支中是否被更改。它会在当前的分支上显示变化,并注明+或-标识符。+代表不存在,-表示在现有的分支中存在。

 

1
2
3
4
view plaincopy to clipboardprint?
git cherry -v OTHER_BRANCH_NAME_HERE
#For example: to check with master branch 
git cherry -v master  <br>

 

6. 启动一个无历史记录的新分支( Start a new Branch with No History)

有时,你想启动一个新的分支,但并不想运行漫长的历史记录,例如,你想将代码放置在一个公共的域中(开源),但又不想共享历史。

 

1
git checkout --orphan NEW_BRANCH_NAME_HERE

7. 从其他分支签出文件但无需切换分支( Checkout File from Other Branch without Switching Branches 

这里将教你如何获取想要的文件。

 

1
git checkout BRANCH_NAME_HERE -- PATH_TO_FILE_IN_BRANCH_HERE

 

8. 忽略追踪文件中的更改( Ignore Changes in a Tracked File )

如果你是在某个团队中工作,他们都在使用同一个分支,也许你会频繁使用提取/合并(fetch/merge),但这有时需要重置特定的配置文件,这就意味着在每次合并后你必须去做更改。现在,使用这个命令,你可以要求Git忽略更改特定文件。

 

1
git update-index --assume-unchanged PATH_TO_FILE_HERE

9. 检查已提交部分是否在发布的版本中遭到更改(Check if committed changes are part of a release)
 

name-rev这个命令可以告诉你已提交到最新版本的某个位置。使用这个代码可帮助你检查,提交的部分是否在已发布版本中遭到更改。

1
git name-rev --name-only COMMIT_HASH_HERE

10. 用复位替代合并(Pull with rebase instead of merge )

当某项特性分支被合并到主流中,此时该分支合并会在Git中以合并提交来进行记录。但是当团队中多个成员在同一个分支上工作时,常规的合并会导致多个合并消息在日志中呈现混乱状态。因此,你可以使用复位(rebase)来保持历史清晰,清除无用的合并消息。

 

1
git pull --rebase

此外,你还可以通过配置一个特定的分支来复位。
 

 

1
git config branch.BRANCH_NAME_HERE.rebase true

英文出自: Webdeveloperplus

 

http://www.csdn.net/article/2013-08-22/2816665-10-useful-advanced-git-commands

较早的文章 较新的文章

Copyright © 2024 优大网 浙ICP备13002865号

回到顶部 ↑