优大网

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

超棒的30款JS类库和工具

摘要:对于Web设计人员和开发人员来说,手里有一套便利的、最新的工具可供使用是极其重要的。Web设计和开发的趋势变化极快,所以拥有最新的工具是必不可少的。因此小编今天为大家整理了30个JS类库和工具以供参考。

当设计人员和开发人员真正快速便捷的使用JavaScript类库和工具的同时,他们的生活也就变得更轻松、简单。你付出的越多,它回报你的也就越多,这正是JS类库和工具需求量很大的原因。

对于Web设计人员和开发人员来说,手里有一套便利的、最新的工具可供使用是极其重要的。Web设计和开发的趋势变化极快,所以拥有最新的工具是必不可少的。

可是要想找到质量高和效率高的工具并非易事,尤其是考虑到这种类型的工具它所带有的额外工具的可用性,并且,不是所有的工具都是高质量的。因此,寻找好的工具不仅仅是一项艰巨的任务,同时也很耗时。这就是为什么小编今天为大家提供30个JS类库和工具列表的原因。所有的工具都很有用,找出最能够满足你需要的那一个!

dynamo.js

这是一款使用很便捷的工具,它可以快速容易的创建HTML动态bits,为文本目录添加微妙效果。

Smoke.js

Smoke.js是一个轻量级且灵活的JS插件,只是用来替代原有的alert而已。它完全由HTML与CSS3构成,所以你能够自己添加样式来表现出个性化。

Holder.js

Holder.js可直接在客户端渲染图片的占位。支持在线和离线,允许轻松创建占位符,并快速使用可链接API(chainable API)风格。

Graphene

这款工具有惊人之处,有一个控制面板和绘图工具箱,使用起来很容易上手。

GMap

这是一款了不起的轻量级jQuery插件,用来将Google Maps插入到网页或者博客中。提供了更加简便的方法用于集成、管理和定制。

jPages

jPages是一个超给力的jQuery分页插件,它提供了很多丰富的新特性,例如自动翻页功能、可用键盘和鼠标滚动浏览、内容延迟显示、支持自定义分页导航菜单等等。使用起来很简单,效果也很出色。

Leaflet-JS Library

Leaflet是一个开源的基于移动开发的互动式地图JS库,代码量仅约28 KB。

JSZip

JSZip允许使用JS创建、阅读和编辑.zip文件。

Colors

这是一款非常有用的颜色处理类库,工作效率高,可以为项目选择正确的颜色。

Fitvids.js

这是另一款轻量、易用的jQuery插件,如果你需要你的视频能够自动适应网页的宽度,FitVids.js这个jquery插件可以帮助你。

Stroll.js

这些滚动效果是纯粹使用CSS3所实现的,其中所用到的JS仅是用来实现绑定和移除CSS样式。

Hammer.js

Hammer.js是一个轻量级的JS库,能让你的网站轻松实现触控事件。它依赖于jQuery,用来控制触摸设备上的多点触控特性。

Socialite.js

Socialite.js 是一个用来方便生成各种社交网站分享按钮的JS库,提供多种按钮排列样式,可以根据客户需求实现个性化设置。

Retina.js

顾名思义,Retina.js是很棒的脚本,帮助你在Retina显示设备上制造出高质量的图片,这是一款便捷的开源软件。检查网页中的图片是否存在高清的版本,如果有将会替换显示。

KineticJS

这是一个很简便的HTML5 Canvas独立JS类库,使用这个类库你可以轻松的在桌面和移动设备上进行图形和图片绘制和修改,执行动画效果,或者和图形图片进行互动。

URI.js

URI.js是一个JS库,用于处理URLs地址。它提供了类似于jQuery风格的API(便利的接口和方法链),用于读写所有常用组件,像.directory和.authority一样的方式。

Crossfilter

Crossfilter是一个用来展示大数据集的JS库,在浏览器里有很多不同的多元数据集,支持超快的交互,甚至在上百万或者更多数据下都很快。主要用来构建数据分析程序。

DropKick.js

从头开始做下拉式菜单可能是非常耗时和繁忙的任务,因此DropKick出现了,它是一个下拉框美化插件,使用非常简单,直接为下拉框select调用方法即可,瞬间让你摆脱繁琐。

Foresight.js

Foresight.js可以在装载图片之前知道用户的设备是否可以显示高分辨率的图片。

Kartograph

Kartograph是一个简单且轻量级的框架,建立交互式地图应用程序无需谷歌地图或其他任何地图服务。

Patternizer – Stripe Pattern Generator Tool(条纹模式生成器工具)

Patternizer是一个在线的带状模式生成工具,可以帮助你简单快捷的创建复杂的模式。你同样可以把你创建模式的经验与别人分享,收集别人的意见。

Morris.js

Morris.js是一个轻量级的JS库,使用jQuery和Raphaël来生成各种时序图。

JavaScript Library Boilerplate

JS Boilerplate可以帮助你来轻松创建你自己的JS库,例如jQuery,Zepto,Prototype等等。

heatmap.js

Heatmap.js用来生成基于用户自定义数据上的Web热图,内嵌HTML5 Canvas元素。

uiji.js

uiji.js很独特,它是jQuery的反向,它不是使用CSS选择器来查找元素,您可以使用相同的语法来创建元素。

sigma.js

sigma.js是一个开源的轻量级JS库,用来绘制各种图形,使用的是HTML Canvas元素。它同样可以用来显示交互式的静态和动态图表。

Heyoffline.js

heyoffline.js是一个简单的JS库,当用户网络不可用的时候可以提示用户保存信息,以免数据丢失。

JavaScript Console–Debugging JavaScript Tool(JS调试工具)

从字面意思可以看出,它是一个JS调试工具,同时为移动Web Apps提供远程调试。

Yeoman

它旨在为开发者提供一系列“健壮的”工具、程序库和工作流,帮助他们快速构建出漂亮、引人注目的Web应用。

Batman.js

