GithubHelp home page GithubHelp logo

jayli / jayli.github.com Goto Github PK

View Code? Open in Web Editor NEW
670.0 670.0 98.0 115.11 MB

my repo

Home Page: jayli.github.com

HTML 56.03% Ruby 0.04% Shell 0.10% CSS 2.71% JavaScript 34.85% PHP 0.03% EJS 1.52% Vim Script 4.73%

jayli.github.com's Introduction

Jayli is Here 👋

import { SoftwareDeveloper } from '@jayli';

class Bio extends SoftwareDeveloper {
  name     = 'Jayli';
  title    = 'Front-End Engineer';
  company  = 'Fliggy';
  location = 'Beijing, China';
  website  = 'https://js-perf.cn';
}

class Skills extends SoftwareDeveloper {
  languages  = ['JavaScript', 'VimScript', 'Lua', 'Python'];
  databases  = ['MySQL', 'MongoDB'];
  frameworks = ['React', 'React Native'];
}

jayli.github.com's People

Contributors

cubee avatar jayli avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

jayli.github.com's Issues

Hybrid 里的麻烦事

前天收到了作者@鬼道 的签名书《跨终端的Web》,读了@三七 的推荐序很是感慨。Web 在无线领域的爆发力才刚刚开始,但经过几年的磨砺,当下 Web 技术在新战场里依然水土不服,Web 仍艰难的在无线的跨终端的方向上寻找自己的位子。

达摩克利斯之剑

混合式开发(Hybrid)听上去很美好,但在互联网业务闪电更迭的压力下生存依然艰难。我们听到最多的是:

  1. 这个功能什么时候发布?
  2. 发布了我的手机怎么没看到?
  3. View打开好慢,菊花怎么转这么久?
  4. 紧急线上bug能不能一小时内修复?
  5. 这个新功能可否搞个百分比的灰度?
  6. 这个页面能不能拿到别的App里嵌入?

Hybrid 的目标是将 App 作为容器来承载Web的内容,网页依然是网页,尽管我们在前端框架瘦身、资源加载策略、图片压缩、menifest、localstorage方面穷尽所能的优化,Web 技术的基石所带来的瓶颈是无论如何也无法突破的:

  1. HTTP 协议是应用层协议,而且是短链接,在弱网下耗时严重,是性能瓶颈罪魁祸首!
  2. URL(Web 资源定位标示)在客户端中是极弱的配角,而 Web 对 URL 依赖严重,导致客户端 PageFlow 中页与页之间的传参和调用本质上基于文本、并有大量解析和反解析(外加正确性校验),极大影响性能和可用性。
  3. Web 依赖于强网在线环境,但Hybrid中 H5 资源(HTML、CSS、JS、IMG等)需要缓存至客户端,但需要一套外围机制解决 H5 资源更新的问题,以消化长尾效应,并以尽可能保证弱网和离线的使用体验。

这三个问题不解决,在用户体验优先的大潮下,Hybrid 是活不下来的。Hybrid 就是前端技术的达摩克利斯之剑,会让前端工程师瞬间丢掉饭碗。

Hybrid 中技术选型的麻烦事

要求解,首先要认清 H5(Web)和 Native 的分工

  1. H5 优势:部署灵活,承载内容、引流冲量、方案试错、快速迭代、外部对接、开源
  2. Native 优势:差异化服务、高性能体验、安全沙箱

所以,对于阿里多数业务来讲,核心流程和交易一定是Native来做,所以 H5 即使作为内容载体,也不是所有业务内容都适合用 H5 来做。即使使用H5,也很大程度的依赖工程化的方案。这些工程化方案往往是 Web 技术的弱项。比如静默更新、长尾效应、在线包和离线包的构建脚本、桥 等等。

桥,是我们面临的另外一个麻烦事。

桥的原理简单,但设计很难,因为桥更多是一把钥匙,让 H5 内嵌到特定的 App 中,这就极大的限制了 Web 技术的开放性和兼容性。淘宝的一个 H5 页面拿到微信里不一定能跑起来,因为两者桥协议不一致。这就要把桥协议纳入到规范中,但桥往往是和业务场景强相关的,这时就需要 Native SDK,这样 Web 的优势就更弱了。

如此看来,Hybrid 仅仅是“灾难”的开始,Web 的优势要发挥,必须冠以前提条件,而这些条件是需要前端工程师去一项项拆解的。这会强推 FE 们做跨界的事情,必须关注客户端开发、必须熟悉前后端分离、必须掌握多种编程语言。

小结

我们看到目前 H5 和 Native 的博弈现象,这种冲突实际上是理念冲突,因为 Native vs Web,本质上是编译性语言 vs 解释性语言,强类型语言 vs 弱类型语言,严格校验纠错 vs 松散适配兼容,集中式管理 vs 分散式管理。

从未有一个技术场景如此深入的涉及两种技术价值观的融合,从个体和闭源角度,多数人一定支持前者,但从整体和开源角度,后者则为必选,一旦走向共建和开源,技术选型就显得非常重要,原则上应当首选弱类型语言。比如天猫店铺的开放性就站在 HTML 这个极弱语言(甚至都不算编程语言)的肩上成长起来。因为,本质上讲,只有弱语言和去中心化才能降低共建门槛,而这又给我们提出了新的难题,即规则和规范设计。那么,一款App未来的开放(让第三方为 App 贡献代码,比如航旅无线的店铺),我们的架构思路和重点,应当据此有所倾斜。

