AMD规范及require.js用法(Javascript模块化编程)

网页越来越像桌面程序,需要一个团队分工协作、进度管理、单元测试等等……开发者不得不使用软件工程的方法,管理网页的业务逻辑。Javascript模块化编程,已经成为一个迫切的需求。理想情况下,开发者只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块。Javascript社区做了很多努力,在现有的运行环境中,实现”模块”的效果。本文总结了当前"Javascript模块化编程"的最佳实践,说明如何投入实用。虽然这不是初级教程,但是只要稍稍了解Javascript的基本语法,就能看懂。

一、原始写法

模块就是实现特定功能的一组方法。

只要把不同的函数(以及记录状态的变量)简单地放在一起,就算是一个模块。

function m1(){

//…

}

function m2(){

//…

}

上面的函数m1()和m2(),组成一个模块。使用的时候,直接调用就行了。

这种做法的缺点很明显:”污染”了全局变量,无法保证不与其他模块发生变量名冲突,而且模块成员之间看不出直接关系。

二、对象写法

为了解决上面的缺点,可以把模块写成一个对象,所有的模块成员都放到这个对象里面。

var module1 = new Object({

_count : 0,

m1 : function (){

//…

},

m2 : function (){

//…

}

});

上面的函数m1()和m2(),都封装在module1对象里。使用的时候,就是调用这个对象的属性。

module1.m1();

但是,这样的写法会暴露所有模块成员,内部状态可以被外部改写。比如,外部代码可以直接改变内部计数器的值。

module1._count = 5;

三、立即执行函数写法

使用”立即执行函数”(Immediately-Invoked Function Expression,IIFE),可以达到不暴露私有成员的目的。

var module1 = (function(){

var _count = 0;

var m1 = function(){

//…

};

var m2 = function(){

//…

};

return {

m1 : m1,

m2 : m2

};

})();

使用上面的写法,外部代码无法读取内部的_count变量。

console.info(module1._count); //undefined

module1就是Javascript模块的基本写法。

文章来源:http://www.darewe.com/news/news-146.html

使用CSS Sprites就好像玩拼图游戏一样

在大家还在拨号上网的“远古时期”,由于网速的限制,页面开发者都喜欢把网页里面的图片字节数控制的非常小,往往在一个图片文件夹里散落着n多的小碎图。随着网络技术的发展,网速的提升,大家越来越重视页面的加载速度、页面效率问题,过去的那些小图便成为了前端开发者的眼中钉,因为每加载一张图片都会产生一次浏览器请求数,发起的请求数越多那么页面加载的速度也越慢。还有当页面加载时,图片一个个的零星显示,鼠标经过时候背景闪白等也都是我们不能忍受的。于是乎将页面中的背景图整合到一起,利用“background-image”,“background- repeat”,“background-position”的组合进行背景定位的技术被广泛使用与了页面构建中,这就是CSS Sprites。当然CSS Sprites技术也存在着维护不便,内存占用大等等的缺点。

上面这些只是对CSS Sprites技术的一个普及。作为一个开发者我们应该对它有一个更全面的认识,挖掘深度内容,这样才能有利于我们效率开发,团队协作。

头疼的多人拼图游戏

使用CSS Sprites,就好像玩拼图游戏一样。一张白画布,那么多图怎么放到里面去才会完美?这是个让人纠结的事。而且在实际在工作场景中,我们面临着项目开发时间紧张,UI设计图要分期提供,多人协同开发一个项目等等问题。这些问题非常容易让我们在大项目中迷失,造成CSS拼图混乱,维护及其困难的情况。

定好规则,其实拼图也挺好玩的。

先期的准备工作

应对一个项目后期维护成本大的问题,我们最好的解决方案就是在开始前制定一系列的规范来限制问题的产品。好的开始是成功的一半。对于CSS Sprites,在项目开始前,我们要充分认识一个产品,同UI设计师做好良好的沟通,对我们未来组成我们Sprites图的各个元素有个大体的概念,比如我们的背景拼图可能包括什么。

一个好的Sprite画布是必须的

网页设计里面,Grid系统是必不可少的,好的Grid能解决我们很多排版问题。Grid系统同样适用于CSS Sprites。我们需要创建好一个优秀的画板,剩下的工作就是将元素合理的置于画板中了。

