D2 2014

不知道前几届D2状况如何,这届给我的感觉,其实都是演讲嘉宾在介绍自己公司的开发模式开发结构和开发架构。很多其实大同小异,印象深刻的仅两位:腾讯云的林楠以及蘑菇街的贝勒。
前者分享的内容是node.js。但是讲的基本是服务器。比如他说的密集型运算交给C++扩展;PHP的单进程模式的弊端;数据库读写分离的slave和master,万一哪一部分服务器挂了,从slave中抽调一台出来作为master;保留nginx,而不单纯使用node的server,毕竟nginx这方面做的比node好;代码发布时老进程等完成处理后再关闭;加服务器时的memcached分布式hash取模算法的优化等等。
也就像他所说的,之所以用node.js,是为了能站在这里给大家分享。哈哈,还挺萌的。尽管目前来看,于前端来说其层面太过高端,而且貌似这里面大部分内容应该是运维的工作。但是毫无疑问,学到了。
再来,后者蘑菇街的分享之所以印象深刻,是因为PPT上蘑菇街的团队现在做了的事情,个人感觉,有一些非常类似,而有一些也正是目前公司正在做,以及以后要去做的事情。而且他所说的某些观点,个人也比较支持。在听取分享之后,看了下其官网的js代码,下面来简单陈述下蘑菇街所做的内容以及与之对应的我的一些个人理解和想法:

  1. 使用AMD规范以及require.js
    这方面我也是在最近才了解commonjs,amd规范的requirejs以及cmd规范的seajs。简单来说应该是按需加载需要的代码,而不是没用的代码放到一起,还执行一遍。但是这貌似有一些问题,就是脚本数太多,而且脚本是阻塞的。所以是不是可以找到一种方案,把需要的模块代码合并到一起,合并成一个文件只做一个请求,如果考虑代码不应该分太细,这应该不是关注点,毕竟后续都是走缓存。
    另外查了下关于seajs,好像有人是说在一开始的时候进行了function的toString用正则来找到依赖,如果真是这样,感觉得不偿失,仅仅是为了写到那一段代码不到顶部声明依赖而是自己图方便直接在那段代码的上一行注明依赖,感觉不明智。此处我考虑的点,应该是有些js在特殊情况下,或一些事件触发前再去请求该部分js脚本,然后回调。而在最初始的时候,只载入最最基本的依赖代码。所以,这里考虑两个方案,1是走真正按需加载再加载的路线,2则是压缩成一个文件。
  2. magpie底层封装了一个base.js,然后借鉴backbone抽调了一切代码实现了一个mv*的模式,貌似把c抽离了。
    不知道这里的base.js和Dean Adwards的Base.js是否类似,没有机会问,如果是的话,那其实这部分的类型构建以及继承的实现就是几乎一样了。关于这部分内容,以及MVC的模式,后面会表达下我个人的看法。
  3. 组织架构调整,pc和h5统一接口,类似jquery和zepto。
    两个方面的开发,实现的是同一种功能,但是却是不同的方法名和参数,但是也要做PC H5是否合并抑或分离的考虑。
  4. 关于前后端分离,PHP的view层交给前端来写,而数据则是通过一个lotus的东西来模拟。
    主讲人也说了,前端团队目前仅有25个人,前后端分离也在做,但是还是得看具体的公司和具体的情况。这方面我的一些观点:
    (1)后台是由php开发的,并没有像淘宝/阿里这样的上百人前端团队来组建一个node.js这样的中间层。
    (2)页面渲染全交给前端js渲染有几个问题:首屏加载时间;页面结构复杂,页面中的DOM更新频繁。
    (3)一部分php程序员接手一些业务工作,需要修改部分代码,但却找不到修改的地方和方式。
    综合起来说就是,前后端分离要视情况而定。
  5. api文档的编写。
    api可以先组织好所有的情况来把api文档提交给后台,这样到最后开发的过程中,可以大大减少沟通和测试的时间。在会点后台语言的情况下,如果在调试的过程中发现问题,可以直接搜索定位接口,自己查问题。
  6. css预处理器的使用,模块的划分。
    这部分,曾经在移动端使用过,非常方便,而今如果想要在pc端引入,难度很大,等于重写整站的css。
  7. 首页进行了屏宽小于1212px设置中间区域960px以及大屏幕中间区域1200px的设定。