这个框架就像它的名字一样酷——它可以创建丰富高效的单页面浏览器Apps。Batman.js框架利用CoffeeScript或JavaScript来快速构建Web Apps。由于其拥有强大的视图绑定和可观察的属性,所以它的代码非常简洁。

原文:Inspire Trends

http://www.csdn.net/article/2013-07-01/2816068-best-javascript-libraries-and-tools

工作变得简单又高效 试试这八个WebApp

摘要:你的工作类型是不是需要和同事协作交流,是不是要和客户联系?选择正确的工具和方法既可以提高工作效率,又可以节省大量时间。下面的这些Apps也许能成为帮你解决问题的得力助手。

有的时候只用得到一个Web App就可以解决金融危机,简化操作或者是让团队更有效地交流,这通常和你使用的App有关。许多公司对待技术问题的解决办法就是通过升级来让工具变得更强大,这已经在组织内成为一种连锁反应了。介绍对你事业有帮助的八款Web App。

Creately

Creately:在线图表制作协作平台是一款优秀的绘制产品图形的在线工具,绘制的图形更为丰富,支持UML图、Mindmap图、SWOT图、产品原型图、流程图等数十种类型。

对于可视化公司而言,没什么工具能打败Creately。流程表和图表App能够为你的想法创建条理清晰的视觉图表,这是成功的法宝。这个App多人协作也很方便,用户可以利用侧边栏来邀请其他人在线协作,团队成员可以留言评论和任务追踪。不同于Vizio,它使用云技术运行并在线储存数据。要创建一个可视化文件,需要拖放对象,您也可以使用预先存在的模板以开始浏览网页。

ZenDesk

ZenDesk是基于云计算运行的软件,帮助代理商追踪支持调用,了解协助状态,提供步骤指导。更重要的是,这个App可以在调用时生成报表,支持resolutions,并且还可以根据准确性进行适当的微调。

Work.com

关于“竞赛重装”App的想法似乎有点不可思议。但使用了Work.com,结果就是最好的证明。这个App的设计目的就是为了帮助管理人员测评工作成绩。可最后却为员工所用。使用游戏模式技术,员工可以获得奖励,例如提高在Facebook上的知名度或者收到礼物卡。一旦员工达到目标,管理人员可以和他们互动,调整他们的工作效率。

Smartsheet

当Microsoft Excel在企业里大展拳脚的时候,许多企业每天仍在使用电子数据表工具(spreadsheet tool)。Smartsheet是一款包含任务管理,调查表格,甘特图表和日历视图等众多功能的在线协助软件。这个App可以创建多人协作型的电子数据表,让他们可以直接在电子表格里进行数据的协作,包含所需的各种计算方式。员工可以附加文件到个人单元格或留言评论。有不同版本的Smartsheet可供Web、平板电脑和手机使用。

Setster

近些年日历已经被加入到云技术里了。通过Setster,你可以根据和客户的关系制定日程表。如果你期待一个在线App,这个排程器正合适,取消或重新安排会议,每个人都能收到提示。它还有一个特色,那就是填充会议或添加弹性时间,所以大家都知道不必准时出席会议。

WalkMe.com

如果你还在努力和客户交流复杂的思想,那么WalkMe.com可以帮你改变这一切。如果你需要顾客在一个网页上填满很长的表格或完成难度大的任务,那你就可以使用WalkMe作为现场教程。这款工具利用拖放方法来创建步骤,并同时出现在现实网页上。尤为关键的是,通过自助辅助工具,几乎没有人完成不了任务。

15Five

产品之所以叫做15Five是因为员工需要用15分钟的时间回答一份问卷,题目是公司高层为每周工作汇报所指定的,鼓励诚实和透明度。在将报告上交发CEO或者公司的其他五位高管前,经理人则花 5 分钟的时间来审阅和点评这些答案。通过这种节省时间的汇总报告,CEO可以快速地发掘公司运作的优缺点,然后将更宏观的目标传达给团队。

Do.com

一些所谓的“团队合作”的观念常常被忽略,Do.com的服务对象是那些需要协作的中小企业和小型组织,目的是让团队里面的每个人都可以看到尚未完成的任务和项目。 它是一款小巧的、多功能的团队管理工具,员工可以写下带有问题的便条,甚至可以在线聊天。员工还可以连接文件到Dropbox和Google Drive,亦可同步连接到Salesforce的联系人。

Do.com在Heroku的云应用平台上开发,用Ruby on Rails编写,通过HTML5部署,并向第三方开发者提供API服务。由于采用了HTML5技术,该应用支持所有浏览器,包括苹果的iOS设备。除了网络应用之外,他们还为智能手机用户开发了本地应用(目前仅有iOS版,Android版将在明年推出)。

原文:ItWorld

http://www.csdn.net/article/2013-06-27/2816025-8-Web-apps-that-will-change-your-business

极客编程必备的五大PHP开发应用

摘要:有了PHP应用可以帮助编码爱好者事半功倍,提升项目质量;有了这些最新的且灵活的PHP应用使创建编码项目更加简单、便捷。本文,我们收集了五大最新的PHP开发应用。

PHP应用在网络上并不多见。最重要的是,很难找到有关这方面的资源。代码指南对于编程爱好者来说非常重要且是必备的,因为它能为你节省大量的时间,让你自由编码。

PHP编码者需要掌握该领域的新技术,并且在项目中必须运用新的功能。有了PHP应用可以帮助编码爱好者事半功倍,提升项目质量;有了这些最新的且灵活的PHP应用使创建编码项目更加简单、便捷。本文,我们收集了五大最新的PHP开发应用,一起来看下。

1.  phpFreeChat


这是一款方便、快捷的PHP模块,你可以在Web应用中嵌入聊天功能。其提供三个版本选项,一个是开源的,能够为你的网站集成所有聊天所需的应用功能;另外两个版本则是需要付费。

2.  Unirest :HTTP Libraries支持多种语言


Unirest库不仅支持PHP,而且还支持其他多种语言比如.NET、JAVA、Python等,使用Unirest HTTP库能够提高Web开发。

