等宽瀑布流布局的开发实践

Pinterest 当时的成功,在国内掀起了一股瀑布流的潮流,但很多国内的网站仅仅只学会了使用瀑布流的布局方式,却没有看到 Pinterest 成功背后的模式。页面的布局方式仅仅是一个壳,瀑布流的布局方式也最多算是一个漂亮的壳。如果没有实质性的内容,光有壳就只能让用户图个新鲜。就好比帅哥美女仅仅是外表漂亮,而没有内涵和气质一样。

瀑布流展现的内容通常是扁平化、琐碎的东西,首先吸引人的应该是图片,如果瀑布流中文字过多,只会给人很杂乱的感觉,所以瀑布流更适合单纯的图片浏览。

最近公司的项目–360图片的美女秀场,就用到了瀑布流的布局方式,这种纯粹的看美女图片的页面用瀑布流还是挺合适的。

以前并未开发过瀑布流布局的网站,第一个想到的实现方式就是多列浮动,从表面上看这种方式要简单。

传统的定位布局方式

但是,目前主流的瀑布流布局都是采用定位的方式,对每个单元格计算定位值,如下图:

定位方式实现的瀑布流布局
阅读全文 »

2012年度总结

时间过的飞快,眨眼又过了一年,2012 已经成了历史。往年并没有在博客中写年终总结的习惯,今年算是开个头吧。

工作

今年的工作基本上都是一门心思放在 5173 的新旧版首页上。旧版首页的重构和优化,我作为前端开发人员,算是主唱,成果很显著。对于网页的优化,有了更深刻的理解,总结起来基本就是两点。

  • 1. 尽量减少请求数;
  • 2. 尽量减少请求资源体积;

所有的各方面的优化手段都是为了达到上面的两个目地,还有所谓的雅虎网站性能优化34条黄金法则只能作为指导,千万不能生搬硬套,一定要结合页面的实际情况去做优化。

阅读全文 »

模块加载器的进化–并行加载

easy.js的模块加载器的详解(如果你没有阅读过,最好是先去阅读下,这样才能更好的理解这篇博文)中我详细的介绍过有关 easy.js 的加载器的实现。其加载和执行的顺序都要严格依赖队列一个一个的加载和执行,这种加载和执行方式就是串行。此文将介绍模块加载器并行加载的实现。

在讲解并行加载的实现原理之前,首先有必要对 JavaScript 文件的加载的执行有一个初步的了解。

JavaScript 在页面渲染时可能会对 DOM 元素进行修改,并且多个文件之间还会有依赖的关系,因此必须严格按照顺序依次执行,正是由于此种特性就势必对之后的页面资源的加载造成阻塞。但是请注意,这里说到的是按顺序执行

由于 JavaScript 阻塞的特性,也影响到浏览器对 JavaScript 文件的加载,在老版本浏览器中,加载完就执行,执行完再加载,这正是上面说到的串行加载。为了提升性能,在现代浏览器中,如新版本的 Firefox 和 Chrome,将加载改成了并行。并行加载允许一次性同时加载多个文件,在 HTTP1.1 中,多个文件并行加载只需要发起一个 TCP 连接数。试想下,一条流水线依次生产十个产品肯定要比十条流水线同时生产一个产品要慢得多。虽然在现代浏览器中可以实现并行加载 JavaScript,但是其执行顺序还是要按照顺序来执行的。

之前的 easy.js 的模块加载器的确是按照老版本浏览器串行加载和执行的思路来实现的,而最新版的模块加载器就是按照现代浏览器的并行加载,串行执行的思路来实现的。

阅读全文 »

使用Promise模式来简化JavaScript的异步回调

网页的交互越来越复杂,JavaScript 的异步操作也随之越来越多。如常见的 ajax 请求,需要在请求完成时响应操作,请求通常是异步的,请求的过程中用户还能进行其他的操作,不会对页面进行阻塞,这种异步的交互效果对用户来说是挺有友好的。但是对于开发者来说,要大量处理这种操作,就很不友好了。异步请求完成的操作必须预先定义在回调函数中,等到请求完成就必须调用这个函数。这种非线性的异步编程方式会让开发者很不适应,同时也带来了诸多的不便,增加了代码的耦合度和复杂性,代码的组织上也会很不优雅,大大降低了代码的可维护性。情况再复杂点,如果一个操作要等到多个异步 ajax 请求的完成才能进行,就会出现回调函数嵌套的情况,如果需要嵌套好几层,那你就只能自求多福了。

阅读全文 »

easy.js的模块加载器的详解

模块加载器的实现方法应该比较多,主要还是看哪种实现起来更简单,更易扩展。对于遵循不同规范的模块加载器,实现原理又千差万别。不管是用哪种实现方法,最终都是要满足模块加载器的那些最基本的功能。那么模块加载器的最基本的功能基本就可以概括成下面这几点。

  • 定义模块
  • 处理依赖
  • 加载模块

定义模块

define( "hello", function(){
 return "hello world";
});
阅读全文 »