---EOF---

Maintainable Javascript中译版 第4章 4.6节(第49页),关于强制类型转换机制术语的翻译

type coercion翻译成强制类型转换机制,个人认为有些不够贴切。
java等静态类型语言里面有强制类型转化机制和自动类型转换机制,分别又称为显示类型转换和隐式类型转换。
语法是这样的,例如:
double d = 1;(隐式)
int i = (double)1.0;(显示)

我看了一下英文版的原文,截图如下:
image
基于JavaScript是一种弱类型的语言,我觉得翻译成“类型强制转换”或许更好一些。

《编写可维护的JavaScript》译序

N.C.Zakas是我最佩服的前端工程师,他是很多人的励志榜样。他那本经典的“红宝书”和“猫头鹰”书,伴随很多前端工程师一起成长。他身上的这种务实的技术风格让人倍感亲切,这本“乌龟书”是他最新的作品,是他在Yahoo工作期间最精华的积累,不仅从技术的普适性角度,还是从人的成长角度,NC.Zakas 不仅从技术层面给予我莫大启发,在从一名独行侠到团队精英的蜕变过程中,也让人看到他勤勉务实的可贵精神,我想正是这种精神,趋势着他在充满变化的前端技术领域保持优势,也正是我们身边的大多数(包括我)所或缺的一种。这本书经过五个月的翻译,中文版已经出版,这里我把译序分享出来,我想,作为前端工程师,这本书是最不应当错过的吧。


译者序

在我的编程生涯中,曾遇到过各种各样的开发者,他们的编程风格天马行空,有时甚至让人哭笑不得。有一种风格被称为“霰弹枪编程”,例如某个方法调用出错 了,我尝试将参数0改为’0′、NaN甚至false,直到试出能“正确”运行的参数为止。当你和这种人组成团队一起编程时,你会发现你的智商变得很低。

比“霰弹枪编程”更温柔一点的编程方式是“撞大运编程”,就是我根本看不懂程序到底在干嘛,但确实能正常运行,这往往是因为这些程序中有很多错误成对 出现,于是就负负得正,看起来就正确了,这种程序实在是“动弹不得”,只能重构。当你和这种人组成团队时,上帝都会同情你。

当然,当渐渐意识到这类随意编程风格带来的危害时,很多人开始思考什么才是“好”的编程风格。不少人开始向高手学习,尽管有时并不知道高手为什么要把 代码写成这个样子。于是越来越多的hack代码出现了,那些看起来晦涩难懂、短小精悍却又暂时行之有效的代码片段越来越流行,尤其是在处理浏览器兼容性问 题时,这种情况更甚。有些人会在这些hack代码片段旁边打上记号,以便以后有问题时能留意到此。这时,问题又出现了,不同人做记号的方法又不一样,我的 天哪!

如果你自诩为一名有能力有良知的程序员,遇到这种“烂”代码时往往将之重构,为了修改几个拼写错误的bug,而修改10个类,并且重构与这10个类有 关联的另外20个类,甚至修改了打包脚本以及部署配置文件。这就是一种有着代码洁癖的人很“青睐”的编程风格—“屠宰式编程”。

霰弹枪式、撞大运式、不求甚解式、屠宰式……

编程是一项复杂的工程,却又如此充满喜感,让人又爱又恨。但有一点确定无疑,即这些风格因为缺少基本的约束,会导致团队协作效率低下,甚至影响产品的 存亡。而对于Web开发领域最为流行却有着先天设计缺陷的语言JavaScript来说,情况更加糟糕。一直以来都缺少宏观的设计模式和微观的编程风格的 指导,从而导致JavaScript编程始终没有权威和统一的指导**和方法论。因此,大部分Web前端团队依然将很大精力放在解决注入代码冲突、命名规 范性、代码复用模式等团队编程最基本的问题上。迟迟走不上创新、高效的快车道。

我们很欣喜地看到,在设计模式领域,《JavaScript设计模式》(JavaScript Design Patterns)和《JavaScript编程模式》(JavaScript Patterns)两本书填补了这方面的空白,而在编程风格领域,这本《编写可维护的JavaScript》(Maintainable JavaScript)真可谓姗姗来迟。

本书正是向开发人员阐述如何在团队开发中编写高可维护的JavaScript代码,涵盖了编码风格、编程技巧、自动化、测试等几方面,不过,同样的原 则也适用于其他任何语言。本书作者是大名鼎鼎的Nicholas C. Zakas。他曾是Yahoo!的首席前端开发工程师,在完成了从一名独行侠到团队精英的蜕变后,他站在前端工程师的角度为我们提炼出许多的最佳编程实 践,其中包括很多来自工业生产的最佳法则。应用这些技巧和技术,可以使你的团队编程从侠义的个人偏好的阴霾走出来,走向真正的高效和高水准。

本书由淘宝北京前端团队翻译,在翻译过程中,我们始终保持一种学习的心态,因为正像前面提到的,作者给出的很多经验正是我们手头工作中不在意却又至关 重要的,这种学习心态也让我们在这次翻译过程收获颇丰。我们尽最大的努力,力求翻译后的表述在还原作者原意的同时又不失中文的流畅。但难免由于译者水平有 限而有所纰漏,还请各位高手多多批评指正。

