技术最前端,专注 Web 技术学习与总结。JavaScript, JS, ES6, TypeScript, Vue, PHP, CSS3, Html5, Node, Git, Markdown 等技术文章。
软件也像人一样,具有生命力,从出生到死亡,会经历多种变化。软件架构设计也不是一蹴而就的,是不断地演进发展。每个程序员都可以从理解编程原则和模式中受益。
软件设计原则是一组帮助我们避开不良设计的指导方针。根据 Robert Martin
下面这些软件设计原则是我从一些书籍和网络中收集而来,并不完整,而且你也需要在一些有「冲突的原则」之间进行权衡和取舍。本文或许会对你的编程、程序设计、讨论或评审工作有所帮助。
异步编程一直是 JS 的核心之一,业界也是一直在探索不同的解决方法,从「回调地狱」到发布订阅模式,再到 Promise
,都是在优化异步编程。尽管 Promise
已经很优秀了,也不会陷入「回调地狱」,但是嵌套层数多了也会有一连串的 then
,始终不能像同步代码那样直接往下写就行了。Generator
是 ES6 引入的进一步改善异步编程的方案,下面我们先来看看基本用法。
首先,使用 JavaScript 语言,写一个可执行脚本 hello
#!/usr/bin/env node
console.log('hello world');
然后,修改 hello 的权限:
chmod 755 hello
现在,hello 就可以执行了:
$ ./hello
hello world
浏览器缓存(Brower Caching)是浏览器在本地磁盘对用户最近请求过的文档进行存储,当访问者再次访问同一页面时,浏览器就可以直接从本地磁盘加载文档。
浏览器缓存的优点有:
减少了冗余的数据传输,节省了网费
减少了服务器的负担,大大提升了网站的性能
加快了客户端加载网页的速度
~
对每一个比特位执行非(NOT)操作。NOT a 结果为 a 的反转(即反码)。
var num = ~4;
console.log(a); // -5
解析:
4 的二进制数为 100,补满32位
00000000000000000000000000000100
按位取反
11111111111111111111111111111011
由于32位开头第一个是 1,所以这是一个负数,将二进制转换成负数,需要先反码
00000000000000000000000000000100
之后,再+1
00000000000000000000000000000101
转换成十进制为 5,加上符号变成负数 -5
加减法
var a = 1,
b = 2;
a = a + b;
b = a - b;
a = a - b;
console.log(a, b); // 2, 1
function commafy(num) {
num = num + '';
var reg = /(-?\d+)(\d{3})/;
while(reg.test(num)) {
num = num.replace(reg, '$1,$2');
}
return num;
}
-webkit-text-size-adjust
是为了保持网页字体大小的一个属性,因为有些网页的字体缩小以后,难以识别,并且也严重影响到用户体验,如果在全局定义了 html { -webkit-text-size-adjust: none; }
会导致另一个现象:浏览器一般提供给小群体用户一个功能,就是放大与缩小网页视图。禁用了这一属性,在 chrome 下放大网页,会导致其它元素均放大,而文字却依然为原定义的 12px。
经典的三列布局,也叫做圣杯布局 Holy Grail of Layouts,是Kevin Cornell在2006年提出的一个布局模型概念,在国内最早是由淘宝UED的工程师传播开来,在中国也有叫法是双飞翼布局,它的布局要求有几点:
三列布局,中间宽度自适应,两边定宽
中间栏要在浏览器中优先展示渲染
允许任意列的高度最高