04月08, 2016

uglify2 的一个bug

今天发现 uglify2 最新版 (2.6.1) 的一个 bug ,大家慎用 hoist_vars 配置。 https://github.com/haozime/uglify2_hoist_vars_bug 上面这个 demo 中,uglify2 在配置了hoist_vars为true的情况下,会把 1 for(var i in input)... 中的i变成全局变量,这个问题很严重,可能会被别的代码干扰而造成错误,已向作者提交 issues ,等待处理。 https://github.com/mishoo/UglifyJS2/issues/913 后记:作者很勤劳,很快fix了,但npm还没有更新。

阅读全文 »

12月31, 2015

写在2015岁末

还有不到一个小时2015就要过完了。 2015年挑战也很多,收获也很多。

家庭

今年元旦很低调地和女友结婚了,简朴到没有办婚礼,我们对这些面子上的事都看得非常轻,不过这辈子发出去的份子钱估计都没机会收回来了。

感谢老婆大人当年的不拒之恩,一直以来对我的鼓励和支持。

父母身体不好,在老家请了个保姆照料生活,这也是自己最大的心病。

工作

今年的技术升了两级,得到了领导和同事的肯定。

在好搜引入了typescript,参加了Anders老爷子的圆桌会,对ts提了一些建议,已被ts1.7采纳。ts与babel有很多的交集,我更看好它的强类型优势,在大型项目迭代时优势明显。

参加技术交流和社区分享,收获颇丰。

将运营五年的“前端那点破事”社区从QQ群转移到微信群,也算随顺因缘变化。微信群的活跃度更高,那更易互动。但聊天记录更难整理,入群控制也更难做。社区的目的是互助交流,新的一年继续以此为宗旨,防止水化。另外,准备自己个人出资或者拉些赞助,奖励进步最快和分享最多的成员。

旅行

今年去了趟云南,内蒙和南京,年初有计划去尼伯尔拜访佛国,由于尼国不幸罹难大地震,行程放弃。

阅读

kindle是给自己买的最好的礼物,一种相见恨晚的感觉。kindle让我很好地利用等车走路的碎片时间阅读。今年用kindle看完了《http权威指南》《图解http》 《web性能权威指南》《时间简史》《火星救援》 已经购买未看完的有《增长黑客》《图解tcp》《科幻世界》

课业

今年报考了工商管理成人大学。后悔当年学渣没好好攒文凭。没有本科文凭申请不了居住证,没有居住证以后子女在北京上学要多交钱。jk大哥今晚也在检讨。

学习与计算机完全不同的知识,让我从另一角度理解世界,非常有意义。

健康

颈椎病和鼠标手越来越严重。身材开始发福,将军肚越来越大。上半年每天在公司健身房,下半年就没去过了。

北京的雾霾并没有实质性的改善,上半年天好靠阅兵,下半年好天靠西北风。

阅读全文 »

11月23, 2015

https简介

引子

随着国内网络环境愈加恶劣,https已经成为不少网站的标配。今年百度和阿里系已经全站https,好搜也完成了全站https兼容。https://www.haosou.com ,还没有强切。本博将花几个篇幅来介绍。

  • https简介
  • https的安装
  • https安全性
  • https的性能优化
  • https中的算法

    阅读全文 »

10月25, 2014

检测页面全局变量脚本

上次说到严格模式也不能完全保证不会意外跑出全局变量,所以最好还有一种更方便的检测方法。

jshint

亡羊补牢,后知后觉

由于不同的流量器宿主全局方法并不一样,但同一个浏览器的不内window实例一定是一样的,所以我们可以构建一个临时的iframe,里面的window对象是干净无污染的,只要拿topwindow和这个iframeWindow中的变量进行对比,就行。如果是用户不小心抛出去的全局变量,一定是可写可读的,不可能是用Object.Object.defineProperty搞出来的只读的常量。于是便有了以下代码: 可将此链接直接拖到收藏夹栏使用检测全局变量

阅读全文 »

07月12, 2014

严格模式下arguments的限制

使用'use strict'可以很简单地开启严格模式 严格模式下有以下特征与普通模式不一样,需要注意

一、不可以隐式声明变量

"use strict";
a = 1; // ReferenceError : a

但是严格模式的检测是在执行期的,所以

//不报错
(function(){
    "use strict";
    return function() {
        a = 1;
    }
})();
// 只发生了函数声明

阅读全文 »

03月27, 2014

本地同时使用git和svn

提到git,很多人可能想到的是github。其实自己一个人本地也可以用git来管理自己的代码。

公司用的代码管理工具是svn。平时在开发中经常会遇到这样的问题:

  1. 要完成a和b两个需求,两个需求都要改c.js。现在要求上线a需求,b需求还不能上线。
  2. 正在开发一个需求,改了好多文件。这时突然线上出现一个紧急bug需求马上改。

svn在这一方面做得很差,咨询过别的同事,出现第一种情况一般是把b需求的代码注释掉。出现第二种情况是将线上代码分支拉下来,改完还要把代码在本地代码库上再改一变。 对于代码的branch和merge用git就太简单了。可以直接在你的本地svn代码文件夹里再开一个git

cd ~/yourCode
git init
vi .gitignore
把.svn文件夹忽略掉

为了防止把.git文件夹传到svn上,我们还要改下svn的忽略目录:

vi .subversion/config
找到global-ignores 所在行,把行首的注释符去掉
在行末加上 .svn (和前面有一个空格)
global-ignores = *.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo .git*

这样两者就不相互干扰了

把svn代码都灌入git仓库:

git add .
git commit -a -m "init"

根据需求新拉一个分支,不建意在master分支下开发

git branch hotfix

切换到hotfix分支

git checkout hotfix

修复代码,修完bug,完成测试。

合并代码到master分支

git checkout master
git merge hotfix

阅读全文 »