最后,我要感谢人民邮电出版社信息技术分社的陈冀康老师的信任和鼓励,宁愿让我们多花些时间来保证质量,同时感谢我的同事魏凡哲(陶清)、贺亮(完真)、杨翰文(地极)、王保平(玉伯)参与本书的试读和审校。如果要提交本书的勘误和建议,请在本书的介绍页面留言

2013年1月于北京

前端开发校招(电面)面试题

阿里航旅事业部的面试题,此外重点参照 #16

1. CSS 盒子模型,绝对定位和相对定位

1)清除浮动,什么时候需要清除浮动,清除浮动都有哪些方法

2)如何保持浮层水平垂直居中

3)position 和 display 的取值和各自的意思和用法

4)样式的层级关系,选择器优先级,样式冲突,以及抽离样式模块怎么写,说出思路,有无实践经验

2. JavaScript 基础

1)JavaScript 里有哪些数据类型,解释清楚 null 和 undefined,解释清楚原始数据类型和引用数据类型。比如讲一下 1Number(1) 的区别

2)将一下 prototype 是什么东西,原型链的理解,什么时候用 prototype

3)函数里的this什么含义,什么情况下,怎么用。

3)applycall 什么含义,什么区别?什么时候用。

4)数组和对象有哪些原生方法,列举一下,分别是什么含义,比如链接两个数组用哪个方法,删除数组的质定项。

3. JavaScript 的面向对象

1)JS 模块包装格式都用过哪些,CommonJS、AMD、CMD、KMD。定义一个JS 模块代码,最精简的格式是怎样。

2)JS 怎么实现一个类。怎么实例化这个类。

3)是否了解自定义事件。jQuery里的fire函数是什么意思,什么时候用。

4)说一下了解的js 设计模式,解释一下单例、工厂、观察者。

5)ajax 跨域有哪些方法,jsonp 的原理是什么,如果页面编码和被请求的资源编码不一致如何处理?

4. 开源工具

1)是否了解开源的工具 bower、npm、yeoman、grunt、gulp,有无用过,有无写过,一个 npm 的包里的 package.json 具备的必要的字段都有哪些(名称、版本号,依赖)

2)fiddle、charles 有没有用过,什么时候用

3)会不会用 ps 扣图,png、jpg、gif 这些图片格式解释一下,分别什么时候用。是否了解webp

4)说一下你常用的命令行工具

5)会不会用git,说上来几个命令,说一下git和svn的区别,有没有用git解决过冲突

5. 计算机基础

1)说一下网络五层模型(HTTP协议从应用层到底层都基于哪些协议),HTTP 协议头字段说上来几个,缓存字段是怎么定义的,http和https的区别,在具体使用的时候有什么不一样。是否尽可能详细的掌握HTTP协议。

2)cookies 是干嘛的,服务器和浏览器之间的 cookies 是怎么传的,httponly 的 cookies 和可读写的 cookie 有什么区别,有无长度限制

3)从敲入 URL 到渲染完成的整个过程,包括 DOM 构建的过程,说的约详细越好。

4)是否了解Web注入攻击,说下原理,最常见的两种攻击(XSS 和 CSRF)了解到什么程度。

5)是否了解公钥加密和私钥加密。如何确保表单提交里的密码字段不被泄露。验证码是干嘛的,是为了解决什么安全问题。

6)编码常识:文件编码、URL 编码、Unicode编码 什么含义。一个gbk编码的页面如何正确引用一个utf8的的资源

6. 考察学习能力和方法

1)你每天必须登录的网站(前端技术相关)是什么?

2)前端技术方面看过哪些书,有无笔记,都有哪些收获。

3)收藏了哪些代码片段?

4)怎么理解前端技术的大趋势?自己再做哪方面的知识储备?

5)是否了解或精通其他(后端)的编程语言?

6)做过的项目有没有什么(视觉、交互)美感?什么是美?你觉得让你自己赏心悦目的网站或应用有哪些?

7)做项目有没有遇到哪些印象深刻的技术攻关,具体遇到什么问题,怎么找答案的,最后怎么解的。

爱梦想,去旅行,阿里旅行·去啊 H5 团队招募ing

我是阿里旅行前端 TL 拔赤,这是一封前端工程师招募贴,长时间有效。

Who Are We?

距上次发英雄帖招募将近一年时间了,这一年,“淘宝旅行”变身成了“阿里旅行·去啊”,小伙伴们一起经历了惊心动魄的无线All In,业务激增、人也在蜕变。

What Are We Doing?

这一年,航旅晋升为事业群,有了自己新的品牌,更重要的,随着业务的升级,我们在无线 Web 技术和 Native 之融合领域,也有了大跨步的突破,特别在 H5 离线化H5 弱网秒出 上坚持前行,并有了大量技术产出。

我们打造了自己的项目构建工具 Clam,投入研发 KISSY mini 的后续版本,持续参与去啊 H5 容器研发,全方位打造一款(性能)极致、(迭代)快速的“去啊 Hybrid” 体系。我也很有幸在今年北京 QCon 大会上分享了这一年来我们的技术成果

在 2015 新的一年里,阿里旅行·去啊将继续秉承无线优先的原则,打造更加极致的 Hybrid 和我们的 App。随着业务增长,我们需要大量前端开发高手的加入,和我们并肩战斗,继续在 H5 的开源、多端兼容、性能、数据、安全 等领域攻坚克难,我们的作战图需要你的脑爆,我们非常渴望你的加入。

