D2前端
使用node构建海量页面渲染服务手机天猫的所有页面都是,大约在3年前天猫的大量页面是基于php渲染的,数据模板打包后推送到CDN,每次请求都渲染页面。用户请求CDN上的资源。但是这样的方式存在以下的弊端: 大量文件在网络情况不一的CDN节点上同步非常困难 每次请求渲染导致大量的机器资源浪费 php太灵活,多业务共享难以升级,性能低 node.js具有以下的优势: js模板可以前后端共享 轻量级、高性能 2014年的天猫双十一从php迁移到了node koajs中的基于装饰器的中间件 123456789function* responseTime(next){ // 所有后续中间件之前执行 const start = Date.now() yield next; // 所有后续中间件之后执行 const used = Date.now() - start // 将响应时间设置到http header this.set('X-Response-Time',`${used} ms`) ...
sass与compass实战
Sass,Compass与CSS3者的关系 曾经有一位古人说过:“如果你有一把锤子,那么所有的东西都会看起来像钉子。”;还有一位今人说过:“如果你有一颗钉子,那么你就会满大街找锤子。”。无论锤子亦或是钉子都是工具,而Compass和SASS恰恰扮演的就是锤子和钉子的角色,CSS则对应使用锤子和钉子最后完成的作品。——慕课网讲师·刘炬光 人们走进喧闹中去,是为了忘记孤寂。 人生不止眼前的苟且,还有诗和远方。——高晓松 compass初窥安装好sass和compass后创建compass项目compass create compass-in-action(更多命令可以使用compass --help查看) 接下来我们在项目根目录下可以使用compass watch命令监听sass文件的变化 compass核心模块概述我们只要执行了@import...
swift 学习
如果学习的硬件和软件资源已经具备,那么接下来的事情就是保持一颗永远向上的心,如果学习累了,遇到困难了,遇到挫折了,那么就想想那些精美的、绝妙的app,想想这些app将来也会出自你的手中,相信每一位同学都可以成为IOS开发大师的。 ————慕课网讲师·刘宇波 学习swift最简单的方法是使用Xcode的playground。 基本类型常量和变量常量letswift特意将常量的优先级提高到和变量相同实际上是在鼓励我们使用常量,思考程序什么时候使用常量。这样程序可以进行更好的优化。 变量var12var a = 2,b = 3,c = "hello swift",d = 3.2// a = "abc" cannot assign a value of type 'String' to a value of type...
数学之美
教育的本质不是将篮子填满,而是将灯点亮。 简单性和模块化是软件工程的基石;分布式和容错性是互联网的生命。 —— 蒂姆·博纳斯·李 Virture is like a rich stone,best plain set.(美德如同宝石,在朴素的映衬下最显华丽) —— 培根 爱是一念之差,最幸福的不过是,你曾经的呼唤,而我恰有过应答。 —— 朝小诚《黑白》 技术分为术和道2种。具体的做事方法是术,做事的原理和原则是道。很多具体的技术很快就会从独门绝技到普及,再到落伍,追求术的人一辈子很辛苦,只有掌握了道才能够做到游刃有余。追求“术”的人多半抱有侥幸心理,想走捷径,但真正做好一件事没有捷径,需要一万小时的专业训练和努力,也就是“一万小时定律”。 中国古代的阴阳学说可以看做是二进制的雏形。 数据库索引和布尔代数息息相关。 网络爬虫一般的步骤是“下载-索引-排序”,其中广度优先遍历用得比较多。 完全随机的高斯白噪声是很难消除的。 文字语言 VS...
IOS7中的js binding技术
cocos2Dx中提出了js binding,而IOS 7原生提供了js binding的支持(通过JavaScript Core这个引擎)。所谓的binding就是建立了本地到native的桥梁。如图所示: jsbinding与hibrid app的区别如下图所示:jsbinding通过一个中间层(JSBinding Layer)与native进行通信,而hibrid本质上还是web,运行在webview中。通过webview与native进行通信。 JavaScriptCore的4个核心API JavaScriptCore.h JSContext JSValue JSExport 一行js代码实现逆天效果1[].forEach.call(document.querySelectorAll("*"),function(a){a.style.outline="1px solid...
mac 中的一些常用操作
编辑器方向键12345678910111213文本最开始:fn + ←文本最结尾:fn + →行首:command + ←行尾:command + →PageUp:fn + ↑️️PageDown:fn + ↓️向前删除(backspace):delete向后删除(delete):fn+delete后退 ctrl + -前进 ctrl + shift + - chrome dev tools 中也可以使用 cmd + p 打开文件(和 vscode 一样) 输入表情符号control + command + space 触摸板操作右键菜单两个手指单击触摸板 文件操作选择不连续的多个文件command + 单击 移动文件command + c(复制)command + option + v(粘贴) 显示隐藏文件1$ defaults write com.apple.finder AppleShowAllFiles -bool true 接下来重启 Finder。具体方法是单击屏幕左上角苹果图标,强制退出,在下拉列表中选中 Finder。 窗口操作command +...
Shell 基础 —— 流程控制
条件判断假设/tmp/test.js存在,而/tmp/test.jsx文件不存在,则执行以下命令(注意中括号两端的空格): 123456789101112131415161718192021222324252627282930$ [ -e /tmp/test.js ]$ echo $? # 0,表示上一条命令执行成功,即文件存在$ [ -e /tmp/test.jsx ]$ echo $? # 1,非零值,上一条命令执行失败# 我们可以执行下面的命令从而得到更加语义化的结果$ [ -e /tmp/test.js ] && echo 'exists ' || echo 'not exists'# 判断文件权限$ [ -w /tmp/test.js ] && echo 'can write' || echo 'can not write'文件1 -ef 文件2 # 判断两个文件的Inode是否一致,可理解为判断2个文件是否是同一个文件,用于判断硬链接是很好的方法$...
javascript 语言精粹
数组javascript中并没有真正的数组,数组本质上也是对象 请看下面的例子: 12345var arr = [1,2,3,4,5,6]console.log(arr.length) // 6arr.abc = false // 给数组增加属性console.log(arr) // [1, 2, 3, 4, 5, 6, abc: false]console.log(arr.length) // 6 由运行的结果可以看出给数组添加了一个abc属性,尽管字面上的长度有所增加,但是数组的实际长度并没有改变! 1typeof [] // 'object' 所以为了区分数组和对象我们应该可以采用以下的函数: 1let isArray = value => !!value && typeof value === 'object' && value.constructor ===...
Shell 基础 —— 正则表达式
常用正则123$ grep -n "^$" test.txt # 空白行[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\} # yyyy-mm-dd[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\} # ip 在vi中按Esc键后d G可以清空光标起的所有内容。 字符截取命令cut命令例如我们有用户信息文件/etc/passwd, 12$ useradd user1$ useradd user2 假设我们要删除上面创建的用户user1和user2,当然我们可以使用userdel命令,但是有的时候是程序执行的,所以我们需要在/etc/passwd中提取出新创建的2个普通用户,使用grep进行行提取 123$ grep "user" /etc/passwd | grep -v "system" #...
响应式web设计
固定宽度布局的缺点我们经常可以看到固定宽度的布局.例如960px的页面在笔记本上可能显示刚刚好,但是在高分辨率的显示器上两侧就会出现留白,可是我们现在有了智能手机.手机浏览器会将一个标准页面缩放到与视口(即:设备可视区域)恰好匹配.然后用户可以选择在自己感兴趣的内容上放大浏览,这样就导致了用户体验非常糟糕!(想象一下不停的点击放大滑动然后缩小,更可恶的是如果误点击了一个链接).响应式web设计的核心是移动优先. 在使用CSS3属性的时候需要注意浏览器前缀,并且将不带有前缀的添加到最后,这样如果该属性可用就会覆盖之前的声明. 百分比宽度的计算百分比宽度 = 目标元素宽度 / 上下文元素宽度,例如我们有以下的固定宽度的布局: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253<div id="wrapper"> <header> <nav> ...