‘前端开发’ 分类的存档

从gmail开始,前端总结出了ajax的概念,也让前端开发工程师们得到了更多的重视,前端技能是一个很庞大的体系,W3C标准,Dom结构,Css样式,Javascript编程 ……

3 条评论Google HTML5+Rock Music :《The Wilderness Downtown》

2010年9月5日

The Wilderness Downtown
The Wilderness Downtown

如果你从没听说过互动电影,那就真的要点击这里开开眼界了。这个页面以灰白色调为主,页面上的动画效果皆由 HTML5 技术制作,官方推荐最好使用 Chrome 浏览器,经过我们的试用,IE8 与 Opera 均无法启动这个页面,而 Firefox 4.0 Beta 4 和 Safari 都能体验这个互动电影。

The Wilderness Downtown
谷歌在间接“鄙视”IE8 与 Opera 对 HTML5 的支持度

但这两款浏览器对这个页面的 HTML5 特效处理速度奇慢无比,偶尔还会出现崩溃现象,我们不排除这一个页面为谷歌 Chrome 浏览器特别优化过,因为这种以特效体验页面来暗中贬低对手的把戏已经屡见不鲜了。

登录这个页面后你首先需要输入你小时候的住址,为什么?因为电影情节将会从这里开始,并且融合谷歌地图和谷歌街景的技术到电影中,达到非常震撼的互动效果,其他诸如 Canvas,Video,Audio 等的 HTML5 标准特效就更加不用多介绍了。

The Wilderness Downtown
输入小时候的住址

经过好一会儿的载入等待之后,由著名作家兼导演 Chris Milk 亲自操刀的互动电影就开始了,开始的时候,一名模样十分鬼祟的白衣男子在狂奔,奔到有气无力的时候,电影会先暂停,让你用交互绘图工具绘画一张明信片,寄给小时候的你。

The Wilderness Downtown
一双无影脚

The Wilderness Downtown
谷歌街景视图中的是不是你儿时的家?

你可以用鼠标乱涂乱画,也可以直接输入你想说的话,不过这张明信片,无论你的画工有多精细,画出来的都只能是错综复杂的线条,配合著名独立摇滚乐团 Arcade Fire 刚刚推出的新专辑《The Suburbs》中的歌曲 We Used to Wait 作为主题音乐,颇有剪不断理换乱的感觉。

The Wilderness Downtown
错综复杂的明信片

The Wilderness Downtown
写完明信片后将会是一段狂奔的视频

纸上谈兵完毕,最后送上这个HTML5 互动电影《The Wilderness Downtown》的视频。


The Wilderness Downtown

关于 Arcade Fire (拱廊之火)

Arcade Fire(拱廊之火)是一支独立摇滚乐队,来自于加拿大的蒙特利尔。乐队的主创成员是Win Butler和Régine Chassagne,他们是一对夫妻。乐队演奏的主要乐器有吉他、贝司和鼓,除此之外还有钢琴、小提琴、中提琴、大提琴、低音提琴、木琴、钟琴、键盘、圆号、手风琴、竖琴、曼陀林和手摇风琴。乐队在巡演中会带上几乎所有的乐器,然后由多面手的乐队成员们在整场演出中交替演奏。

Arcade Fire
Arcade Fire(拱廊之火)

拱廊之火乐队赢得了诸多奖项,包括2008年流星音乐奖的最佳国际专辑奖和2008年朱诺音乐奖的年度另类专辑奖。乐队在2005年和2008年因专辑《Funeral》(葬礼)和《Neon Bible》(霓虹圣经)同获格莱美音乐奖的最佳另类音乐专辑奖提名。而他们于2010年发行的新专辑《The Suburbs》(郊区),更是得到了评论界的称赞。

2 条评论昨天参加了Google组织的DevFest2010

2010年9月3日

http://www.google.com/intl/zh-CN/events/devfests/2010/

