谁愿摧眉折腰

Catálogo

人生中会遇到很多重大事件。今天算一个。不是绝对的好事。也不是绝对的坏事。

清华的学术也不过如此了。而如同挖煤老板一样的暴发户教授,更是毫无节操可言。

不过,朱自清的父亲说了,“天无绝人之路”。

安能摧眉折腰事权贵,使我不得开心颜。仰天大笑出门去,我辈岂是蓬蒿人。

Compartir

《JavaScript高级程序设计》笔记

《JavaScript高级程序设计(第3版)》

乱写一通。

这本书是2013-2014的寒假坐火车回家前在候车室里开始看的。火车上也看了一路。整个假期基本就只看这一本书。偶尔敲一敲里面的代码。此书与犀牛书确实有很多不同之处,真正想学习JavaScript的同学,两本都买并无不可。

2014年9月~10月,重读此书,亦对此博文进行扩充。

Read More

Compartir

《秩序之美》笔记

无论如何,最成功的设计可以简化为一种最为本质的目的:在混沌中创造秩序。

——《秩序之美》

这本书对网格布局系统的推崇,与《写给大家看的设计书(第3版)》中“对齐”规则是相呼应的。没有对齐,就会产生混乱。

Read More

Compartir

通过递减循环变量提高JavaScript循环性能

《高性能网站建设进阶指南》第95页提到:

另外一种提高性能的简单有效的方式是将循环变量递减到0,而不是递增到总长度。根据每个循环的复杂性不同,这个简单的改变可以比原来节约多达50%的执行时间。

我在这几种环境下进行了简单的测试:Node.js,Chrome,Firefox,IE。在浏览器环境下,循环变量从0增长与递减到0相比会有性能损耗;但在Node中则截然相反。

Read More

Compartir

Node.js学习书籍推荐

最近在学Node.js,感觉其非常强大,也很有趣。国内目前关于Node.js的书籍还不是很多,避免了选择焦虑环节,于是干脆买了几本。目前读了两本,列出来这些书,并附上自己的评价,或许对别人有帮助。

Read More

Compartir

node.js搭建简单的HTTP服务器

Catálogo

###参考资料
《Node.js入门经典》第5章

###1. 最简单的HTTP服务器

1
2
3
4
5
6
var http = require('http');
http.createServer(function(req, res){
res.writeHead(200, {'Content-Type':'text/plain'});
res.end('Hello, I\'m an HTTP server.');
}).listen(3000);
console.log('Server running at http://127.0.0.1:3000');

###2. 路由控制的HTTP服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var http = require('http'),
url = require('url');

http.createServer(function(req, res){
var pathname = url.parse(req.url).pathname;
if (pathname ==='/'){
res.writeHead(200, {'Content-Type':'text/plain'});
res.end('Hello, I\'m an HTTP server.');
} else if (pathname === '/about'){
res.writeHead(200, {
'Content-Type': 'text/plain'
});
res.end('About us\n');
} else if (pathname === '/redirect') {
// 重定向
res.writeHead(302, {'Location':'/'});
res.end();
} else{
res.writeHead(404, {'Content-Type':'text/plain'});
res.end('Page not found\n');
}
}).listen(3000,"127.0.0.1");
console.log('Server running at http://127.0.0.1:3000');
Compartir

HTML5 Web Socket初步学习

HTTP是一个请求和响应协议,其设计目的是请求文件,并围绕请求文件的思想进行操作。从设计初衷上讲,它并不适用于需要服务器实时数据的应用。如即时聊天应用。这种应用需要在服务器上发生某事时向浏览器推送数据。

使用一系列HTTP序列可以近似实现从服务器获取“实时”数据的功能,例如网页邮箱。

观察QQ邮箱的网络请求情况,如下图,可以看到它大概每隔29秒多点就会向服务器发送一次请求,看看是否有新邮件。

这样会产生大量的服务器负载,因为每个请求都需要在服务器上建立和销毁,以及HTTP头和用户身份验证的网络开销;HTTP头可以给每个请求增加几百KB,在一个繁忙的服务器上,这会给服务器和网络增加相当数量的负载。

Read More

Compartir

《jQuery Cookbook 中文版》笔记

《jQuery Cookbook 中文版》

仅摘记自己陌生的、新学到的知识点。

##第1章:jQuery基础

###关于ready()方法
jQuery(document).ready(function(){})方法可以在DOM加载之后、整个页面加载之前执行JS代码。与之相比,window.onload属性则是在页面全部加载完后(包括图片、SWF等)才被触发。

所以ready()比较贴合实际。但是它也不是必须的:

这个定制的jQuery事件只有在JavaScript必须嵌入到页面顶端的文档流并封装在<head>元素里时才有必要。我只需将JavaScript文件包含和内联代码放在<body>结束标签之前,就能避免使用ready()事件。原因有二。

一,现代优化技术已经断言,当JavaScript代码放在页面解析的最后由浏览器加载时,页面的加载速度就会变得更快。

二,ready()方法一定程度上增加了代码量,这样不好。代码越少,网页运行得总是越快。

Read More

Compartir

12306网站前端初步优化之我见

最近买火车票,感觉12306网站做得实在太垃圾了——加载速度慢,使用同步的Ajax验证码,未使用CSS Spirites …… ——完全不是抱着处理大量请求、高并发去的啊。于是抽空瞥了一下网站源码,发现其前端部分是个极好的反面教材,可以作为web前端工程师进行性能优化的案例。本文仅指出12306网站前端方面存在的问题,并提出性能优化建议。鄙人水平有限,如有不对之处,还望读者朋友多多见谅,并感谢批评指正~~

另外,1月3日下午我给12306铁路客运服务的“意见反馈”邮箱发了一封邮件,也不知道他们会不会处理。更不知道会不会被……

参考资料:

Read More

Compartir

《JavaScript语言精粹》笔记

《JavaScript语言精粹》

伯乐在线 - 给JavaScript初学者的24条最佳实践

Read More

Compartir