原文来源:合肥网站建设公司?http://www.darewe.com/news/news-98.html

HTML5对互联网的若干积极影响

HTML5将会使网页图片具有更强大互动性:

上一代互联网加载的图片为GIF或JPG文件。新型互联网可以在Canvas对象中加载图片。许多好的图片库应运而生,它们中的一些增强了互联网图片的互动 性。现在,JavaScript层可以根据数据计算数值和作图。如果开发人员具备了时间和能力,所有内容可以变得更加活灵活现,文本属性将会越来越少。

HTML5使得网络视频使用更加方便:

HTML5新增了视频标签功能,它帮助网络 开发人员更容易地在网页中添加视频。此前,仅有Flash、Silverlight和JavaFX程序员可以这样做,而现在Jquery和PHP开发人员 也可以在网页中添加视频。HTML5新型视频标签启用后,HTML网页的文字会越来越少,视频却会越来越多。

HTML5或将提升网络安全:

网络浏览器插件是由不同程序开发团队以不同标准、不同 开发模式并在不同安全模型下编写的。其中一些插件的安全性显然不如其他插件高。随着插件数量激增,安全性问题跟踪的复杂性也随之增加。HTML5的出现替 代了许多插件,进而可能会消除插件引发的网络安全问题。

HTML5将简化互联网开发:

Lookingglass Cyber Solutions公司的开发人员比尔?米尔(Bill Mill)简要地解释了这一原因,他表示:“我很喜欢HTML5,因为我使用的是一个统一的开发环境。在HTML5标准下做开发,我只需要用互联网浏览 器、JavaScript和DOM就可以了,而不需要在Flash和HTML5开发环境之间来回切换。”他进一步补充道:“网络用户也会注意到这一点,因 为Flash文件将可以在一个网页中打开。”HTML5提供了统一开发语言(JavaScript)、统一的数据模型(XML和DOM)和绑定文本、音 频、视频和图形的一整套规范(CSS)。

近年来,浏览器提供商产生出相当多的互联网浏览器的改进思路,正是这些思路逐渐发展为第五代HTML标准的原型。第五代HTML正式规范早在6年前已经开始制订,许多HTML5的用户惊讶地发现,尽管规范制订得很好,但它距离成为标准还有很长的差距。

10个新鲜的JQ插件

今天,我们想和大家分享10个最新鲜、令人印象深刻的jQuery插件的集合。这些插件,有的帮助您建立一个很好的幻灯展示、重新排列不同的块元素、显示各种社会化媒体的信息、建立一个图片库等,欢迎来测试这些插件。

1)?fineuploader

采用Ajax技术实现的文件上传组件,支持拖拽文件上传。使用很简便,只需在页面中引入相应的CSS+JavaScript,剩下的就只服务器端处理逻辑。在其提供的下载包中已经有多种语言实现包括:ASP.NET, ColdFusion, Java, Node.js, Perl, PHP, Python?。

有一些选项可以来限制文件大小,文件类型,文件上传的数量等。

2)?responsive-carousel

一个基于jQuery的脚本,用于实现响应式旋转木马。支持鼠标,触摸和键盘。

3)?slideControl

jQuery插件,让您可以轻松地使滑块范围输入

4)?iview

iView是易于使用jQuery的图像滑块与动画字幕,响应式布局和支持HTML元素(视频,IFRAME)的滑块。轻松添加无限数量的幻灯片和标题。使用它作为图像滑块,图像画廊,横幅肩,横幅广告,或演示文稿。

5)?jbar-plugin

jBar创建的通知显示在网页的顶部和自动切换,几秒钟后自消失或用户可以单击功能区显示/隐藏。

这插件非常小,它的功能和样式都完全可以快速自定义。

6)?iosslider

iosSlider是一个jQuery插件,它允许你集成了一个可定制的,跨浏览器的内容滑块到您的网页中。专为用作一个内容滑块,旋转木马,滚动网站横幅,orimage画廊。

7)?jquery-timing

