使用 Eclipse 调试 Java 程序的 10 个技巧
你应该看过一些如《关于调试的N件事》这类很流行的帖子 。假设我每天花费1小时在调试我的应用程序上的话,那累积起来的话也是很大量的时间。由于这个原因,用这些时间来重视并了解所有使我们调试更方便的功能。那能为你省下一些时间,也将会使你的生活更安逸、轻松。同时也表明其它关于此主题的帖子也是很有价值的。 第1条:不要调试太多 一个关于调试的疯狂声明作为开头。但它必须是要说的!尝试切分一下你那复杂的逻辑成多个独立的单元,并编写单元测试来检测你代码的正确性。我想像如下这样的流程应该是发生得非常频繁的—-一些人通过大型web应用程序点击、填写多个表单、切换到不同的页面、正在最后的页面上检测工个计算逻辑和实现这个调试视图中的大部分逻辑。在启动你的tomcat之前总是问你自己:有没有方法使用一个单元测试来检测这些行为?你在过去这些时间可以不知道或已忘记这些,但从现在开始,我们将要关注一些eclipse的调试技巧,你会发现有大量的关于良好代码设计的好东西。 zhouao翻译于 2天前 0人顶 顶 翻译的不错哦! – 断点视图 : 条件断点 如果你只对应用中的某部分感兴趣的话,这个功能非常有用。例如,如果你要在第13次循环的时候检查程序,或者在一个抽象父类中调试某些功能,而你只关注其中一个具体的实现。你可以在断点视图中设置条件,或者通过代码旁边的蓝色断点标记的右键菜单("Breakpoint Properties")设置。你可以在条件代码片段为true的时候暂停程序,或者当代码片段的值改变的时候挂起程序。 enixyu翻译于 昨天(8:45) 0人顶 顶 翻译的不错哦! 其它翻译版本(1) – 变量视图:展示逻辑结构 如果你需要在变量视图查看一个Map对象或者List对象的值,对于eclipse的默认设置,一般并不是那么容易。假设,你使用的是HashMap,你需要点击遍历各个实体条目,并面临各种HashMap的实现细节。但是,在变量视图上面有一个叫做“Show Logical Structure”的按钮。它非常有用,尤其当你的对象的toString()方法所展示的信息并不友好的时候。我的老大在几周前为我展示了这个功能。你知道,他经常跟PowerPoint或者Excel打交道。对于我这么一个开发人员,多丢脸哦 未开启“Show Logical Structure” 开启“Show Logical Structure” enixyu翻译于 昨天(8:54) 0人顶 顶 翻译的不错哦! – 变量视图:更改变量值… 当你需要稍微更改输入信息的时候,不需要重新开始调试会话,只需在一个表格中输入新的信息,你可以在调试阶段直接修改你的变量的值。有写时候,你可以节省一些时间,你可以通过这个功能,更加简单的模拟一些怪异的情况。 – Display视图 你知道“Display视图”吗?你可以在调试过程中,通过“Window” -> “Show View” -> “Display”来激活它。现在,你的eclipse应该是一个空白的新视图。你可以使用这个视图,输入或者演算一些新的代码。这些代码在当前的调试位置的上下文环境中被执行,这意味着,你可以使用所有变量甚至是内容助手。要执行你的代码的话,只需标记它,并使用右键菜单或者CTRL+U(执行)或者 CTRL+SHIFT+I (检查). enixyu翻译于 昨天(9:02) 0人顶 顶 翻译的不错哦! – 导航: Drop to Frame 我想任何人都知道“Step Into”, “Step over”,而且可能也知道“Step return”. 这些是调试时的基本导航功能。我想提两个我非常喜欢的导航的高级方法。第一个是“Drop to Frame”. 使用这个特性你可以及时回退 你可以直接回退到运行过的java堆栈帧中某一帧。当我调试时,一不小心错过了某个关注的代码行时,我常常用这个回退一帧。使用“Drop to Frame”这个特性我可以简单的重新运行某帧代码。 – 导航: Step into Selection 第二个是“Step into Selection”. 这也是很简单,但很多人使用的一个。要使用它,你只需要按 Ctrl+Alt 同时点击一个你想运行到的方法名。非常方便,非常快速。相比“Step Into”这个非常方便,想想你像跟踪进一个有很多参数的函数,如果用“Step Into”你必须进入,退出每个参数计算过程,才能进入到你真正想进的函数。“Run to line”也是很棒的特性。只需要把光标放在你想运行到的哪一行前面,然后按“CTRL+R”就可以了。 ljb_iss翻译于 […]
View Detailsphp开源cms建站系统都有哪些?
CMS介绍CMS是Content Management System的缩写。意为"内容管理系统"。CMS具有许多基于模板的优秀设计。可以加快网站开发的速度和减少开发的成本。CMS的功能并不只限于文本处理。它也可以处理图片、Flash动画、声像流、图像甚至电子邮件档案。CMS其实是一个很广泛的称呼。从一般的博客程序。新闻发布程序。到综合性的网站管理程序都可[fly]以被称为内容管理系统。国内的内容管理系统1、PHPCMS2008SP4PHPCMS 是国内领先的网站内容管理系统。同时也是一个开源的PHP开发框架。PHPCMS由内容模型、会员、问吧、专题、财务、订单、广告、邮件订阅、 短消息、自定义表单、全站搜索等20多个功能模块组成。内置新闻、图片、下载、信息、产品5大内容模型。PHPCMS 采用模块化开发。支持自定义内容模型和会员模型。并且可以自定义字段。在当今瞬机万变的市场环境中。快速高效的IT解决方案是您业务成功的关键。我们PHPCMS因为能为您量身打造完全符合需求的解决方案而自豪。运用我们 的系统。我们可以让您的企业更高效。从而在市场中获得更大的利润。 我们在CMS领域的长期成功经验。使得我们一举成为国内CMS领域的领跑者。我们为您提供的服务包括:PHPCMS商业授权、程序定制、数据转换、视频存 储服务。携手PHPCMS。迈向您事业的新高点。备注:PHPCMS拥有比较大的用户群体。已经被酷6收购。不过创始人早已经离职。已经组建新的团队建立新的公司开发新的PHP内容管理系统。特色功能很多。介绍如下:全面的内容展现形式您是否因为CMS系统不支持某些内容展现形式而委曲求全甚至选择放弃?内容展现形式受限是当前中小型站点普遍存在的问题。不仅制约了编辑发布内容。 还影响了用户体验。 CmsTop 结合国内顶级门户经验和广泛调查分析。提供了全面的内容展现形式。包括文章、组图、链接、视频、访谈、投票、问卷、活动、辩论、专题、报纸、杂志等。自由的页面维护能力当今世界正处于一个信息爆炸的时代。如何快速从杂乱繁多的信息中挑选出最有看点的内容并推送至入口页面就显得至关重要了。 CmsTop 提供了自由的页面维护能力。把网站首页、频道首页和专题页等页面划分为很多区块。发稿编辑可以随时向页面区块推荐内容。页面编辑则可以决定哪些内容显示到 页面的各个区块。并且可以更改标题和排序。可以实现一行显示多个标题。专业的运营分析报告网站上线了、改版了、推广了。 您是否很想知道各个频道、栏目、内容的流量情况?您是否很想知道众多的编辑人员。到底分别给公司做了多少贡献? CmsTop 提供了专业的运营分析报告功能。您可以查看某时段内各个频道页面、栏目、内容的流量情况和某个时段内编辑的发稿量和PV量。给您的运营决策和编辑考核提供 科学的数据支撑。高效的操作管理流程您是否因为系统难以上手或者操作复杂而烦恼?这不仅影响您的工作效率。而且还会影响您的心情和身体健康。 如何提高用户体验。将是我们永恒的主题。我们宁愿多花一天时间来策划、讨论、设计和编程。来为您节约一分钟。还您一个好心情。 CmsTop 的每一个操作流程都是经过精心策划的。广泛应用了当前最流行的AJAX技术。以便于简化操作流程和提升响应速度。全方位的安全保障机制您是否因为网站经常被挂马甚至数据丢失而烦恼呢?建设一个网站会耗费大量的人力和物力。一旦安全出现问题。都会导致巨大的经济损失。并危害网民计算 机安全。 CmsTop 实现了前后台完全分离。静态文件和动态程序完全分离。并且针对常见安全漏洞采取了防范措施。同时还提供木马扫描工具和数据备份方案。高性能高负载您是否遇到过因访问量或数据量过大而导致系统运行缓慢甚至崩溃? CmsTop 采用了最优化的程序算法、高速的缓存机制和高效的数据库设计。支持千万级数据量和分布式部署2、DEDECMSDedeCMS V5.6是织梦组建团队后推出的又一力作。本次发布的新版本。延续了以往的简单、易用、高效。并且在这一版本中进一步加强了模块的概念。是站长建站首选利 器是。通过不同的模型组合。可组建出地方门户、行业门 户、政府及企事业站点等各种应用。本次发布的新版对内核进行了重大升级。规范了核心文件并重写了会员 相关程序。同时。这次对模板引擎做了很大的调整。在保留原有模板特性的同时。这次新版本中更侧重了规范、易用、可扩展。使模板制作变得更方便。在增强用户 体验的同时。我们更侧重程序的功能健壮及易用。此次新版本中织梦加入了更多新功能。例如:模块安装及打包、文件指纹校验、WAP站点访问、商品及支付接口 等。同时对模型、栏目及文档处理各个方面都做了升级。历时4年不断发展。DedeCMS日益走向成熟。我们的产品。得到了数以万计站长的肯定。备注:个人觉得织梦内容管理系统功能是比较强大。拥有比较大的用户群体。但很多组建是卸载不了的。感觉有很多不想要的功能却不能去除。后台感觉教乱。创始人也是和PHPCMS一样已经离职。3、PHP168 V6独创的模板标签技术。制作风格非常简单 自定义字段。自由添加模型。可以任意创建图片、下载等系统 强大的自定义表单功能。可以任意添加需要的表 单 强大的考试系统。试题入库。自由组合成试卷。进行企业员工考评 强大的投票系统。可自由定义投票功能。PK功能/人物投票/问题调查 集成多种 在线充值在线支付接口。实现完美的电子商务平台同时提供php168 分类系统一切皆有可能。它可以帮助你做成类似58同城.百姓网那样的巨型站 自定义添加字段。可以任意添加自己需要的功能 自由添加模型。可以任意创 建房产、求职、交友、交易等等模型 智能IP来源判断.系统跟据访客所在城市.自动跳转到对应的城市页面 联系人资料防采集功能。自动把联系人资料生 成图片 集成多种在线充值在线支付接口。实现完美的电子商务平台还有行业B2B商务系统做成类似钢铁网.玻璃网那样年收入上千万的行业站.不再遥远的梦想 集成多种在线充值在线支付接口。实现完美的电子商务平台 集成手机、邮箱会员真实资料认证体系统。提高信息可信度 扩展性强。可以自由整合当前主流论坛程序与PHP168相关模块系统 商务系统为国内领先行业电子商务解决方案. 商务系统将主流商务模型、实际供应链流程、技术拓展与用户体验备注:这个系统似乎是为地方门户而生的。使用PHP168你会发现建立一个门户网站是那么的容易。当然运营的话就看你自己了4、SupeSite7.5社区变门户。增加多层附加值!SupeSite 是一套独立的内容管理系统(CMS)。 并且拥有强大对 Discuz! 论坛信息和 UCenter Home 个人空间信息聚合的功能。为站长提供了一个创新的社区门户解决方案。通过 SupeSite 软件。社区论坛相关内容可以完成智能化的提取。并可将相关联数据及时的更新。 SupeSite 与站内论坛(Discuz!)和个人空间(UCenter Home)协同运转。能更加轻松地将网站庞大繁琐的数据资源进行有效整合。大大减少查找和管理上的不便。自动生成一个生态型 Web2.0 社区门户。SupeSite 作为国内用户量最大。覆盖面最广的社区门户聚合软件。占据了国内 95% 的市场份额。五大全新功能:频道复制:可以使站长很容易的复制出一个全新的资讯频道全新评论:通过各种设置搭配。打造适合自己站内人群的资讯互动。资讯表态、排行榜:多样性的表态。更为站点的互动添砖加瓦。用户投稿平台:增强用户在网站上的参与度。并在个人中心维护管理网站信息。用户组、积分:全新的用户组权限细分。并引入经验、积分概念。备注:康盛老牌内容管理系统。最近动作比较大。新的版本已经开始测试。有几个不错的特色功能。大家可以去试试。整合方面肯定是最佳选择。5、帝国CMS6.5官方介绍:更完美的构架、更强的系统扩展、更大的容量这就是帝国网站管理系统(EmpireCMS)v6.0。本次升级直接从基础构架改动。对所有系统文件进 行全面优化。6.0拥有更高的稳定性、更强劲的性能、更强大的系统扩展。新构架特别在数据容量上做了超强的优化。支持无限分表。足以满足各类门户级别网站 需求。官方发布的EmpireCMS6.5不仅增加了高性能、高容量的系统构架。还新增了: 更加强大灵活的系统模型扩展 全站全文搜索功能:采用中文分词、编码转码和Mysql全文检索技术结合。搜索非常高效。解决了同时搜索多个表的数据、搜索存文本模型的内容、在大数据量情况下的全文搜索解决方案。 评论系统支持自定义字段、支持分表:在复杂评论系统及大数据量的评论数据下效果显著。 模板LIST.VAR支持程序代码:使帝国所有模板均可使用php代码对字段内容进行灵活处理。实现各种复杂应用。 新增标题分类功能 新增购买充值类型功能 结合项功能全面升级。检索范围更大更灵活 […]
View DetailsSNS(社会化网络系统)php、net开源
1:UCenter Home采用PHP+MySQL构建的社会化网络软件(Social Network Software,简称SNS)。 通过 UCenter Home,建站者可以轻松构建一个以好友关系为核心的交流网络,用户可以使用迷你博客记录;方便快捷地发布日志、上传图片;与其好友们一起分享信息、讨论话题;了解好友最新动态。特色功能:UCenter Home 强调“家”的理念充分认可每一个站点用户的个人隐私重要性。提供强大丰富的隐私设置功能。每一个人都有权限设置自己的个人主页、资料、日志、相册等是否公开、或只好友可看、或指定特别好友可看、或仅自己可看、或者需要输入密码才可看;并可完全控制将自己的哪些动作可以产生动态推送到好友面前。强调只提供用户愿意关注的信息UCenter Home 强调只提供用户愿意关注的信息,在信息噪音方面有着多级筛选控制。每一个人都可以将自己的好友进行分组,并选择屏蔽哪些用户组的动态;同时,可针对特定的好友、特定的动态进行单独屏蔽,确保因好友增多带来的信息噪音问题。UCenter Home独立与多应用以 UCenter 为多应用交换中心,既可以独立运作,又可以实现与多个应用挂接,包括 Discuz! 论坛、SupeSite 社区门户等,用户在这些各类产品中的动作,都可以以动态的方式发送到 UCenter Home,让关注的好友们及时了解到自己的行为;同时,自己也可以在 UCenter Home 即可轻松理解好友在站内各种系统中的更新信息。强大灵活的漫游应用开发平台 UCenter Home 使用强大灵活的 Manyou Open Platform 第三方应用开发平台。Manyou Open Platform(Manyou 开放平台/MYOP)服务是由 Comsenz 公司为应用开发者提供的开放平台。作为 UCenter Home 使用网站的开放平台应 用开发标准(API),Manyou 将为您站点 UCenter Home 的用户提供各种个性化的互联网应用。开启用户应用功能后,用户可以自由选择各种不同的或好玩有趣、或实用的等应用(诸如电影、送礼物……)在站内进行使用。2:SpaceBuilder采用asp.net业内领先的web2.0社区平台。使用预置的博客、相册、文件、网摘、迷你博客、资讯、论坛、活动、圈子等应用模块,可以快速的搭建具备sns特征的在线社区。借助SpaceBuilder平台的服务(用户、朋友、私信、邀请、权限、审核、隐私、积分、通知、动态、标签、分类、附件…),二次开发者可以快速的增加新的应用模块或者对现有的应用模块进行修改。3:ThinkSNS采用PHP+MySQL构建的社会化网络系统完整的产品构架、完善的基础应用、开箱即用。 内置API接口、后续支持自建平台、核心和应用分离。 完善的后台管理、可植入独立的应用管理。 正在完善IM应用,包括独立部署的WebIM和基于Air技术的客户端应用。4:NetSNSNetSNS是基于Asp.Net开发的社交网络建站系统。可与多种互动Web应用程序整合,整个产品采用先进的技术(SQL2000数据库、 Ajax,、Div+CSS布局等诸多网络流行元素囊括其中),适合各方面应用的要求。提供一个安全、稳定、高效、易用、快捷的SNS平台。NetSNS 平台有极其丰富的扩展娱乐功能,将缩短您与Facebook、开心网等知名SNS社区的距离,用最先进的技术帮您搭建一个属于您的私人专属娱乐社区。5:BoonEx(国外的)采用PHP+MySQL构建的多功能社区、无论是婚恋交友、社会网络(SNS)、在线俱乐部,抑或是虚拟社区,Boonex都能够游刃有余。您的精彩创意将在瞬间化为现实。利用Dolpin,您可以轻松搭建一个包含交友、博客、图片、音乐、电影、视频聊天、投票、论坛、文章等功能模块的强大而灵活的社区6:openpne日本主流的SNS建站程序,免费开源代码,国内有公司做了openpne中文版,不过他们竟然用来卖钱,实在是有些过分,另外OpenKaku也是基于openpne开发的一款sns产品。7:Community Server国外重量级的sns社区源码,不过只开放了Express Edition版本,其他版本只提供了试用版。大家可以看看相关的中文化网站,能找到不少资料。 8:PHPizabi(小众SNS社区)与当下所有的SNS开源程序比较,PHPizabi无疑是最易用最简单的。PHPizabi官方站点 http://www.phpizabi.net/ PHPizabi演示地址 http://demo.phpizabi.net/ PHPizabi具备SNS系统应具有的基本功能,提供博客,论坛,站内消息,聊天室,发布通告,文件共享,私人博客,私人相册,书签管理等功能。下面是补充: insoshi也是一个类似Facebook的建站程序,基于Ruby on Rails构建。 AROUNDMe也是类似Ning, Myspace, Google groups的一个免费社会化网站源码,自定义性非常强。PHPizabi也是一个很强大的社会化交友平台,在国外使用较多。CHSNS也是一个中文sns源码项目,基于sql+.net,虽然有免费版本,但并没有完全开源。iSocial免费的社会化CMS系统,可以创建类似Friendster和Orkut的站点。Yogurt这是基于xoops CMS的一个社会化插件. 其他社会化源码: VMukti Appleseed AstroSPACES FlightFeather SNOSS OpenSocialNetwork Facelift Mahara 转自:http://www.googleweiwu.com/?p=27
View Details开源 CMS系统 / SNS系统 / BBS系统
国内外比较知名的php开源cms系统 cms系统 1.phpcms 2.dedecms 3.php168 4.SupeSite 5.帝国CMS 6.KingCMS 7.AKCMS 8.08CMS 9.MetInfo企业网站管理系统 10.verycms内容管理系统 Verycms内容管理系统是由著名论坛phpwind社区开发小组开发的一套WEB2.0型内容管理系统,集合了资讯、日志、相册、商品、书签、音乐、下载、论坛、朋友圈等众多web2.0流行元素于一体,和之前的SupeSite有很多相似之处,同样适合站长建立属于自己的WEB2.0门户。 备注:如果社区是用phpwind搭建的,verycms整合很容易。但是和康盛的ucenter的整合问题比较多 国外优秀的php开源内容管理系统 http://paranimage.com/10-open-source-php-apps/一个总结帖 1、Joomla!逐浪 2、Drupal 3、Plone 4. 曼波-MAMBO 5. WordPress SNS(社会化网络系统)php、net开源 1:UCenter Home 采用PHP+MySQL构建的社会化网络软件(Social Network Software,简称SNS)。 通过 UCenter Home,建站者可以轻松构建一个以好友关系为核心的交流网络,用户可以使用迷你博客记录;方便快捷地发布日志、上传图片;与其好友们一起分享信息、讨论话题;了解好友最新动态。 2:SpaceBuilder 采用asp.net业内领先的web2.0社区平台。使用预置的博客、相册、文件、网摘、迷你博客、资讯、论坛、活动、圈子等应用模块,可以快速的搭建具备sns特征的在线社区。借助SpaceBuilder平台的服务(用户、朋友、私信、邀请、权限、审核、隐私、积分、通知、动态、标签、分类、附件…),二次开发者可以快速的增加新的应用模块或者对现有的应用模块进行修改。 3:ThinkSNS 采用PHP+MySQL构建的社会化网络系统 完整的产品构架、完善的基础应用、开箱即用。 内置API接口、后续支持自建平台、核心和应用分离。 完善的后台管理、可植入独立的应用管理。 正在完善IM应用,包括独立部署的WebIM和基于Air技术的客户端应用。 4:NetSNS NetSNS是基于Asp.Net开发的社交网络建站系统。可与多种互动Web应用程序整合,整个产品采用先进的技术(SQL2000数据库、 Ajax,、Div+CSS布局等诸多网络流行元素囊括其中),适合各方面应用的要求。提供一个安全、稳定、高效、易用、快捷的SNS平台。NetSNS 平台有极其丰富的扩展娱乐功能,将缩短您与Facebook、开心网等知名SNS社区的距离,用最先进的技术帮您搭建一个属于您的私人专属娱乐社区。 5:BoonEx(国外的) 采用PHP+MySQL构建的多功能社区、无论是婚恋交友、社会网络(SNS)、在线俱乐部,抑或是虚拟社区,Boonex都能够游刃有余。您的精彩创意将在瞬间化为现实。利用Dolpin,您可以轻松搭建一个包含交友、博客、图片、音乐、电影、视频聊天、投票、论坛、文章等功能模块的强大而灵活的社区 shop(B2C、B2B)php、net开源商城 1:ECSHOP(php+mysql) 2:ECMall(php+mysql) 3:YxShop(net+sqlserver) 5:MvMmall
View DetailsAndroid requires compiler compliance level 5.0 or 6.0. Found '1.4' instead的解决办法
今天在eclipse里报这个错误: Android requires compiler compliance level 5.0 or 6.0. Found '1.4' instead. Please fix project properties 1. 项目 右键 ->android tools ->Fix Project 2. 如果不可以,检查Project -> Properties->Java Compiler 确认JDK compliance被设置为1.6,并且enable specific seetings. http://www.cnblogs.com/sunjialiang/archive/2011/08/25/2152715.html
View Details从WPF入手,实现简单的多线程
这次我了解了WPF的多线程大致实现原理,并简单编写了一个多线程程序。 先将几个常用的概念列一下: 线程关联度:WPF属于创建它的线程,并且不能被其他的线程直接访问。当一个对象被关联到一个单线程时,就认为它是一个单线程对象,并且认为该对象具有线程关联度。 同步:同步可以理解为在执行完一个函数或方法之后,一直等待系统返回值或消息,这时程序是出于阻塞的,只有接收到返回的值或消息后才往下执行其他的命令。 这样的好处是能避免读写时的数据错误。 异步:执行完函数或方法后,不必阻塞性地等待返回值或消息,只需要向系统委托一个异步过程。在此期间可以进行别的过程,当系统接收到之前那个调用的返回值或消息时,系统会自动触发委托,开始处理返回值。 下面以两段WPF的代码为例,说明如何利用委托来实现异步线程,我使用的是Visual Studio 2008 第一段代码 前台代码 <Window x:Class="ThreadTest.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window1" Height="300" Width="300"> <Grid> <Border Width="200" Height="225" BorderBrush="Black" BorderThickness="1" Margin="4"> <StackPanel> <TextBox Height="19" Name="textBox1" VerticalAlignment="Top" /> <Button HorizontalAlignment="Left" Name="button1" Width="75" Click="button1_Click">Button1</Button> <Button HorizontalAlignment="Left" Name="button2" Width="75" Click="button2_Click">Button2</Button> <Label Height="28" Name="UIThreadId" Width="120" Content=""/> […]
View Details编写高效的CSS选择器
高效的CSS已经不是一个新话题,也不是一个我非得重拾的话题,但是,它却是自我在SKY工作以后,真正感兴趣并始终关注的一个话题。 很多人或者忘记了,或者仅仅是没有意识到,CSS可以是高效的也可能导致低能。然而,我们可以不考虑当你自认为会的太少而使用了低效的CSS这种情况。 这些规则只真正用在性能要求很高的网站上,这些网站对速度要求很高,任何一个页面可能含有成百上千个DOM元素。但是实践出真理,不管你是在打造下一个facebook 还是在开发一个本地的展示网页,多学点总是好的…. CSS 选择器 CSS 选择器对我们大多数人来说并不新鲜,较基础的选择器分别是类型(如 div),ID(如#header)和类(如.tweet)。 较不寻常的包括基础的伪类(如:hover)和更复杂的CSS3以及 '正则'(‘regex’)选择器,比如:first-childor[class^="grid-"]。 选择器具有固有效率,引用Steve Souders的话来说,较有效到较不有效的CSS选择器的顺序是这样的: ID,如#header Class, 如.promo Type, 如div Adjacent sibling, 如h2 + p Child, 如li > ul Descendant,如ul a Universal,即* Attribute, 如[type="text"] Pseudo-classes/-elements, 如a:hover 引用自Steve Souders的Even Faster网站 认识这很重要,虽然一个ID技术上更快而且表现更优,但几乎都不这样用。用Steve Souders的CSS测试器,我们可以发现一个 ID 选择器 和 一个类选择器 在再渲染速度方面差别很小。 在一台Windows机器上的Firefox6中,我获得了关于一个简单的类选择器的平均再渲染数据。ID选择器给出了12.5的平均值,所以实际上它要比一个类再渲染得慢一点。 ID与类之间的速度差异几乎是不相干的。 对一个类型(<a>)的选择测试,相比一个类或ID给出了慢得多的再渲染。 对一个层次非常多的子孙选择器的测试给出了 大约440的数值! 通过这我们可以发现IDs/classes与types/descendants的差别非常巨大…它们自身之间的差异很细微。 注意 这些数值在不同的机器和浏览器变化非常大。我极力建议你自己运行一下。 组合选择器 你可以单独使用一种标准选择器,如#nav,来选择所有以"nav"为ID的元素,你也可以使用组合选择器,如#nav a,来选择任何在ID为’nav’的元素里面的链接元素。 现在,我们从左到右读这个组合标签。我们先找到#nav ,然后再找到里面的元素。但是我们的浏览器不是这样解析的,它是从右到左来解析这些组合选择器的。 当我们看到#nav里面有个a,而浏览器看到的却是有个a在 #nav里面,这些细微的差异对浏览器的性能有重大影响,同事学习他们是很有价值的。 如果想知道浏览器这样解析的原因,请参考this discussion on Stack Overflow. 对浏览器来说,从最右边的元素(它最想渲染的元素)开始,然后回溯到DOM树比从DOM树的最高层开始选择向下寻找,甚至可能达不到最右边的选择器(关键的选择器)要高效。 这对CSS选择器的性能有重大影响…. 关键选择器 这里讨论的关键选择器, 是处在复杂选择器最右端的选择器,也是浏览器最先解析的选择器。 让我们回到讨论开始的地方,哪种选择器最高效?哪种选择器作为关键选择器会影响选择器的性能;当我们书写CSS代码的时候,正是这个关键选择器影响选择器的效率。 一个关键选择器是这样的:
1 |
#content.intro{} |
天生高效选择器如类型选择器是不是就会有更高的性能?浏览器会寻找.Intro的所有实例(数量不会很多),然后向上查找DOM树,以确定该关键选择器是否在以“content’”为ID的元素里面。 然后,以下的选择器性能就不怎么好了:
1 |
#content*{} |
这个选择器做的工作是这样子的,它先查找每个页面(是每个单个的页面),然后去看看它们是否有一个 #content 的父元素。这是一个非常不高效的选择器,因为它的关键选择器执行开销太大了。 运用这些知识我们就能在分类和选择元素时做更好的选择。 假设我们有一个非常庞大的页面,非常的大并且是一个还有一个庞大的网站。在这个页面上,有上百甚至上千个<a>标签。社交媒体的链接只占很少的一部分,并且包含在ID为#social的<ul>里面。假设这些链接是,Twitter, facebook, Dribble 和 Google+。我们在这个页面上有四个社交媒体链接,还有上百个其他的链接。 以下这个选择器代价很高而且性能不好:
1 |
#social a{} |
浏览器将访问扫描页面上的上千个链接,然后才选择上#social节点下的四个链接。我们的关键选择器匹配了大量的我们并不感兴趣的标签。 为了消除这个问题,我们可以为每一个包含在社交媒体<ul>块下面的<a>标签指定更明确和显式的选择器.social-link。但是这跟我们所知道的恰恰相反;我们知道了,当我们使用精简的标签的时候,尽量不要使用多余的类。 这就是为什么我觉得性能是如此的有意思;在网页标准最佳实践和速度之间,需要一个平衡。 […]
View Detailsreset.css
html, body, div, span, object, iframe,h1, h2, h3, h4, h5, h6, p, blockquote, pre,a, abbr, acronym, address, big, cite, code,del, dfn, em, img, ins, kbd, q, s, samp,small, strike, strong, sub, sup, tt, var,b, i, dl, dt, dd, ol, ul, li,fieldset, form, label, legend,table, caption, tbody, tfoot, thead, tr, th, td { margin: 0; padding: 0; border: 0; outline: 0; font-size: 100%; vertical-align: baseline; background: transparent;}body { line-height: 1;}ol, ul { list-style: none;}blockquote, q { quotes: none;}blockquote:before, blockquote:after,q:before, q:after { content: ''; content: none;} /* remember to define focus styles! */:focus { outline: 0;} /* remember to highlight inserts somehow! */ins { text-decoration: none;}del { text-decoration: line-through;} /* tables still need 'cellspacing="0"' in the markup */table { border-collapse: collapse; border-spacing: 0;} /* Resetting HTML5! */section, article, aside, header, footer, nav, dialog, figure { display:block; }
View Details写自己的CSS框架 Part3:CSS中的Class
3.1框架中的工具 这个CSS中工具有点像C#中的static class,把一些常用的方法放到类里面达到可复用的效果.在CSS中.有很多CSS class是在我们在项目设计中一遍又一遍的要用到的.因此这些tool是CSS框架中必不可少的一部分。 3.2工具类的组成和组织方法 一般现有框架会把这个.class的定义放到各个不同的文件中比如,from.css(用于格式化表单),typography.css(用于格式化布局),但是这个工具类却是我们自己写框架的精髓所在,因为这是我们框架中可以扩展的部分,所以我更喜欢把css class单独命名为tool.css来存放这些工具类.(因为这样在网站改版时就要愉快很多) 也许废话太多了.下面简单给出几行代码,让大家对所谓的Tool.css有初步了解。 Code 1/* 用于格式化Form的CSS Tool 2 3————————————————————-- */ 4 5 6 7.error, 8 9.notice, 1011.success { padding: .8em; margin-bottom: 1em; border: 2px solid #ddd;}12131415.error { background: #FBE3E4; color: #8a1f11; border-color: #FBC2C4;}1617.notice { background: #FFF6BF; color: #514721; border-color: #FFD324;}1819.success { background: #E6EFC2; color: #264409; border-color: #C6D880;}202122 这是用于表单的一些CSS类.有了这些.我可以让项目中每一个使用表单的地方风格实现统一. 而使用JS的地方可以更加简洁.下面一小部分代码是使用了JQUERY从服务器获得AJAX响应后的代码片段 Success:function(data){ $(“<span>”+data+”</span>”).addClass(“success”).appendTo(“#result”); } 恩.是不是简单多了? PS:看客:你不是号称CSS框架吗.这样写不就是把css放一起吗?吹的那么玄乎. 别急嘛.下面讲到CSS之间的组织方式 在我被CSS蹂躏的经历里,其实有很多CSS布局,以及CSS选择符方面问题,大部分是因为CSS选择符之间优先级的关系,这些问题因为简单,所以折磨的各位Developer痛不欲生.但是这些问题就像枪一样,好好利用可以保护你,如果利用不当会让你遭殃。 下面说说我总结的CSS的OCP原则(开放封闭原则),这个规则是设计模式里的,但我发现在CSS中同样适用. 当你针对项目的CSS基本框架写好后,可以添加你所需要的元素,但如非必要,不要去修改它,而是在需要修改的地方重载。 重载: 以上面的例子为例.如果我们在一个特定页面里,想让error颜色变得更加刺眼比如让error的color变成red,只需在你需要修改的特定页面头部的<style>标签中设置 1.error{23Color:red;45}6 因为内页 style比外联style有更高的权值(如果你对CSS的优先级问题不太了解,参考这个文章http://www.xker.com/page/e2009/0622/72573.html),所以error显示的字就会变成红的,但同时又会保留了background和border-color的属性.因此我可以更优雅的覆盖原有CSS,达到重载的目的. 扩展: 当我们需要一组新的css类时,只需要在tool.css相应部分增加即可,比如我们需要表单增加一个介于notice和error之间警告程度的alert用于显示那些有点警告意味的信息.我们只需要加入 1.alert23{45/*——代码写在这—-*/67}8 这样做的优势: 1.代码更加优雅,维护更加方便 2.容易变换网站风格,举个例子,如果你原来的颜色风格偏深,那么你想换一套浅颜色的风格,只需要改变你所需要改变的部分,把你需要改变的部分重新写一个CSS来覆盖原来的CSS,示例代码如下: <link href="css/tool.css" rel="stylesheet" type="text/css"/><link href="css/toolBlue.css" rel="stylesheet" type="text/css"/> 这样看起来tool.css是不是很“面向对象”,很像基类,而toolBlue像子类,继承那些padding和magin之类的布局属性,而重载color等风格属性,oh yes,life seems like more easier than ever bofore:–) 3.3写在最后 下面我拿出一个简单的tool.css展示出来,让大家有个更直观的了解。 Code/*用于格式化Form的CSS Tool ————————————————————-- */ .error, .notice, .success { padding: .8em; margin-bottom: 1em; border: 2px solid #ddd;} .error { background: #FBE3E4; color: #8a1f11; border-color: #FBC2C4;} .notice { background: #FFF6BF; color: #514721; border-color: #FFD324;} .success { background: #E6EFC2; color: #264409; border-color: #C6D880;} .error a { color: #8a1f11;} .notice a { color: #514721;} .success a { color: #264409;} /*用于布局方面的css tool ————————————————————-- */ .clear { clear: both; display: block; overflow: hidden; visibility: hidden; width: 0; height: 0; } .clearfix { display: inline-block; } //用于显示方框,实际应用中我喜欢加边框 .box { padding: 1.5em; margin-bottom: 1.5em; background: #E5ECF9; } /*根据项目自定义的css tool ————————————————————-- */ //以下几个是用于和js交互时使用 .hide { display: none;} .highlight { background:#ff0;} .added { background:#060; color: #fff;} .removed { background:#900; color: #fff;} //下面是关于字体的 .small { font-size: .8em;; } .large { font-size: 1.2em; } //还有其他你自定义的class….etc… 恩.基本经常要用到的就是这些,但tool.css的重点在于随着你项目的进展,这个tool.css也会越来越胖. J […]
View Details写自己的CSS框架 Part2:跨越浏览器的reset
2.1浏览器的差异在何处 我想写CSS的人大多遇见过在IE里写的页面美轮美奂,而用FF打开却是分崩离析,反之亦然.这种痛苦是因为IE和FF对一些默认样式的解析并不相同所导致. 网上有很多为何不一样的例子,下面链接是一个比较全的不同之处,大家可以进去看看。 http://hi.baidu.com/css%D6%AE%C3%C0/blog/item/f44628e6a506c229b83820ef.html 2.2如何实现跨浏览器 2.2.1实现原理 既然问题出在FF和IE对各种不同HTML元素的解析上所有偏差.更不用说一些其他小市场份额的浏览器上.我们只需要针对性的把页面里大多数HTML元素重置即可.这样在各种浏览器里面显示的效果会是相同的. 2.2.2实现方式 重置我们选择的名称和大多数框架一样,reset.css,用我们Develper的思想理解——--框架中所有元素的基类,就像.net里的Object对象一样。 下面我们来说说reset.css的构成. 1.首先定义最基本的body,因为所有其他元素都由此继承.我喜欢的框架遵循“尽量保持小”的原则,所以我只简单清除padding和margin,以及设置字体(设置成具体数值,因为在后面用’em’做单位的时候都要以这里做比较,页面风格需要整体变化时,重载这里.) 2.将大量浏览器预定义的块状元素清除magin和padding(块装元素即在未定义样式的情况下浏览器render出来的方式为display:block;的元素) 3.让列表前面的符号消失,图片边框消失,p的上下边距为一行字. 我喜欢reset.css尽量保持简洁.只要实现了基本的重置即可. PS:不过也不能过于简洁.记得曾经的框架喜欢对”*”这个CSS选择符重置.可是这个杀伤力太大,往往是杀敌1000自伤800,遇到input之类的表单元素时还得重置回来.最后据传说这样还有性能问题-.-!!不过难以考证… 下面是满足上面条件最基本的reset.css Code1.body { 2. padding: 0; 3. margin: 0; 4. font: 13px Arial, sans-serif; 5. } 6. body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset ,p,blockquote { 7. padding: 0; 8. margin: 0; 9. font-weight: normal; 10. font-style: normal; 11. line-height: 1em; 12. font-size: 100%; 13. } 14. table { 15. font-size: inherit; 16. font: 100%; 17. } 18. ul { 19. list-style: none; 20. } 21. img { 22. border: 0; 23. } 24. p { 25. margin: 1em 0;} 这个reset.css是目前我个人最喜欢,因为reset.css就像.net中的Framework中的Object类一样,应该尽量保持精简,这个精简了很多.只留下了必要的重置. 在这里值得一说的是:在body里将font的大小和字体设置了具体的值,在其他元素里通过继承的方式来重写这样的方式是我最喜欢的,这样可以很容易的保持页面整体风格的统一 2.3一些注意事项 Reset.css一经写好,除了BUG之外.永远不要去修改它.而是在其它页面中重载它(不知道用OO的方式理解CSS是否正确,即利用CSS的优先级特性覆盖.这个在下一章说到.) http://www.cnblogs.com/CareySon/archive/2009/07/07/1518543.html
View Details