3. Whoops:Library for PHP Error Reporting


极客在调试过程中发现错误时非常痛苦,Whoops就是为化解这一难题而生,这款PHP库提供简单的方式来处理错误并让你在Web应用开发阶段进行调试。

4.  PHP Mobile Detect


这是一款轻量级的类能够帮助你在Web应用中检测移动设备;支持各种主流设备包括平板电脑、智能手机,使得现代Web应用更加强大且实用。

5.  phpFastCache


即便你获得了所有测量,但却增加了页面加载时间。而phpFastCache是专为你准备的最佳解决方案,它不但能减少数据库加载时间,还能加速动态Web应用。从本质上讲,它是应用体系架构通用的、目标分布式对象系统。

英文出自:Meenaxi

http://www.csdn.net/article/2013-06-24/2815961-php-applications-for-code-geeks

加速编码的17款最棒的CSS工具

摘要:文章中收集了加速编码的17款最好的CSS工具;以帮助开发人员和设计人员简化工作。利用它们可以生成CSS菜单、动画影像、按钮、滑块、动画文本、CSS形状代码、图层还有很多其他的。

不用介绍,软件开发界的“地球人”都知道CSS,因为它是最流行的一种样式设计语言。学习和使用CSS已经不再是一件棘手的事,因为在网上可以获得很多信息教程和CSS工具。这些工具有助于你创造出有用的、有创新的Web应用程序,同时节省更多开发步骤和时间。

文章中收集了加速编码的17款最好的CSS工具;以帮助开发人员和设计人员简化工作。利用它们可以生成CSS菜单、动画影像、按钮、滑块、动画文本、CSS形状代码、图层还有很多其他的。希望这个列表对你的开发工作有用。

1. Topcoat : CSS for Clean and Fast Web Apps

Topcoat是一个程序库,包含CSS类用于创建表格元素、按钮、复选框、滑块等。这个轻量级的工具可以让你设计的网页或者App看起来相当不错。

2. PCSS : Shortcut Oriented Server Side CSS3 Preprocessor

PCSS是一款由PHP驱动的CSS预处理器,它可以帮助开发者通过定义变量、类测试、默认单元和服务端浏览器细节,以达到快速编写CSS代码的目的。PCSS使用PHP5来实现服务端处理,因此正在运行的网站服务器上需要具备这个PCSS版本。

3. Skeleton

Skeleton是一款较小的CSS文件集合体,它可以帮助开发者快速创建适配任何尺寸的网站,无论是在17寸笔记本屏幕或iPhone上。Skeleton的构建基于三大规律:快速响应到手机,迅速启动和独一无二的风格。

4. CSS Menu Maker

这个工具帮助用户轻松创建CSS下移菜单。CSS菜单编辑器提供网络专业人员和工具,帮助开发人员构建个性化的、跨浏览器相兼容的CSS菜单,同时还为所有的CSS菜单和设备用户提供源代码,以便下载和调整代码。

5. Sencha Animator

这是一个桌面应用程序,允许用户创建专门用在触摸屏移动设备和Webkit浏览器上的CSS3动画。 Sencha Animator还可以协助用户创建动画文本、图片、倾斜按钮和内嵌分析。

6. CSS Form Code Generator

CSS Form Code Generator可以制作布局好看的表格,也可以制作出布局简单的色彩表。这个“Code Maker”生成的CSS布局代码也可以为这些表格添枝加叶。

7. PrefixmyCSS

PrefixmyCss可以简简单单的为CSS3代码添加前缀。用户必须复制CSS代码到窗口才能添加前缀,供应商已提前在代码上添加了前缀,用户可安全放心的替换旧的代码。

8. Sky CSS Tool

Sky CSS Tool允许你创建CSS类时几乎不需要使用手写代码。用户可能需要与JavaScript相兼容的浏览器来确保正常运行。

9. Spritemapper

Spritemapper是一款可以合并多个图片的应用程序,为相应的片段生成CSS精确位置。此款工具可以帮助开发者优化可用空间和加载时间。

10. CSS Compressor

CSS Compressor通过压缩CSS来提高加载速度,还可以节约带宽。依据你对CSS的压缩程度和代码的易读性,它提供了三个级别的压缩。

11. Patternify

Patternify可以帮助你生成漂亮的CSS模板。

12. CSS Text Shadow

CSS Text Shadow帮助使用者生成漂亮的文字阴影。

13. CSS3 Pie

CSS3 Pie在IE 6-9下可以渲染出最有用的CSS装饰功能。

14. The Web Font Combinator

该工具旨在浏览器下快速预览字体,无需一遍遍的刷新。近些年出版的书也都让标题字体紧挨着正文字体,这也是一种网络再创作的尝试。

15. 3D Transforms

CSS 3D变换器是一款在线工具,用户使用它可以执行多种级别的3D转换。目前此工具还处在实验模式下,在使用的时候,需要在浏览器下制定浏览器前缀。

16.  Quick Form Builder

Quick Form Builder有助于便捷地创建CSS表单。

17.  Layer Style

这是一款HTML5 App,用一种直观的方式创建CSS3。其内置的Colorpicker允许用户选择各种颜色,还便于用户拖放图片到页面,使用它们作为背景或挑选他们喜欢的颜色。(编则/张红月)

原文:codegeekz

http://www.csdn.net/article/2013-06-24/2815973-17-Best-CSS-Tools-to-Speed-Up-Your-Coding

让thinkphp完美支持smarty模板

Published by 荒野无灯 on  under PHP Tags: ,,,,,6487 views

 

ThinkPHP_modified_hywd20100217.zip (932.0 KB)

一,去掉了系统自带的think 模板引擎,用功能强大的smarty替代之,基本上可以说是完美支持smarty模板了。
原有的smarty模板接口只能实现基本的功能,比如判断模板是否已经缓存就无能为力,这样使用无疑大大削减了smarty的功能。
二,去掉了分组功能
三,默认使用php模板
四,支持带路由的dispatch
五,支持CURD方法、连贯操作、统计查询等
六,支持语言包、模板主题
七、去掉了大部分扩展机制
八、完美支持smarty模板引擎(ThinkPHP\Vendor\Smarty)