帮助你快速的使用链式和延迟代理模式来实现类似的效果。这个插件提供了简单实用的方法来定义列举,timeout,interval,延迟,并且使用基于时间的循环,仅仅使用数行就可以实现。

8)?socialist

jquery-socialist 是jQuery 社交网络插件,用于从多个社交网络获取数据并创建一个单一的社交媒体流。

9)?vintagejs

VintageJS?是一个jQuery插件,它使用html5 canvas 元素为你的相片添加复古外观。它自带三种效果,并能够自定义。为使用你需要最新版本的jQuery,浏览器需要支持HTML5 canvas元素。

VintageJS经测试支持以下浏览器:Mozilla FireFox 3+, Google Chrome 9+, Apple Safari 5+, Opera 11+ 和 Internet Explorer 9。

10)?gridster

这是一个支持拖拉的多列表格插件,可动态的添加和删除表格中的元素。

关于页面前端设计

但凡从事互联网的人基本都会写几行 html,用过 Word 的人用 Dreamweaver 也能做出规整的页面,所以大部分人会很自然地认为“页面的开发没什么技术含量,很简单”。不仅有这种普遍的认知,对从业者来说也有很多疑惑:做页面前端实现,没问题;兼容性,小 case;图片集成,一直都在用……还能有什么问题?瓶颈啊、天花板啊、转型啊、出路啊就在从业者中广泛讨论。是不是真的没什么问题了呢?网易邮箱前端技术中心也设立好几年了,似乎有着讨论不完的话题,也经常会有一些新的想法让大家为之一振。那么页面开发还有哪些要求,还要做些什么,这里面的水有多深,让我们舀舀看。

在不同的时期对页面前端的看法似乎是多变的。在互联网早期的时候,小车还是比房子贵的,烧饼和粉丝还只是用来吃的,菊花还只是用来泡茶的。那时的页面设计风格相对单一,对应的页面需求比较简单,并且当时的浏览器也基本是 IE6 的天下,javascript 也只是网页特效的代名词,HTML 页面本身没有引起太多人的关注,似乎只要能用 div 甚至 table 加 css 辅助把图片定好位,把页面内容预留好就 OK 了,并且这种观念存在了很长一段时间。随着页面内容的丰富,设计风格的发展,交互复杂性的增加,AJAX 的应用,浏览器的更新换代,又让大家重新对最基本的页面本身重视起来。然后热议的就是浏览器的兼容性,碰到问题最热衷的就是满网络搜索 hack,顺便再骂骂 IE6、7……当这些都做一遍后,似乎又遇到了瓶颈,又开始寻找出路。我们就从这个阶段开始说起。

实现效果图是最基本的工作

把视觉稿通过页面代码的方式表现出来包含了两个基本诉求:1.能够真实反映视觉稿;2.能够通过浏览器的兼容。这两个诉求的达成需要我们有追求细节的态度和一定的页面功底,能完成这两个内容就可以初步进入页面前端的从业者行列了,但这就代表着我们可以胜任页面开发的工作了?不,才刚刚开始!

与设计师的沟通和项目的参与

沟通很重要。先抛出几个问题:我们有没有和设计师探讨过某些效果对低端浏览器渲染效率影响比较大?有没有探讨过部分效果可以用 CSS3 实现从而使得结构更加简洁清晰?有没有在代码和视觉中寻追求过平衡?页面前端的开发向基本用户,编写的代码也直接作用在浏览器上,我们有义务对页面的稳定性和渲染效率负责。我们也经常碰到项目在总体进度压力下导致的设计与页面前端开发同步进行,这时更有必要尽量多地获取项目信息,了解我们还要做些什么,这些可以帮助我们充分考虑重用和框架拓展。

良好的页面结构

页面结构的编写好比盖房的地基建设,其好坏会直接影响到 CSS 代码的质量、js 开发、后台开发还会影响到以后的页面拓展、迭代和页面调整。拿到视觉稿后,不要忙着动手开始,多观察思考。先分析布局,划分框架,然后规划结构,编写代码。特别在大型项目中,合理使用模块化的开发不论从整体进行还是拓展维护都有相当大的好处。

关于 hack