你可以在去啊 App、手淘 App、钱包 App、手淘 Pad 和大量外部容器中见到我们的作品,我们的阵地正在延伸到更多更多的端...


我们需要你的加入!

如果你是一名前端开发高手,希望寻找无线领域极致体验的技术突破,如果你碰巧也很喜欢旅行,那么阿里旅行·去啊 可能就是你的下一站,我们需要你的加入。(base 北京)

想更多了解这个团队,直接联系我,关注我的微信,或直接给我发邮件:[email protected]

这是一个专业团结、年轻向上的团队,Waiting for you!~

以上!~

前端技术的开放和封闭

Unix 哲学”的根本原则:“简单原则”——尽量用简单的方法解决问题。

阿里系的 KISSY 框架的取名就源自 Unix 哲学中的这一条,Keep it Simple & Stupid。这也是我们在 PC 和无线时代不断提炼前端开发框架、研发模式、共享代码和开源社区建设的基本理念,即将规范做轻、研发环境做实、抽离代码、贡献代码的体验打磨到最佳。这种对一致性、规范性、简单性的美学追求,一直影响所有前端开发同学至今,也让前端的开源世界充满活力。

我们(阿里航旅前端团队)也在前端研发模式上有了一定沉淀,但随着业务和开源社区的平行发展,我越发感觉到自己和开源社区之间的壁垒越来越重。以至于影响到团队成员的(技术)意识形态,我们必须做出选择,追求拥抱开源,还是更加务实封闭。

1. 航旅的前端研发模式

架构图大图

  1. 底层是项目源码仓库,项目代码携带开发环境,项目目录结构固定,开发环境通过 tnpm (阿里内部私有 NPM 仓库)一键安装
  2. 源码(src)需要被构建到可发布代码(dist),构建过程包括模板解析、TMS (阿里内部的运营数据管理系统)数据异步化(生产环境只支持静态 HTML)、HTML 合并和压缩,JS 和 CSS 的合并和压缩
  3. 项目仓库中所需的组件是通过 bower 安装进来的,组件代码存放在内部的 gitlab 仓库上
  4. 最后的打包发布也是通过 Node 工具完成的,这些工具都是一键安装的
  5. 项目和组件的初始模板通过基于 Yeoman 的生成器来生成,基本上也是一键生成的
  6. JavaScript 模块规范遵循 KISSY 模块规范(KMD)

整个研发模式基于以上六个要点搭建,看上去也很完整,能够很好的支撑研发模式所有环节,而且对面向多端容器的适配也一并在 Node 工具层面完成,保持源码(src)的“轻便”。

2. Why Bower?

KISSY 组件库提供了组件研发的体系,为什么不直接依赖这个体系建设航旅的组件库?原因有二:

  1. 这些组件只能在线使用,不能离线(或者说离线成本很高)
  2. 线上组件出了问题,bugfix 升级成本很高(因为你要 at 组件作者去修复)

而在业务高速增长的阿里内,稳定的组件可能仅限于一些不痛不痒的轮播日历之类。大量组件配合业务的迭代需要不断升级,在缺少 UI 测试用例的前提下,集中式管理组件代码极大拖慢了整个节奏,干脆把组件 fork 到我项目里吧。bower 作为对格式无约定的包管理器,非常适合安装、升级外部模块。

3. 问题出在哪里?

刚刚我用“轻便”来描述我们的项目源码环境,实际上每个项目迭代几个版本之后,就再也不轻便了。源码(src)开始有冗余,特别是 bower 安装进来的组件代码也因频繁升级导致版本交错愈加剧烈,组件被 fork 出来之后基本上就单独衍生版本了,再也难合并到主干去。一方面有研发任务的压力,另一方面,绝大多数组件的构成原本就不干净,要么文档不全要么注释稀少、再要不连 Demo 也没有,merge Request 难度很高。

这就是我们实实在在发生的事情,一个团队中,到头来始终只有几个编程高手在抽组件、维护核心的公用代码,大部分人大都只会 fork。这就背离了我们的初衷,代码流动性越来越差。这也是 KISSY 开始走向没落的大背景,组件库一直缺少血液供给,社区再难像两年前搞组件大赛那样火爆。团队小圈子开始一个个的形成,轮子越来越多。

进一步讲,阿里业务的发展实在太快,无线化对研发模式带来极大的冲击,从天猫、支付宝、淘宝等前端团队变化来看,从作为支撑角色的前端,会逐渐强耦合业务,就又加剧了前端技术的多元化和去中心化的大趋势。所以我们经常开玩笑,百度的前端业务得多简单,一个 FIS 就可以支撑百度绝大多数前端业务了。

所以,问题很明显:

  1. 业务之间壁垒加剧,阻碍优秀代码的传播
  2. PC 时代大教堂模式的前端生态建设,在无线端早已水土不服
  3. 阿里成了围城,大量业务强相关的私有技术崛起,和开源社区渐行渐远

4. 那么,航旅解了这个问题了吗?

当然没有。好在我们在最初开始争论的时候就选择了站队,目前形成了自有的技术体系:

  1. Bower:组件代码管理器
  2. Yeoman:项目脚手架
  3. Grunt:构建管理
  4. Clam:开发环境工具集合(内网访问)
  5. KMD:JavaScript 模块规范
  6. Sass:Css 语言扩展
  7. Juicer:HTML 模板引擎
  8. KISSY mini:JavaScript 基础库