蘑菇街的方案,目前主流的公司应该也都是这么做或是朝着这样的方向做的,应该也仅仅是达到了业界相应的标准。这方面先到此为止,然后表达下我对继承、类继承和MVC的一点小看法。

  1. 前端MVC框架
    晚上的酒会,豆瓣的张克军是这么说的:”个人认为,中间几年,以backbone为例出了很多mvc的框架,其实是走了很多弯路。”当然怎么可能一无是处,但是就目前而言,也以我个人观点,前端MVC框架的使用,大部分是在单页应用的场景。也一直认为,什么场景选择什么方案才是更适用的,而不应该去刻意追求怎样一个模式。就好比杀鸡用了牛刀,切西瓜用了手刀。

  2. 类继承
    较久之前看书时,书上就是这么告诉我的:javascript中时没有类的,只是类型。后来接触到模拟的类式继承,Douglas Crockford的uber踩坑和bugfix,他的观点是:“8年了老头子我从没接触到使用uber方法的场景,以及在函数和原型链的模式中,真的需要uber吗?”
    再后来接触到膜拜得五体投地的Base.js。对类式继承可以说有一些简单理解。以目前来看,真的需要_super() 或者 uber()吗?但是ES6居然出了Class,脸好像被打肿了,哎哟还有点疼呢。不过真的确定所要调用的父类方法里,所有的内容都是当前类的实例所需要的吗?这方面,个人倒是更倾向于模块和组合的模式。

  3. 继承

var help = function (arg) {
    $.extend.apply( $, [this].concat(Array.prototype.slice.call(arg)) );
};
var A = function () {
    help.call(this, arguments);
};
A.prototype = {country : 'China'};
var a = new A({age : 18});
var B = function () {
    help.call(this, arguments);
};
B.prototype = a;
var b = new B({name : 'Xaber'});
// b {name : 'Xaber', age : 18, country : 'China'};
// 嘿嘿嘿!我还没到18岁呢。

正经的说完了,话点家常。
D2 2014其实之前并不了解,偶然间朋友发来一条链接,问我组团不,然后就去了,还意外拿到晚会的入场券,挺开心的。中间遇到在阿里的大学同学,在做Native app与web通信的东西,看到有人在体验他的东西,感觉蛮不错。手拿app晃动,以及对应的手势,浏览器上就有了“两只熊猫打架”的游戏。目前来说尽管受众面还比较小,但是可能就是未来的趋势。以后可能会出现这种情况:拿着手机对着浏览器做打网球的姿势,手上传来震动感,浏览器上的球击出。而不是使用体感游戏机。咦,怎么好像发现了巨大的商机。
然后遇到第一次找前端工作时面试我的人,没想到自己记忆力还不错,就见过一面,还只是10分钟就拜拜了,居然记得挺深刻。另外想起当时面试的情形,兴致冲冲地拿了一个demo 过去,结果他说不一样的(他们那会儿在做日程管理的单页应用),之后又问我,你觉得JQuery哪里比较强大?我回了一句至今还觉得脸红的话:链式操作。可能任何东西,第一次都是比较快比较害羞比较深刻的吧,嘿嘿。
再来就是看到了传说中的大神玉伯,以及豆瓣的张克军。一年左右前看克军的blog,一篇关于清清除浮动的文,到现在我清除浮动用的都是overflow:hidden;撑开容器高度,没想到他去玩产品设计了。
当初看gihub上的tickets下 $('css-truncate-target').length 发现与会人数有1856个,中间陆陆续续抽了都有几百人了,这还不中就有点怪了。下午最后场大抽奖,终于是中了。拿奖时候工作人员催促着:快点。于是随意拿了本python的书,感觉还不错。
最后附上一张昨晚看蘑菇街页面时发现的一句日语注释,哈哈。
牙牙还是芳芳?你真的好可爱~