很多同学在页面开发时上网搜索最多的就是 hack 了,是否我们完全要依赖 hack 来实现页面兼容性,答案是否定的。大家经常比喻 IE6 向我们撒了一个谎,结果我们要再撒一百个谎来圆这个谎。不否认 IE6 经常让我们口吐鲜血,但不代表我们用更多的“谎言”来弥补就可以心安理得。大部分情况下可以通过变换思路调整 HTML 结构,或使用一些虽然无法解释但相对安全的 css 来干掉 hack。谁都无法预计使用 hack 什么时候会让我们栽一个大跟头。比如触发 layout 或 position:relative 就可以帮助解决很多 IE6 的问题。

优美的代码

现在很多 web 项目功能复杂,代码规模也会变得很庞大,如何更好地进行协同开发和维护是我们面临的一个问题。需要考虑完善统一的规划,还有要养成良好的代码开发习惯才会在面临各种情况时游刃有余。翻阅页面代码,看到合理的标签使用、良好的注释、清晰的代码结构、用意准确的 css 不仅犹如欣赏一个艺术品,更为下游开发和协同开发降低了不小的沟通成本,我们有什么理由不去这么做呢?举个反面例子:div 滥用是现在比较典型的一个问题。数数看自己使用的标签有多少个呢?不同的语义都该使用对应的标签代码,特别是 HTML5 提供了更丰富的语义化标签,它们都苦苦地在等待战场上的冲锋号,让我们去解放它们吧!

无障碍页面开发

可访问性与易用性是非常主观且人性化的东西。普通人看上去上完美呈现的页面在特殊群体中不一定显得那么贴心。当盲人用读屏软件在页面某个区域内陷入循环时,我们应该感到内疚。只能说目前国内的网站对此的重视程度还远远不够,这就需要我们共同努力,让更多的人感受到我们的热情。

保障效率

作为项目开发中比较靠前的一环,页面开发可能需要尽早完成为项目争取时间,这就需要我们尽可能地提高效率。“工欲善其事,必先利其器”,除了实战经验和代码习惯的形成可以帮助我们提高效率外,想要提高对自己开发的进度掌控能力,还有很多辅助工具可以帮助我们进行页面开发。比如使用 Less 或 Sass 可以帮助我们拓展和组织 CSS,大大提高 CSS 的编写效率增加了可维护性。比如可以通过 zen coding 的自动自动完成和自定义代码块让你可以剑指如飞。甚至还见过通过自定义输入法的代码块关键字来提升开发速度的。多多发掘一定会找到最合适自己使用的工具。

针对服务器的优化

页面开发也需要了解服务器的优化,尽量减小服务器负担。比如 css sprite 就是一个典型减小服务器请求数的例子。在网易邮箱的页面前端开发中大家不停地在做着各种优化,比如一直在寻求文件大小与服务器请求数的平衡;为了尽可能提高缓存利用率采用了补丁升级;对 class 名进行了混淆压缩避免命名过长的冗余;应用 base64 减少请求数量等等措施。这些都是综合权衡的结果,需要考虑各个方面整体优化。因为当页面访问量达到一定的数量级时,再小的一点优化都会达到可观的效果,再小的问题都可能会形成巨大的灾难。

拥抱 HTML5

这是一个充满机会的时代,HTML5时代的来临伴随着移动互联网的兴起创造了更大的机会,还有太多的东西值得我们去学习去发现。 HTML5 提供了丰富的 JS API 接口,需要我们去研究;CSS3的绚丽吸引了足够多的眼球,需要我们去研究;移动设备上如何开发更加适配的页面,需要我们去研究……

Stay Hungry, Stay Foolish

水是越舀越多了,却发现原来下面还深不见底,上面的内容越是深入研究就越会发现更多山川需要翻越。保持饥饿状态,用眼睛去努力发现发掘,不断丰富技能才能找到定位,突破瓶颈,正所谓“唯有高屋建瓴方可水到渠成”。形成本文是因为之前和同行讨论到瓶颈的问题,想给自己,给页面前端的同学一起找找定位,梳理一下思路。拿苹果 CEO 在斯坦福演讲的一句话“Stay Hungry, Stay Foolish”和大家共勉。

Seo先生博客转发,本文固定链接地址:http://SeoSir.cc/691.html