于此同时,天猫(@三七)和我们(的 PC 产品)在坚守 KISSY 1.4 体系(MUI),淘宝原核心业务(@圆心)开始 KISSY 5 的探索,同时面向无线产品开始研发一个将 Zepto 私有化的项目 Kimi(内网访问)。支付宝(@玉伯)坚持走 Seajs 生态路线。而无线淘宝(@寒泉)则选择“不站队”。

这么多体系,脑袋要炸了。

本质上讲,业务的高速发展加剧了这种“失控”,很多方案有着现实意义。比如 KISSY Mini 很好的承接了航旅的 PC 业务转无线。而 KISSY 1.4 在目前全站 PC 业务中支撑良好。Kimi 则在最快时间内提供了低学习成本的一个无线方案。因此,从业务支撑方面讲,这些技术方案都是“成功”的。尽管这些分支各自活的很好,但在前端开源世界蓬勃发展的今天,私有技术和开源社区之间渐行渐远,不免让人感觉有些失落。

KISSY 看上去不再 KISS,Sigh~

KISS 的 Unix 哲学理念在充满创新和变化的业务面前,应当如何自处并渗透自有的优雅美感呢?

5. WebPack & Browserify

今天跟@勾股 兄长聊,有点小感慨,也很认同@勾股 的两个技术观点:

  1. 企业内开源无法持久,只有参与到开源社区中才能真正吮吸到技术创新的新鲜空气
  2. 用成熟的开源技术来搭建私有技术,帮助业务私有技术体系走完最后一公里

保持开放的心态拥抱开源,用务实的精神快速“拿来落地”。在模块规范和代码生态建设上,最适合拿来的就是 WebPackBrowserify。这也是@寒泉 的无线淘宝团队打算要做的事情,有信仰总归是更可爱一些的吧。

6. 完全被小瞧了的前端技术

好吧,我个人表示 WebPack 和 Browserify 难堪大用。

以 Browserify 为例,来对比下理想和现实的差距,Browserify 的优势:

  1. 用 npm 的大量开源资源
  2. 收敛的代码仓库(共有仓库 npm)
  3. CommonJS 规范 + Npm Package 规范

Cool!~

Browserify 的不足:

  1. 工程项目里的前端页面必须对 Seed(KISSY Seed 或者 jQuery) 有依赖,这种依赖不能在构建的时候复制多份(特别是在 H5 离线包 中,为了控制离线包体积,必须要去重),npm 中的模块物理上都是复制存储的
  2. CSS 样式的载入时机太慢(为了做到离线页面秒出 UI。样式必须比 JS 提前载入,在 DOM 构建时就生效),CSS 问题在 WebPack 和 Browserify 中无解决方案
  3. 项目代码下辖的模块代码存储过于分散,代码分三个部分
    1. 项目本身的代码,就在 gitlab 项目仓库中
    2. npm 安装进来的代码,在项目的 node_modules 目录中
    3. 项目组件代码,通过 bower 安装进来,存放在另外的 gitlab 仓库中
  4. 前端组件真真不同于 Npm 包,需要在此上构建一个前端 widget 包规范的超集,需要考虑这几个问题
    1. 为了便于 widget 代码携带 Demo,需要一个本地环境,将源码(src)构建出目标代码(dist)以便运行起来,所以包内必须携带 grunt 或者 gulp 之类的构建脚本
    2. widget 所携带的样式引用,依然缺少优雅的方案提
    3. 业务私有的 widget 代码事实上都在 gitlab 里,需要通过 bower 来安装,概念上就一定程度混淆 npm 安装和 bowser 安装,于是难对组件进行干净的归类,比如我要修复一个 npm 组件的 bug,修复之后应当 fork 在 gitlab 里用 bower 管理起来还是重新提交给 npm?
    4. 如果想收敛组件仓库,则 gitlab 里开发的公用代码必须发布到 npm 上,多此一举,不然,怎么收敛仓库?
  5. 物理代码不收敛
    1. 物理代码分散:npm 安装的代码放在项目的 node_modules 中,这个目录一般都在.gitignore 里,不会提交到gitlab上
    2. 配置信息分散:代码依赖需要在两个地方定义,package.json 和 源码中(应用包时往往需要 require 一下),模块依赖关系定义没法干净的在一个地方指定,实在不爽。

如此看来,Npm 天生不适合存放前端模块,一个前端代码包含的技术碎片过于分散,以至于几乎不可能用一种优雅的方式解决。举个例子,前端是强依赖 Loader 规范的,而由于场景不同,Loader 可以像 YUI Loader一样复杂,也可以像requirejs一样简单。而作为组件代码则必须明确“知道”依赖其中哪一种 Loader。Loader 作为前端模块载入的基础装置,是需要预载入 HTML 中的。所以,这个“知道”就是一种依赖。一旦有依赖,就很难将解耦拆的干净。所谓“约定”,不过是强行隐藏一些存在的配置项,很早之前就有过类似的讨论

So,Unix 哲学在前端技术领域里的影响总是有限的,受浏览器运行机理的限制,前端项目研发复杂度是固定的,你只能封装其中的一部分,总有一些复杂度你无法封装,所以前端项目研发环境一定是为业务场景高度定制的,未来前端技术的私有化和壁垒天然会加剧。就如同开源和闭源一直争论不休一样。

