月度归档:2012年01月

DNS预获取(dns-prefetch)

今天翻看twitter的源码的时候看到了一下内容:

<link rel=”dns-prefetch” href=”http://a0.twimg.com”/>

<link rel=”dns-prefetch” href=”http://a1.twimg.com”/>

<link rel=”dns-prefetch” href=”http://a2.twimg.com”/>

<link rel=”dns-prefetch” href=”http://a3.twimg.com”/>

<link rel=”dns-prefetch” href=”http://api.twitter.com”/>

查阅了相关资料,知道DNS Prefetch也就是DNS预获取,也是前段优化的一部分。在前段优化中关于DNS的有两点:一是减少DNS的请求次数,第二个就是进行DNS预先获取。

DNS Prefetch 已经被下面的浏览器支持

  • Firefox: 3.5+
  • Chrome: Supported
  • Safari 5+
  • Opera: Unknown
  • IE: 9 (called “Pre-resolution” on blogs.msdn.com)

默认情况下浏览器会对页面中和当前域名(正在浏览网页的域名)不在同一个域的域名进行预获取,并且缓存结果,这就是隐式的DNS Prefetch。如果想对页面中没有出现的域进行预获取,那么就要使用显示的DNS Prefetch了,也就是使用link标签:

<link rel=”dns-prefetch” href=”http://api.twitter.com”/>

DNS Prefetch应该尽量的放在网页的前面,推荐放在<meta charset=”/>后面。

PS:可以通过下面的标签禁止隐式的DNS Prefetch。
<meta http-equiv=”x-dns-prefetch-control” content=”off”>

内容整理自:DNS-Prefetching

参考:
网站优化应重视 DNS 预获取(DNS Prefetching)

如何设置一个严格30分钟过期的Session

问题是Laruence在微博上提出的:

我在面试的时候, 经常会问一个问题: “如何设置一个30分钟过期的Session?”, 大家不要觉得看似简单, 这里面包含的知识多着呢, 特别适合考察基本功是否扎实, 谁来回答试试? 呵呵

说实话,如果是面试我的话,我回答不好。我找了一下stackoverflow发现有人讨论过同样的问题,How do I expire a PHP session after 30 minutes?,看了一下Gumbo回复应该是最好的。过了不久Laruence也整理了一篇文章,讲的更全面一些。 Gumbo说的对,要回到好这个问题只要弄清楚session.gc_maxlifetimesession.cookie_lifetime这两个配置的原理就可以了。 session.gc_maxlifetime这个时间是指的Session过多少时间会被session GC回收。这里需要主要以下几点

  • GC启动本身是有概率的( session.gc_probabilitysession.gc_divisor
  • 不同的脚本具有不同的 session.gc_maxlifetime 数值但是共享了同一个地方存储会话数据,则具有最小数值的脚本会清理数据。此情况下,与 session.save_path 一起使用本指令
  • GC和这个时间比较的时候是用的sesssion文件的mtime( >PHP 4.2.3)而不是atime

session.cookie_lifetime

这个是Server发送给浏览器的cookie过期时间

所以只要明白了这两个配置的原理,那么这个问题至少会回答及格(我认为)。

所以手册很重要,不管是哪种技术,如果把手册研究一篇,搞懂80%以上,那么不是大牛也是个高级工程师鸟。

 

MySQL中得到当前使用的数据库

在MySQL中用use 切换使用的数据库(或者在PHP中用mysql_select_db函数),反过来我们怎样知道正在使用的是哪个数据库呢?

这种需求很少遇到,但是还是会遇到的:)

所以找了一下,发现MySQL可以通过select databse()命令来查看当前使用的数据库。

ps:MySQL database函数

推荐:Stop Making Apps

再搭车推荐:

《他们在毕业的前一天爆炸 》《听说》《那些年,我们一起追的女孩》值得一看