默认加载 :

convention.php
defines.php
functions.php
paths.php
runtime.php //生成核心和应用缓存用
core.php //include 文件用
alias.php //include 文件用
THinkphp/Lib/Think/Core
Log.class.php
Think.class.php
Db.class.php
Model.class.php
App.class.php
View.class.php
Action.class.php
Dispatcher.class.php

ThinkPHP\Lib\Think\Exception\ThinkException.class.php

THinkphp/Lib/Think/Util/
Debug.class.php
Session.class.php

可通过如下配置使用smarty模板引擎:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    /* 模板引擎设置 */
‘TMPL_ENGINE_TYPE’      => ‘Smarty’,
‘TMPL_TEMPLATE_SUFFIX’  => ‘.html’,     // 默认模板文件后缀
‘TMPL_CACHFILE_SUFFIX’  => ‘.php’,      // 默认模板缓存后缀
‘TMPL_PARSE_STRING’     => array(‘__UPLOAD__’=>__ROOT__.’/Content/’,), // 模板引擎要自动替换的字符串,必须是数组形式。
‘TMPL_ENGINE_CONFIG’ => array(
‘debugging’=>true,
//    ‘error_reporting’=>”,
//    ‘exception_handler’=>array(‘ExceptionClass’,’ExceptionMethod’),
‘template_dir’ => TMPL_PATH,  //模板目录
‘compile_dir’ =>TEMP_PATH ,//编译目录
‘cache_dir’ =>CACHE_PATH,  //缓存目录
‘caching’ => false,  //是否启用缓存
‘cache_lifetime’ =>60*60*24,//缓存时间s
‘left_delimiter’=>'<{‘,
‘right_delimiter’ =>’}>’,
)  ,
‘TMPL_ENGINE_SMARTY_FILTER’=>array(
‘output’=>’trimwhitespace’,

),

这里初定义了smarty的编译目录、缓存目录、是否启用缓存、缓存时间、以及左定界符和右定界符,还有smarty的filter插件。(此处的trimwithespace用于过滤输出的html代码的空白。)
由于是开发时期,所以我还开启了smarty 的debugging(注意,由于修改了左右定界符,所以smarty的debugging模板也要作相应修改)。

关于 thinkphp的视图类(view)
thinkphp的视图类(view)是在核心库文件Action.class.php中__construct的实例化的,此__construct同时执行_initialize方法。
Action.class.php中的display方法是用于调用模板引擎的显示方法的,此处即为smarty的显示方法。为了让ThinkPHP支持Smarty的fetch方法和display方法的cache_id,让thinkphp里面调用display和fetch就像用smarty时一模一样,因此必须修改thinkphp
Action.class.php中的:
protected function display
protected function fetch
我还增加了几个方法(都是smarty里面的):
protected function is_cached
protected function clear_cache
具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
    protected function display($templateFile=”,$cache_id = null,$compile_id=null,$charset=”,$contentType=’text/html’)
{
$this->view->display($templateFile,$cache_id,$compile_id,$charset,$contentType);
}

protected function fetch($templateFile=”,$cache_id = null,$compile_id=null,$charset=”,$contentType=’text/html’)
{
return $this->view->fetch($templateFile,$cache_id ,$compile_id,$charset,$contentType);
}

//判断模板文件是否已经被缓存
//如果不是检查当前模块的操作模板,参数请用 module:action  方式
protected function is_cached($template, $cache_id = null, $compile_id = null)
{
if(!file_exists_case($template))
// 自动定位模板文件
$template   = $this->view->parseTemplateFile($template);
$template=substr($template,strlen(TMPL_PATH));
return $this->view->smarty->is_cached($template, $cache_id, $compile_id);
}

//清除单一模板文件的缓存
//如果不是清除当前模块的操作模板,参数请用 module:action  方式
protected function clear_cache($template_name, $cache_id=null, $compile_id=null, $exp_time=null)
{
if(!file_exists_case($template_name))
// 自动定位模板文件
$template_name  = $this->view->parseTemplateFile($template_name);
$template_name=substr($template_name,strlen(TMPL_PATH));
return $this->view->smarty->clear_cache($template_name, $cache_id, $compile_id, $exp_time);
}

//清除所有smarty 静态缓存
//返回清除的缓存数量
protected function clear_all_cache($exp_time=null)
{
return $this->view->smarty->clear_all_cache($exp_time);
}

//清除smarty编译缓存
//如果不带参数默认返回清除的编译缓存数量,带参数返回
//如果不是清除当前模块的操作模板,参数请用 module:action  方式
protected function clear_compiled_tpl($template_name=null)
{
if(null!=$template_name)
{
if(!file_exists_case($template_name))
// 自动定位模板文件
$template_name  = $this->view->parseTemplateFile($template_name);
$template_name=substr($template_name,strlen(TMPL_PATH));
}
return $this->view->smarty->clear_compiled_tpl($template_name);
}

这里注意,除了is_cached方法,其它的像clear_cache等我额外增加了函数如果在后调用并不会清除前台的缓存,除非前台后台是同一个app 。

进阶:让ThinkPHP支持Smarty的fetch方法的cache_id
这样以后肯定不行,还要修改Lib/Think/Core/View.class.php
增加一个属性,以支持调用插件:

1
2
3
4
    protected $cache_id=null;  //cache_id
protected $compile_id=null;  //cache_id
protected $smarty=null;
public $filters=null;