但这丝毫不妨碍我们拥抱开源,包括 bootstrap 在内的大量私有项目被开源出来,我们也可以享受前端技术高度“去中心化”和“碎片化”带来的红利。把社区中现有成熟的工具利用好,并严格律己的遵循开源协议,前端的开源也一定呈现多元共生的局面。这些所有成果,都极为有利于我们完成手头工作的“最后一公里”。

7. 前端技术未来

让人欣慰的是,ES6 让人看到了希望。

至少我们不用再为 JavaScript 本身的 OO 去打各种补丁了。作为企业专职的前端工匠,面对现有技术选型时,也应当遵照标准的 ES6 规范去制定长远规划。Kissy Mini 接下来的版本中会更加拥抱 ES6。

另一方面,在无线领域,H5 和 Native 的耦合会越来越重,前端代码的研发模式会一定程度和客户端开发整合,这也是我们航旅团队接下来将要突破的重点。前端技术边界向 Native 很多特性延伸,制定 H5 容器标准,目标是让 Hybrid 挑战 Native 的原生体验,PPK 似乎还在下意识的将两者对立,大量的事实已经证明,混合式研发会在未来无线战场中挑大梁。特别是 ReactNative 开始大量运用后,我们所掌握的已知的前端工程化管理的方法都将被打散重构,前端技术从真的变得此不再孤立。

可以断定,前端技术学习门槛和身价会越来越高,会切页面已经不足以打动面试官了,FE 们开始消耗大量的计算机课上的那些基础知识,计算机网络、数据结构、数据库、C 语言、编译原理、信息安全这些基础课变得越来越重要,对知识面广度的要求远超从前。

而在开源社区和闭源的私有技术中,这种开放与封闭的博弈会一直持续,着眼开源,立足闭源,保持开放、坚持务实,是我们应当具备的做事原则。