还是收获不少的,google还赠送了一些小礼品 T-shirt、包包、笔记本、钥匙链等

几个主题主要围绕的还是HTML5+CSS3 还有一些chrome的深入讲解

相关PPT目前还没有得到,请持续关注,之后如果拿到PPT会持续更新的:)

顺便问下:谁知道昨天最后讲解的那个测试兼容性的 extensions 叫什么?

没有评论精品学习网诚聘视觉设计师,前端制作工程师

2010年8月24日

精品学习网(北京)诚招视觉设计师

招聘要求:
1.有大型门户网站or 电子商务网站设计经验
2.有扎实美术功底,设计理论知识,对流行趋势拥有敏锐的洞察力,对各种设计趋势有灵敏触觉和领悟能力;
3.熟练使用photoshop,掌握illustrator或者freehand等矢量图形软件,有手绘能力优先;
4.有flash设计能力
5.了解html、Dreamweaver等制作工具,手绘能力优秀者优先;了解网页制作流程;
6.有高度的责任心、具备良好合作态度,沟通能力及团队精神,并富有工作激情,创造力和责任感,能承受高强度的工作压力。
7.美术、设计或相关专业本科以上学历
8.三年以上工作经验
工作职责:
1.公司各类产品的视觉风格设定以及界面,图标设计;
2.各重点频道网站整体风格设计
3.品牌建设
应聘材料要求:
1.个人简历
2.相关作品及链接

精品学习网(北京)诚招WEB前端制作工程师

岗位职责:
1、使用Javascript熟练、准确地进行代码构建,实现产品所需的动画效果以及交互效果
2、使用HTML/CSS/XML熟练地进行页面制作及维护,熟悉W3C标准 了解语义化
3、了解所有常用浏览器,利用自己的经验有效地解决浏览器兼容问题
4、保持高效的前端性能
5、与产品、编辑、页面设计人员保持良好沟通,能快速理解、消化各方需求,并落实为具体的开发工作
6、了解服务器端的技术实施细节,有针对性的协助服务器端开发人员开展业务逻辑开发工作
7、时刻保持对当前互联网的各种流行应用的了解,在交互体验、产品设计等方面有自己的见解,并在适当的时候表达自己的意见
8、文档撰写,在前期期间设计交付:URL设计文档、公用模板数据描述文档、模板结构设计文档,在编码期间能撰写清晰明了的注释
9、严格遵守团队的代码格式、结构的规定,编写易读、易维护、高质量、高效率的代码
10、具备良好的前端架构分析能力与设计能力,积极参与前期设计
任职资格:
1、三年以上工作经验,有大型互联网公司任职经历为最佳
2、对javascript语言有十分深入的了解
3、熟练掌握HTML/CSS/XML
4、对互联网产品有着良好的感觉,对交互体验有较为深入的了解
5、思路清晰,具备良好的沟通能力和理解能力

公司介绍:http://www.51edu.com/aboutus/

工作地点:北京海淀魏公村

投递信箱:liug@51edu.com

QQ:76373

7 条评论javascript线程解释(setTimeout,setInterval你不知道的事)

2010年8月10日

今天看到这篇文章,学到了不少东西 特此发出来 和大家分享

JavaScript的setTimeout与setInterval是两个很容易欺骗别人感情的方法,因为我们开始常常以为调用了就会按既定的方式执行, 我想不少人都深有同感, 例如

setTimeout( function(){ alert(’你好!’); } , 0);
setInterval( callbackFunction , 100);

认为setTimeout中的问候方法会立即被执行,因为这并不是凭空而说,而是JavaScript API文档明确定义第二个参数意义为隔多少毫秒后,回调方法就会被执行. 这里设成0毫秒,理所当然就立即被执行了.
同理对setInterval的callbackFunction方法每间隔100毫秒就立即被执行深信不疑!

但随着JavaScript应用开发经验不断的增加和丰富,有一天你发现了一段怪异的代码而百思不得其解:

div.onclick = function(){
setTimeout( function(){document.getElementById(’inputField’).focus();}, 0);
};

既然是0毫秒后执行,那么还用setTimeout干什么, 此刻, 坚定的信念已开始动摇.

直到最后某一天 , 你不小心写了一段糟糕的代码:

setTimeout( function(){ while(true){} } , 100);
setTimeout( function(){ alert(’你好!’); } , 200);
setInterval( callbackFunction , 200);

第一行代码进入了死循环,但不久你就会发现,第二,第三行并不是预料中的事情,alert问候未见出现,callbacKFunction也杳无音讯!

这时你彻底迷惘了,这种情景是难以接受的,因为改变长久以来既定的认知去接受新思想的过程是痛苦的,但情事实摆在眼前,对JavaScript真理的探求并不会因为痛苦而停止,下面让我们来展开JavaScript线程和定时器探索之旅!

拔开云雾见月明

出现上面所有误区的最主要一个原因是:潜意识中认为,JavaScript引擎有多个线程在执行,JavaScript的定时器回调函数是异步执行的.

而事实上的,JavaScript使用了障眼法,在多数时候骗过了我们的眼睛,这里背光得澄清一个事实:

JavaScript引擎是单线程运行的,浏览器无论在什么时候都只且只有一个线程在运行JavaScript程序.

JavaScript引擎用单线程运行也是有意义的,单线程不必理会线程同步这些复杂的问题,问题得到简化.

那么单线程的JavaScript引擎是怎么配合浏览器内核处理这些定时器和响应浏览器事件的呢?
下面结合浏览器内核处理方式简单说明.

浏览器内核实现允许多个线程异步执行,这些线程在内核制控下相互配合以保持同步.假如某一浏览器内核的实现至少有三个常驻线 程:javascript引擎线程,界面渲染线程,浏览器事件触发线程,除些以外,也有一些执行完就终止的线程,如Http请求线程,这些异步线程都会产 生不同的异步事件,下面通过一个图来阐明单线程的JavaScript引擎与另外那些线程是怎样互动通信的.虽然每个浏览器内核实现细节不同,但这其中的 调用原理都是大同小异.


由图可看出,浏览器中的JavaScript引擎是基于事件驱动的,这里的事件可看作是浏览器派给它的各种任务,这些任务可以源自 JavaScript引擎当前执行的代码块,如调用setTimeout添加一个任务,也可来自浏览器内核的其它线程,如界面元素鼠标点击事件,定时触发 器时间到达通知,异步请求状态变更通知等.从代码角度看来任务实体就是各种回调函数,JavaScript引擎一直等待着任务队列中任务的到来.由于单线 程关系,这些任务得进行排队,一个接着一个被引擎处理.

上图t1-t2..tn表示不同的时间点,tn下面对应的小方块代表该时间点的任务,假设现在是t1时刻,引擎运行在t1对应的任务方块代码内,在这个时间点内,我们来描述一下浏览器内核其它线程的状态.

t1时刻:

GUI渲染线程:

该线程负责渲染浏览器界面HTML元素,当界面需要重绘(Repaint)或由于某种操作引发回流(reflow)时,该线程就会执行.本文虽然重 点解释JavaScript定时机制,但这时有必要说说渲染线程,因为该线程与JavaScript引擎线程是互斥的,这容易理解,因为 JavaScript脚本是可操纵DOM元素,在修改这些元素属性同时渲染界面,那么渲染线程前后获得的元素数据就可能不一致了.

在JavaScript引擎运行脚本期间,浏览器渲染线程都是处于挂起状态的,也就是说被”冻结”了.

所以,在脚本中执行对界面进行更新操作,如添加结点,删除结点或改变结点的外观等更新并不会立即体现出来,这些操作将保存在一个队列中,待JavaScript引擎空闲时才有机会渲染出来.

GUI事件触发线程:

JavaScript脚本的执行不影响html元素事件的触发,在t1时间段内,首先是用户点击了一个鼠标键,点击被浏览器事件触发线程捕捉后形成 一个鼠标点击事件,由图可知,对于JavaScript引擎线程来说,这事件是由其它线程异步传到任务队列尾的,由于引擎正在处理t1时的任务,这个鼠标 点击事件正在等待处理.

定时触发线程:

注意这里的浏览器模型定时计数器并不是由JavaScript引擎计数的,因为JavaScript引擎是单线程的,如果处于阻塞线程状态就计不了时,它必须依赖外部来计时并触发定时,所以队列中的定时事件也是异步事件.

由图可知,在这t1的时间段内,继鼠标点击事件触发后,先前已设置的setTimeout定时也到达了,此刻对JavaScript引擎来说,定时触发线程产生了一个异步定时事件并放到任务队列中, 该事件被排到点击事件回调之后,等待处理.
同理, 还是在t1时间段内,接下来某个setInterval定时器也被添加了,由于是间隔定时,在t1段内连续被触发了两次,这两个事件被排到队尾等待处理.

可见,假如时间段t1非常长,远大于setInterval的定时间隔,那么定时触发线程就会源源不断的产生异步定时事件并放到任务队列尾而不管它 们是否已被处理,但一旦t1和最先的定时事件前面的任务已处理完,这些排列中的定时事件就依次不间断的被执行,这是因为,对于JavaScript引擎来 说,在处理队列中的各任务处理方式都是一样的,只是处理的次序不同而已.

t1过后,也就是说当前处理的任务已返回,JavaScript引擎会检查任务队列,发现当前队列非空,就取出t2下面对应的任务执行,其它时间依此类推,由此看来:

如果队列非空,引擎就从队列头取出一个任务,直到该任务处理完,即返回后引擎接着运行下一个任务,在任务没返回前队列中的其它任务是没法被执行的.

相信您现在已经很清楚JavaScript是否可多线程,也了解理解JavaScript定时器运行机制了,下面我们来对一些案例进行分析:

案例1:setTimeout与setInterval

setTimeout(function(){
   /* 代码块... */
   setTimeout(arguments.callee, 10);
}, 10);

setInterval(function(){
   /*代码块... */
 }, 10);

这两段代码看一起效果一样,其实非也,第一段中回调函数内的setTimeout是JavaScript引擎执行后再设置新的setTimeout 定时, 假定上一个回调处理完到下一个回调开始处理为一个时间间隔,理论两个setTimeout回调执行时间间隔>=10ms .第二段自setInterval设置定时后,定时触发线程就会源源不断的每隔十毫秒产生异步定时事件并放到任务队列尾,理论上两个setInterval 回调执行时间间隔<=10.

案例2:ajax异步请求是否真的异步?

很多同学朋友搞不清楚,既然说JavaScript是单线程运行的,那么XMLHttpRequest在连接后是否真的异步?
其实请求确实是异步的,不过这请求是由浏览器新开一个线程请求(参见上图),当请求的状态变更时,如果先前已设置回调,这异步线程就产生状态变更事件放到 JavaScript引擎的处理队列中等待处理,当任务被处理时,JavaScript引擎始终是单线程运行回调函数,具体点即还是单线程运行 onreadystatechange所设置的函数.

个人补充:

setTimeout或者setInterval的设置的时间参数的具体意思是:在参数指定的时间后将待执行方法放到执行队列中, 如果队列中没有其他方法等待,则回立即执行setTimeout指定的方法,因此有时给人好像是立即执行的假象

没有评论Closure Compiler vs YUICompressor

2010年8月5日
今天在使用Ant打包代码的时候,在压缩时不知道如何选择了,是使用google的Closur Compiler 还是使用 Yahoo的 YUICompressor呢
搜索中发现了淘宝UED lifesinger 分享的PPT 受益匪浅:)
View more presentations from lifesinger.