构造函数修改成如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
    function __construct()
{
$this->filters=C(‘FILTERS’);
$engine  = strtolower(C(‘TMPL_ENGINE_TYPE’));
if(‘smarty’==$engine)
{
vendor(‘Smarty.Smarty#class’);
$tpl = new Smarty();
if(C(‘TMPL_ENGINE_CONFIG’))
{
$config  =  C(‘TMPL_ENGINE_CONFIG’);
foreach ($config as $key=>$val)
{
$tpl->{$key}   =  $val;
}
}
else
{
$tpl->caching = C(‘TMPL_CACHE_ON’);
$tpl->template_dir = TMPL_PATH;
$tpl->compile_dir = CACHE_PATH ;
$tpl->cache_dir = TEMP_PATH ;
}
if(C(‘TMPL_ENGINE_SMARTY_FILTER’))
{
$filter  =  C(‘TMPL_ENGINE_SMARTY_FILTER’);
foreach ($filter as $key=>$val)
{
$tpl->load_filter($key,$val);
}
}

$this->smarty=&$tpl;
}
}

其中FILTERS是配置文件中定义的,类型为一维数组。
例如在应用的配置文件中:

1
‘FILTERS’=>array(‘hl_before_highlight_codeblock’,’hl_replace_attach_tag’,’hl_after_highlight_codeblock’,),

其中的hl_before_highlight_codeblock等函数是在应用的Common/common.php文件中定义的,因为应用在编译时首先会包含应用目录下的Common/common.php 。
display方法修改成如下:

1
2
3
4
    public function display($templateFile=”,$cache_id,$compile_id,$charset=”,$contentType=’text/html’)
{
$this->fetch($templateFile,$cache_id,$compile_id,$charset,$contentType,true);
}

fetch方法修改成如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
  /**
+———————————————————-
* 加载模板和页面输出
+———————————————————-
* @access public
+———————————————————-
* @param string $templateFile 模板文件名 留空为自动获取
* @param string $charset 模板输出字符集
* @param string $contentType 输出类型
* @param string $display 是否直接显示
+———————————————————-
* @return mixed
+———————————————————-
*/
public function fetch($templateFile=”,$cache_id=null,$compile_id=null,$charset=”,$contentType=’text/html’,$display=false)
{
$GLOBALS[‘_viewStartTime’] = microtime(TRUE);
if(null===$templateFile)
// 使用null参数作为模版名直接返回不做任何输出
return ;
if(empty($charset))  $charset = C(‘DEFAULT_CHARSET’);
// 网页字符编码
header(“Content-Type:”.$contentType.”; charset=”.$charset);
header(“Cache-control: private”);  //支持页面回跳
//页面缓存

http://ihacklog.com/post/change-thinkphp-framework-to-support-smarty-template-engine-perfectly.html

代码审查,也要天时地利人和

摘要:代码评审是指在软件开发过程中,通过对源代码进行系统性检查的过程。通常目的是查找系统缺陷,保证软件总体质量和提高开发者自身水平。这可不是一件简简单单的事。

当代码审查被广泛采用的时候,有很多种方法可以完成代码审查,团队争相使用最好的方法来完成代码审查已经是很常见的了。

斗胆的说一句:干这行的,你还是需要一点灵活性的。至于怎样执行代码审查程序取决以下几点:

人员

你的员工当中有多少开发人员,又有多少专业知识和人际水平都很丰富的审查人员?有的团队里只有一个高级开发人员,他们既是事必亲躬的代码员,又是代码审查员,可他们的所得和付出并不成正比。在一个小的团队里,资历高低一直是个问题,不管你试图完成什么任务。

地理位置

你的团队在哪?分散在各个区域?还是集中在一个大办公室里?审查代码需要集中注意力和及时反馈,当开发人员坐在一起的时候这两点就变得容易多了。如果你的团队不是同地协作,像“Over-the-shoulder”这样的代码审查过程就很难实现。

行业

所在的这个行业有什么规则和制度?在一个纪律严明的行业,你就必须遵守审计和报告的规则,这就意味着有一定的方法可以追踪到你的代码审查的频率和质量。如果你在安全性第一的行业,在代码审查的时候你同样需要关注并避免安全漏洞。

复杂性

你的代码有多复杂?一个审查员够了吗?还是需要多个具备不同专业知识的审查员?比方说,游戏开发可能涉及到许多复杂的逻辑来处理角色转换和场景跟踪,同时还要将特效动画和内存管理技术进行合并。因此,具有多个“Sets of eyes”的代码可能是审查像游戏开发这样复杂代码最有效的方法。

许多情况下,对于不同的项目会有不同的需求——你可能有多个团队正在搭建用户配置和需求都不一样的应用程序。一个你信得过的代码审查工具能够帮你完成高质量的代码审查流程,不管你使用的是什么方法。下面给出一些小建议,审查流程结合审查工具,这也许能解决你平时遇到的一些问题。

1. 加强交流

任何类型的审查过程,不管是代码审查,文献审查,或是性能审查,最好能够面对面的完成。当使用工具完成代码审查之后,开发人员在规定时间内提供语言反馈,如果不在同一地点,可以通过电话或视频对反馈的信息进行交流,因此,你也可以把代码审查过程看作是一次合作与指导的机会。

2. 发挥特长

如果正在审查的代码和其他区域的代码有接触点,或对安全,性能,延伸性等有影响,那就必须让更多的人检查代码以确保所有的分枝都已被考虑到位。在这种情况下,最好建立一个包含所有专业知识的人员库。这个工具可以帮助你甄别这些有用的人,并分配到需要的代码团队。你也可以利用这个工具收集所有人员的评论并分享给整个审查团队,这样大家可以相互学习。

3. 共享代码审查评论

使用工具的好处之一就是集中人员来审查相同的代码,将一组人集中到一起做小组评审,让每个人站在自己的角度思考代码里潜在的“问题”。每一个人都要对代码进行评论,并且允许团队成员看到相互之间的评论。能同时看到代码和别人的评论对整个团队来说是有很多好处的:

 

  • 没有重复的评论——第一个人说过的,第二个人就不能重复说。
  • 团队学习——能够看到其他人的评论,审查员可以相互学习。
  • 重复审查——有些时候一个审查员可以抓住另一个审查员的错误,这样就可以阻止错误被引入代码。

 

4. 审查指标

在代码审查过程中有一件事是肯定的,那就是使用工具指标。利用指标作为改进代码库的方法,这在代码审查过程具有很强的附加功能。工具可以告诉你哪些是最常见的错误,它们被引用在哪里,又在哪些地方重复过。同时可以根据在循环审查阶段,建立在缺陷记录基础上的质量问题,来判断哪些代码看上去易受攻击。在检查的时候就能阻止bugs,这明显是确保代码质量的最经济最高效的方法。metrics的使用还可以帮助开发人员找到哪些方面需要加强训练,以便以后开发出更好的代码。

5. 挖掘未来的代码审查员

你必须提升自己的的高度。因为要想识别出团队里的人哪些是可以进入审查员角色,就要花很大的精力和时间。理想情况下,你团队里的所有开发人员都能执行同行审查,这是合作程度和效率最高的方法,为了能够准时交付优质代码。但这需要花大量的时间和精力来打造这样一个高水平的团队。

代码审查很重要,审查过程中,审查人员和开发人员不是对立的关系,而是互助、沟通、协作和学习的过程。团队形成互助、互学的气氛,既能互相增长团队的知识和经验,还能把产品做得更好。Code Review的核心是:互助,沟通,协作,学习的过程,这是一个美妙而享受的过程,是跨越需求分析、架构设计、编码等各阶段的过程。(编译/薛梁 责编/夏梦竹)

原文:smartbear

http://www.csdn.net/article/2013-06-20/2815921-Making-Code-Review-Work

切换到Git的8个理由

提到版本控制,最近大家都在谈Git。当然,四处议论纷纷还不足以证明切换到Git上有多么正确。这里有一些能证明Git非常出色的有力事实。

 

1. 节省时间

想象一下,每次动鼠标前你都要等待5分钟。这非常讨厌是不是?有了版本控制也是一样——我们每个命令消耗几秒,但是工作一天也累积起来了。但是Git快如闪电。把你的时间用在其他更重要的事情上,而不是等待版本控制工具的响应。

null

 

2. 离线工作

你出差的时候要工作怎么办?用诸如Subversion或者CVS的集中式版本控制系统,如果你不能连上中央版本库你就不能工作。有了Git,在你的本地机器上几乎能做任何事:提交、查看项目完整历史记录、合并(merge)或者新建分支……Git让你来决定何时何地开始工作。

 

3. 回退错误

有时候我会犯错(我也不敢相信!)。我喜欢Git的是它的一个小小的回退命令就能用于几乎任何场景。修正最后一次提交,因为你忘记包含一个小改动。撤销整个提交,因为那个特性已经不再需要。而且当处境变得困难时,你甚至可以用Reflog来恢复“已删除”的提交——因为在幕后Git极少会真正删除什么。这样心定气闲。

 

4. 睡得香

你曾经粉碎过Subversion的版本库吗?我就做过(我说这个的时候记忆的伤痛犹在)。有了Git,我可以信心十足,因为团队里每个人在自己电脑上的克隆就是一份可用的备份。另外Git里的几乎每个操作都是增加数据(很少有删除的)。想搞砸都很难。这种感觉很好。

 

5. 产生有用的提交

把牛奶、冰淇淋和番茄投到搅拌机里会有(至少)两个问题。首先,启动搅拌机后,看着这一团东西,没人能说出你实际上放入的是什么。另外,你没办法把番茄再“回滚”。你做的一批不相关的提交(一点点A特性,再带一点B特性,还有一个小小的补丁……)也是一样的。对你的队友来说,很难理解发生了什么。当出现问题时,他们也不能简单地回滚特性A。Git能帮你避免这种混乱和创建粒状提交。其独一无二的“缓存区”概念能让你决定在下一个提交里到底包含哪些改动,甚至小到哪些行。这是版本控制的用处所在。

 

 

 

6. 按自己的方式工作

当用Git工作时,你可以有你自己的工作流程。那个你觉得好的流程。使用Git你不需要成为编程高手。当然你可以连接多个远程的版本库,用变基(rebase)代替合并,需要时工作在子模块上。但是你也可以只是简单地工作在一个中央远程版本库上,如同在用Subversion一样。不管你的工作流程怎样,所有其他的优点都还在。

 

7. 不会把东西搞混了

分开关注是追踪事情的最高原则。当你工作在特性A上时,任何事(人)都不会被你未完成的代码所影响。如果这个特性不再需要了呢?或者如果在10个提交之后,你发现你做的完全不对呢?分支是这些问题的答案。其他的版本控制系统也有分支,但是Git是第一个让它做好它该做的:快速简单。

 

 

 

 

8. 潮流

只有死鱼才随波逐流。有时候聪明的开发者也这样。Git被越来越多的知名公司和开源项目所使用:Ruby On Rails,jQuery,Perl,Debian,Linux内核,还有很多。大型的社区通常自身就是一个优点,因为一个生态圈会围绕着该系统演进。大量的学习指南,工具,还有服务,会让Git变得更加吸引人。

 

英文原文:git-tower,编译:伯乐在线 – @奇风余谷

译文链接:http://blog.jobbole.com/41527/

你应该关注的几个Eclipse超酷插件

摘要:如果你是Eclipse用户,那么本文介绍的这些插件肯定会对你有所帮助,如ShellEd、More Clipboard、Smart Save和AnyEdit等。

来自非营利性Eclipse基金会的Eclipse IDE以其插件生态系统著称。Eclipse市场拥有海量插件可供下载,你可以通过插件定制自己的Eclipse。最近我在Eclipse市场闲逛,想看看能不能发现一些有意思的东西。实际上,我确实找到了一些在我看来虽然不是很有名却很酷的东西,想在这里和大家分享。

 

流行 vs 酷

 

我关注的插件具备以下特性:

首先,我要强调的是这些插件本身不是某种工具,所以我最喜欢的JRebel和JBoss工具不在此列。我关注的都是能够让你安装的普通Eclipse成为更加有趣的优秀插件。

其次,流行并不等于酷。在Eclipse市场,最流行的插件列表机会在最近2-3年几乎没有变化。

一个插件只因为被下载次数多就被认为很酷,在我看来这是很没有意思的。那些插件之所以上榜只是因为它们补充了Eclipse不具备的基础功能,这就是为什么Maven、Subversion和Git插件会名列前茅。

 

我眼中的酷插件

shell助手

 

虽然我是一名Java开发者,有时也会写一点shell脚本。下面是几个对编写shell非常有用插件。ShellEd插件提供了shell脚本的编辑功能,Terminal插件将shell的输出集成到了Eclipse工作台。

通过ShellEd和Terminal插件,我可以无需在窗口之间来回切换就能在Eclipse中完成shell脚本的编写和运行,真的非常高效!

 

像老板那样编辑!

 

接下来在名单上的是More Clipboard、Smart Save和AnyEdit。这些插件在不同程度上改善了编辑体验。

More Clipboard会记录最近拷贝/剪切到剪切板缓冲里的内容,使用快捷键弹出备选列表可以进行快速粘贴。好吧,我承认在写代码的时候一直在复制粘贴:

AnyEdit插件由Andrey Loskutov开发,它为Eclipse增加了很多编辑功能。你可以对文件和选中的内容排序,对HTML代码加密,在tab和空格之间快速转换,等等。我得说这是Eclipse的一个必备插件。

一开始我用的是IntelliJ IDEA,它与Eclipse最重要的不同就是IDEA编辑器会自动保存修改。于是,我开始寻找可以用在Eclipse上的类似插件。最后,我找到了Smart Save。它可以配置在若干时间后自动保存修改,很酷很方便!

但是,我认为它会影响一些编辑体验。因为Eclipse默认会开启保存编译选项,所以每次保存都会进行一次清理(clean)和构建(build)。因而理论上可能会发生这样的情况,你刚刚进行了编辑但是Eclipse会决定做一次完整的构建,这会让整个Eclipse卡住。

 

扮靓你的Eclipse!

 

接下来要出场的是Eclipse Color Theme。这是唯一一个既出现在我名单里又在Eclipse市场最受欢迎插件列表中出现的插件。差个插件提供对你的Eclipse编辑器设定一个颜色主题,并且自带了很多好看的备选主题。

我个人比较偏好Roboticket,但是也有很多其它选择,比如下面的Monokai。

 

持续反馈

 

如果你是持续反馈开发方法的粉丝,而且热衷于编写单元测试(这里解释了为什么单元测试很棒),那么JLoop和JUnitLoop插件一定对你很有帮助。这两个插件能够在任何改变发生后立即执行代码。我发现JUnitLoop非常友好,当我更新了一个曾经执行过单元测试的方法后这些测试能够自动执行并且快速给出反馈。

 

自动化狂热分子

 

追求高效会让你步入自动化的美好世界,然而不幸的是Eclipse默认不提供宏支持,你不能在Eclipse理记录并重放你的活动。然后,有一些插件通过脚本能够让你在Eclipse中的活动自动化。

最佳方案只是就是GroovyMonkey插件,可惜这个插件的维护并不活跃。其它的替代方案有ScriptEclipse和EclipseScript(请不要把两个插件弄混!)。

基本上,这些实现的背后逻辑非常相似——核心引擎为脚本提供Eclipse内部对象,你可以通过脚本按照自己的要求实现逻辑。这些脚本会存储在工作区(workspace)里并且可以直接访问,插件会提供一个脚本列表菜单供你选择。

 

了解Eclipse

 

本文介绍的最后一个插件就是IDE++,它会帮助你更高效地使用Eclipse。

IDE++会分析你的行为并提供达成目标有哪些更快捷的方法。比如,如果你一个个地关闭打开的编辑器标签,IDE++会检测并弹出好看的对话框提示你“嘿极客,你知道CTRL+SHIFT+W可以更有效的关闭这些标签吗?”不幸的是,这个插件没有关注到Mac上快捷键会有所不同:)

我真的很喜欢IDE++插件的创意——它能够帮助你发现使用Eclipse过程中的效率瓶颈,所以我真心希望这个插件能够继续开发下去。

 

总结

 

如果你是一个Eclipse用户,本文前面提到的插件中应该会有一些帮助你更好地理解IDE并更高效地在Eclipse下编程。希望你能和我一样发现这些插件的出众之处。

原文链接:Anton Arhipov

译文来自:ImportNew

 

http://www.csdn.net/article/2013-06-17/2815779-Eclipse

优化技巧分享:把内存消耗降低至原来的1/20

摘要:Plumbr是一家Java存泄露检测器开发公司,在最近的客户报告中,他们发现了一个内存耗尽相关的问题。在检测后他们查出了问题所在,通过优化最终降低了21.5倍的堆内存。

这是最近发生的又一起内存相关的事件了。这个案例是从一个最近的客户报告中提取出来,一个异常运行的应用在其产品中反复报告内存耗尽。

这个症状是由我们的一个实验性功能发现,它主要用来监测某一类数据结构的使用情况。它提供了一个信号探针,结果会指向问题源代码的某一位置。为了保护客户的隐私,我们人为重建了该例子并保持它同原真实场景在技术层面的一致性。你可以免费在此处 下载到源码

故事开始于一组从外界源加载进来的对象。同外部的信息交互是基于XML的接口,这本身并没什么大不了的,但事实上“基于XML的格式进行通讯”的实现细节被分散到了系统的每一个角落。 传入系统的文档是首先被转换成XMLBean实例,然后在整个系统范围内被使用,这中做法听起来有点傻。

整个问题中最核心的部分是一个延迟加载的缓冲方案。缓存的对象是“Person”的实例:

 

1
2
3
4
5
6
7
// Imports and methods removed to improve readability
public class Person {
    private String id;
    private Date dateOfBirth;
    private String forename;
    private String surname;
}

 

 

你也许会说这才能消耗多少内存呢。但当我们揭开进一步的细节时,发现事情就变了味了。表面上根据设计,声称实现只用到的诸如上文提到的那样一些简单的类,但真实的情形是使用了基于模型生成的数据结构。使用的模型是诸如下面的这个简化的XSD片段。

 

1
2
3
4
5
6
<xs:schema targetNamespace="http://plumbr.eu" xmlns:xs="http://www.w3.org/2001/XMLSchema"
        elementFormDefault="qualified"> <xs:element name="person"> <xs:complexType>
        <xs:sequence> <xs:element name="id" type="xs:string"/> <xs:element
        name="dateOfBirth" type="xs:dateTime"/> <xs:element name="forename"
        type="xs:string"/> <xs:element name="surname" type="xs:string"/>
        </xs:sequence> </xs:complexType> </xs:element> </xs:schema>

 

 

使用 XMLBeans,开发者生成了该模型,并在真实的场景中使用。现在我们回到开始的这个缓存的方案上来,假设它设计初衷是为了支持最多1.3M Person类的实例,而我们实际却要塞进去同等数量的大家伙,这从根上就注定了失败。

跑一组测试用例后,发现1.3M个基于XMLBean的生成的实例需要消耗大概1.5GB的堆空间。我们当时想这肯定可以做的更好。

第一个改进是显而易见的,外部同系统内部集成的实现细节是不应该把影响传递给系统的每一个角落的。所以我们把缓存改成了使用简单的  java.util.HashMap<Long, Person>。ID是键,Person是值。我们发现内存的消耗立即降低到了214MB。但这还不能令我们满意。

由于Map中的键是一个数,我们有十足的理由使用 Trove Collections来进一步降低它的内存消耗。这在实现上的改动很快,我们只需把  HashMap 改成  TLongObjectHashMap<Person> ,堆的消耗进一步降低到了143MB。

活干到这个程度我们已经可以收工了,但是工程师的好奇心驱使我们要更进一步。不由自主的我们发现了系统的数据存在着大量的重复信息。例如Date Of Birth其实已经在ID中编码了,所以Date Of Birth可以直接从ID中得到,而不必使用额外的空间去它。

经过改良,Person类现在变成了这个样子:

 

1
2
3
4
5
6
// Imports and methods removed to improve readability
public class Person {
    private String id;
    private String forename;
    private String surname;
}

 

 

重新跑一边测试证实我们的改进的确有效,堆消耗降低到了93MB。但是我们还未满足。

该应用在64位的机器上使用老的JDK6。默认情况下,这么做不能 压缩普通对象的指针的。通过参数”-XX:UseCompressedOops“切换到压缩模式使我们获得了额外的收获,现在我们的内存消耗降低到了73MB。

 

当然,我们还能走的更远。比如基于键值建立B-tree,但这已经开始影响到了代码的可读性,所以我们决定到此为止。降低21.5倍的堆内存应该已经是一个足够好的结果了。

让我们再重复一下学到了什么

如果你对这个实验很好奇,请在此处 下载相关的代码。使用到的的测量工具和其具体描述可以在这篇博文找到。

 

  • 别把同外部模块的整合影响到系统的每一个角落
  • 冗余的数据可能带来开销。在可能的情况下尽量消除它
  • 基本数据类型是你最经常打交道的朋友,务必知道些关于它们的工具,如果还没玩过 Trove请立刻开始吧
  • JVM自带的优化技术不可忽视

原文链接:  Nikita Salnikov-Tarnovski ,编译:感谢@ NULL_文龙 的热心翻译

译文链接: http://blog.jobbole.com/40666/

代码审查——提高代码质量的终极武器

摘要:SmartBear公司发起一项调查研究2013年代码审查的使用情况并从超过650名专业开发人士那收集了“实践经验”,结果非常有趣。90%的受访者表示代码审查提高软件质量;74%表示代码审查还有助于跨团队之间知识共享。

如果糟糕的软件是我们的克星,那么优秀的代码就是解药。

软件无法工作是件非常恼人的事!而这种情况往往是由于糟糕的代码所致。在一个项目中,如果开发者孤军奋战,这种情况出现的几率就会增大。

幸运的是,团队中的一些成员愿意贡献自己的空闲时间来改善软件质量。通常,这些人就是我们常说的QA测试者——他们坚持不懈地寻找bug。这里有一个最佳实践方式能够更有效地识别软件代码中的缺陷——同行代码审查(peer code review)。

研究表明,同行代码审查是寻找代码缺陷最高效的方法。有分析称超过12000软件代码使用同行代码审查可以完成60%的效率,而使用单元测试只有25%。每隔一小时使用同行代码审查,可以为开发团队的QA测试节省20个小时,这个听起来不错吧。

近日,SmartBear公司发起一项调查研究2013年代码审查的使用情况。超过650名专业开发人士回答了如何使用代码审查以及对性能影响的相关问题并从中收集了“实践经验”,结果非常有趣。

在此次调查中超过70%的受访者参与了不同程度的协同审查,结果发现,那些做代码审查的比不做代码审查的软件整体质量满意度高达2倍。

我们从中抽取了一个问题,一起来看下代码审查能带来哪些好处。

Q:你认为代码审查最大的好处是什么?

如图所示,显而易见,代码审查最大好处莫过于提高软件质量;74%的受访者表示,代码审查还有助于跨团队之间知识共享;有60%的受访者还发现,代码审查有助于团队之间相互指导及提升协作。

由此可以看出:

 

  1. 代码审查是提高开发团队技能以及保持团队迭代更新最有效的最佳实践方法。
  2. 代码审查工具辅助文档过程本身允许大家互相学习和更正评论。
  3. 假如做代码审查的开发者碰巧没坐在你边上或者开发团队遍布全球或者某个疯狂的同事从凌晨1点工作到5点,那么代码审查工具可追踪任何一条评论以方便你在空闲的时候查看。

 

代码审查不仅能帮助你确保评审、改进代码,还能为开发人员节省大量的时间,帮助你拯救因糟糕软件无法正常运行而带来的压力。

英文出自:Smartbear

http://www.csdn.net/article/2013-06-03/2815518-code-review

较早的文章 较新的文章

Copyright © 2024 优大网 浙ICP备13002865号

回到顶部 ↑