至于那个在前端技术里一直水土不服的 [KISS 哲学]([Unix 哲学]%28http://www.faqs.org/docs/artu/ch01s06.html%29”),别担心,让他一直水土不服下去好了。

爱梦想、去旅行,淘宝旅行无线H5团队招募ing

爱梦想、去旅行,淘宝旅行无线H5团队招募ing

1. 我们是谁?

航旅事业部H5团队,一群年轻、执着、爱旅行的小伙子(和小美女)们,站在无线 All In 战场最前线,用微不足道的力量推动淘宝旅行无线 Web 的技术和业务的革新。

2. 我们在做什么?

我们执着的保持对技术美学追求,你将会和我们一同体验 Web 技术的跨终端服务化、Hybrid化 和 强弱网无差别化:

  1. 我们正在推动淘宝旅行无线(H5)产品的服务化和插件化,特别旅行类目商品工具化和个性化的玩法,为我们带来不一样的想象空间。
  2. 我们正有机会推动集团Bu多端 Hybrid 混合式编程的落地,航旅H5将在钱包App容器、航旅App容器和手淘App容器中具备更强的生存能力。
  3. 我们正在挑战2G、3G弱网下Web体验的忍耐极限。

3. 我们需要...

我们需要 Web 前端工程师,只要你足够优秀,只要愿意寻求自己在Web技术上的质的突破,满足这两条,那就加入我们吧:

  1. 计算机和编程功底扎实,吃透浏览器渲染、Web编程模式、Web性能优化
  2. 对无线技术情有独钟,思维开阔、合理试错、摆脱教科书式的思维定势和所谓规范教条

4. 我们的理想

我们的理念:爱梦想、去旅行

旅行者,追求内心的宁静、真正美的体验、文艺范的气质,如果这些是你内心深处的追求,那么,你真的应该考虑加入我们,我们需要你!!!

5. 我们的作品

在淘宝旅行App、手淘App、钱包App、手淘Pad 等等都可以看到我们的作品,我们的阵地正在延伸到更多的端

6. 那么

大家都在秀妹子,我们自然少不了,Then,What Say You?

联系我:拔赤,[email protected]

tensorflow 引用 node 版本的错误解决办法

tensorflow 引用 node 版本的错误

node-pre-gyp info This Node instance does not support builds for N-API version 4
node-pre-gyp info This Node instance does not support builds for N-API version 5
node-pre-gyp info This Node instance does not support builds for N-API version 6
node-pre-gyp info This Node instance does not support builds for N-API version 4
node-pre-gyp info This Node instance does not support builds for N-API version 5
node-pre-gyp info This Node instance does not support builds for N-API version 6
/Users/bachi/gitlab/ding-server/node_modules/_@[email protected]@@tensorflow/tfjs-node/dist/index.js:49
throw new Error("The Node.js native addon module (tfjs_binding.node) can not " +
^

Error: The Node.js native addon module (tfjs_binding.node) can not be found at path: /Users/bachi/gitlab/ding-server/node_modules/@[email protected]@@tensorflow/tfjs-node/lib/napi-v3/tfjs_binding.node.
Please run command 'npm rebuild @tensorflow/tfjs-node build-addon-from-source' to rebuild the native addon module.
If you have problem with building the addon module, please check https://github.com/tensorflow/tfjs/blob/master/tfjs-node/WINDOWS_TROUBLESHOOTING.md or file an issue.
at Object. (/Users/bachi/gitlab/ding-server/node_modules/
@[email protected]@@tensorflow/tfjs-node/dist/index.js:49:11)
at Module._compile (internal/modules/cjs/loader.js:701:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)
at Module.load (internal/modules/cjs/loader.js:600:32)
at tryModuleLoad (internal/modules/cjs/loader.js:539:12)
at Function.Module._load (internal/modules/cjs/loader.js:531:3)
at Module.require (internal/modules/cjs/loader.js:637:17)
at require (internal/modules/cjs/helpers.js:22:18)
at Object. (/Users/bachi/gitlab/ding-server/brain/brain.js:5:1)
at Module._compile (internal/modules/cjs/loader.js:701:30)

解决办法,

进入问题目录 cd /Users/bachi/gitlab/ding-server/node_modules/_@[email protected]@@tensorflow/tfjs-node/lib

这里只有 /napi-v5,复制一个目录到 /napi-v3 即可

微不足道的坚持

原文发在WTP


在你最擅长的专业领域内,可曾有过一件让你骄傲,持续坚持下来的事情?每当别人谈论它时,你总是偷偷窃喜?

我曾经这样勉励我的弟兄们,在满负荷的工作压力面前,总要找到一件有意义、自己感兴趣且擅长的事情,坚持做,是一种解压,更是为了让自己的专业所长,找到有意义的落脚点。分享三件事情,大家共勉

第一件事:

两前年,流火曾经找我聊想搭建一个行业内前端社区,他有清爽的界面,有优雅的交互体验,我当时并不看好,担心接下来的工作压力会让人抗不住,两年过去了,在百度搜索f2e可以在显要位置看到这个极简的域名"f2e.im"。社区雏形完整,代码完全开源,我也很幸运成为F2E社区第三号成员

我当然听到过太多质疑的声音,诸如"这东东和某东东很类似?",或者"这里菜鸟太多了,没有我想要的高手?"云云。

Whatever!~

评论终将归于浮云,留下的是两年的坚持,以及它换来的微不足道的满足感!同样,当流火在解决了成百上千个无关紧要又繁琐冗碎的bugfix时,换来了对python的精通,对代码版本迭代的专业性把握,对网络协议和内容渲染模式的深刻理解,收获了直面一线用户的宝贵经验,更重要的是,懂得坚持的意义。这些硬技能直接促成了今天流火在业务上的钻研与精通。

第二件事:

前年年底,我们团队发起了针对校招同学的"魔鬼训练营",宗旨是艰苦一年,主动成长,我们无条件的侵占了大家的加班、午餐、晚餐、甚至周末时间。工作的紧张压力下,还要准备给大家反讲,质量良心保证,精力严重透支,要不是靠着年轻的身子板,扛下来简直是个奇迹。

迟伤、影逸、夕剑 全程坚持了下来。

当年反讲的JavaScript设计模式、熟读W3C标准、NodeJS、Git、字符编码、HTTP协议这些基础知识,让充电加速。现在当面对业务压力和未知bug时,他们显然更勇于去透过表面看本质。并在 WebRocket(@影逸)、机票YUI体系的KISSY化(@迟伤)等项目中淋漓紧致的体现出自身专业水平。毕业一年,无压力的开始挑大梁了。

回想起来,魔鬼训练营中辛苦的坚持,是如此微不足道。

第三件事:

两年前,我作为PM落地了一件看似不可能完成的任务,JavaScript权威指南(第六版)的翻译。认领这个任务的初衷仅仅是想挑战下自己的能力极限,看清楚自己几斤几两,没想到一做就是一年。

这段时间在工作和业余时间谨慎的保持平衡,压力面前各种放弃的冲动仍历历在目,但仍抵不过这本书上市之时的那股满足感。

过程中听到太多质疑的声音,WhatEver,你所掌握关于JavaScript的一切,始终是我的子集。纯技能上的收获更是大大的丰厚。

结语

任何一件事情,有多大投入,就有多大收获。当你还是局内人时,不清楚傻傻的坚持的意义,这时内心的纠结最容易让人动摇和放弃。但事成之日,才会真正拨云见月,一树百获。这时,压力是浮云,纠结是浮云,抱怨是浮云,斤斤计较更是浮云。“坚持到胜利”,是如此言轻,又是如此言重。

在你最擅长的领域内,可曾有过让你骄傲,持续坚持下来的事情?每当别人谈论它时,你总是偷偷窃喜?那么。。。

---EOF---

蒙台梭利的三段话

最近在看蒙台梭利婴儿早教手册,好多观点在我们组织开发和带队过程中竟惊人的适用。人的成长自有轨迹,这个过程漫长而脆弱,极易被破坏。这个现象同时适用于小孩子和大人。小孩子心智的自我内建和大人在职业技能上的积累过程也极为类似,摘三段蒙台梭利的原话,我们一起体会一下。

第一段话

我们注意到,所有孩子都有极力向外扩展的个性,他有主动性,他选择自己要做的事情并坚持做下去,并根据自己内在需要来改变它。他不逃避做任何努力,相反,努力探索让他们满怀喜悦的凭借自己能力克服困难。

婴儿在呀呀学步时就有着难以置信的优秀品质,这种品质甚至是很多成年人的终极追求,殊不知每个人自始就具备,只不过在漫长的成长过程中,这种品质的内建被不断打断,没有被悉心培养,以至于这种自驱动的习惯始终难以形成。

忘掉琐事,排除杂念,阅读内心,会发现这种精神胚胎一直没有熄灭。尝试点燃它吧。

第二段话

我们将几岁大的幼儿定义为“软蜡”,意思是这时期的孩子可以加以适当的塑造,教育学家软蜡的观点没错,错就错在他们认为孩子必须由他来塑造,与此相反,孩子必须塑造他自己。因为孩子是非常能够自动自发的。而大人经常盲目的、不恰当的将孩子在自己软蜡上画出的轮廓破坏掉。

我前几年在带团队过程中就犯过这种错误,人的成长不能靠培训和“教”,而是要提供环境、指导、机会,这些才是人自我塑造和提升的土壤。

另一方面,人在做事过程中,多大程度排除干扰,直接影响自我塑造的质量。对于一线工程师来说,这是极其困难和极具挑战的,巧妙的设计自己的琐事漏斗,让琐事绕行,专注于重要事情,排除干扰,小心的推动自我提升。

第三段话

我的方法论有两个要点:工作的组织和自由。工作组织合理能让孩子自我发展,散发能量,让孩子获得有益、从容的满足。就是在这种条件下,自由引导孩子不断完善自身行为和获得很强的纪律性,这种杰出的纪律性本身就是孩子自我培养出的一种镇定从容的品质。

自律是内心深处对守序的追求,在自律下最大限度的自由发挥,能散发出难以置信的能量。和自律的人合作真的是体验极爽极开心的事。自律的表象看似是按部就班,但内心深处有强大的动力。工对IT程师来讲,这种动力可以理解为对事务、代码、技术强烈的掌控欲。从这个角度看,这显然是推动人不断进步的动力源泉。

---EOF---

航旅无线前端团队必备技能

程度 表示
了解
熟悉 ★★
掌握 ★★★
精通 ★★★★
融会贯通 ★★★★★

入门掌握

知识点 掌握程度 备注
前端安全 了解XSS和CSRF
Chrome插件开发 了解即可
Yeoman 脚手架作者需要非常精通
Bower ★★ 搞懂原理,熟练基于 Bower 架设自己和团队的代码仓库,通常和Yeoman配合使用
编码知识 ★★ gb系、UTF系、Unicode、URL编码、Base64 等常见编码要非常熟悉,并能熟练互转
Jquery/Zepto ★★ 入门只需熟悉,对资深工程师必须要求通读它们或其他开源类库的代码
项目管理 ★★★ 组织、发起、跟进、汇报一个项目的全周期的能力,包括多任务并行、和突发情况处理,具备高效和高质量记录、备份、确认和项目交接能力
软件工程、前端架构 ★★★ 必须对团队协作和跨部门协作、前端架构方面常见的问题具备很高的辨识度
NodeJS ★★★ Web 工程化必备技能
PS ★★★ 掌握PS常见用法
CSS 2.x & 3.x ★★★★ 前端工程师必备技能,但很少能达到 CSS 架构师级别,这要求前端对美术、排版、字体、屏显设备 都必须精通
HTTP协议 ★★★★ 必须精通HTTP协议、包括缓存、状态头等
Grunt ★★★★ Web 工程化必备技能
页面渲染过程 ★★★★ 在浏览器中敲入URL到完整渲染出来,经历的过程
组件开发 ★★★★ 具备基本的代码抽象能力
ES5 ★★★★ 移动Web开发同学必须非常熟悉,将大大简化JS冗余代码
HTML语义化 ★★★★ 通常看HTML代码结构就能看出一个人是不是真正搞前端的
FireBug / ChromeDeveloperTools ★★★★★ 必备技能
JavaScript 1.6 ★★★★★ 最流行的JavaScript版本,借此搞懂原生JS最基础的东东,前端必备技能
JavaScript 设计模式 ★★★★★ 包括Attr、CustomEvent、Base等标准面向对象编程模型,必须达到融汇贯通
Git ★★★★★ 不解释了

航旅无线Web团队必备

知识点 掌握程度 备注
Linux命令 全 MacBookPro,命令行操作必然要了解
PHP ★★ 写TMS必须要会PHP
NPM ★★ 熟悉使用和开发、并提交NPM包
Android/IOS客户端开发 ★★ 对Java或OC很熟练,IDE 工具使用熟练
Hybrid混合式开发 ★★★ 对Hybrid不能停留在HelloWorld的层次,必须有自己独到的见解和明晰的观点
KISSY 1.x / 5.x ★★★ 搞懂 KISSY Loader 加载机制和模块化开发方法
前端项目的工程化和模块化 ★★★ 必备的团队开发基本知识,包括抽象代码、共享代码的设计和实现
文档能力 ★★★ 邮件、文档沉淀和总结能力
FlexCombo ★★★ 本地开发环境服务的核心模块,搞懂他的作用和原理,以及各种配置方法
HTML5/CSS3 ★★★★ HTML5新特性在各种浏览器中的兼容情况,和CSS3的兼容性以及性能
Juicer ★★★★ 航旅前端团队采用的模板引擎
Web性能优化 ★★★★ 弱网下性能优化是必备技能
淘系工具 ★★★★ AWP、AWPP、TMS、云梯、Aplus、SPM、各种埋点和数据采集
KMD/KMC ★★★★★ KISSY 模块格式、写法、对团队开发的支撑、和Loader的配合、KMC的常见配置,必须要非常精通
KISSY 组件开发 ★★★★★ 必须具备抽象代码能力,并封装为KISSY组件,这里包括对Base的继承,API设计理念、代码可扩展性和可继承性等,理论实战都要很强
KISSY MINI ★★★★★ 搞懂KISSY MINI的架构和熟练使用所有API

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.