HTTP协议,浏览器缓存和网站速度优化
在计算机和网络的世界里,小到CPU,大到Internet,缓存无处不在。个人认为,缓存策略主要解决两个问题,第一个是解决不同设备IO速度不同的资源等待问题,第二个是解决相同资源重复传送的资源浪费问题。例如最常提到的CPU的三级缓存,就是为了解决CPU计算速度快,而读取内存速度慢导致CPU等待的问题。而我们上网的过程过,浏览器对已经请求的资源进程缓存,则属于缓存策略解决的第二个问题。本文主要分析一下HTTP协议,浏览器缓存和网站速度优化。
C语言编译和执行分析
学过编程都知道,在所有高级编程语言中,C是运行最高效的语言, 一个重要原因是C语言是静态型语言,会直接被编译成机器码,然后被计算机直接运行。和大部分人一样,做对C语言编译之后的运行方式的充满了好奇,主要包括一下几个方面:
可执行程序是什么,里面只是包括一大堆机器码吗?
C语言中定义变量, 常量, 函数等等,在内存中是如何分布的,它们之间是靠什么相互访问的?
计算机当中,同时运行的进程非常多,每个进程都占用内存空间,程序编译的时候,如何知道自己运行时将要被加载到哪里,又如何被CPU执行? …阅读更多>>
迭代器漫谈
问题是在Python中进行循环的时候产生的,熟悉Python的都知道,它没有类似其它语言中的for循环, 只能通过for in的方式进行循环遍历。最典型的应用就是通过range函数产生一个列表,然后用for in进行操作,如下:
#!/usr/bin/env python
for i in range(10):
print i
代码的意义很好理解,range会产生一个列表,用for in最这个列表进行遍历,就有和类似for(i = 0;i<n;i++)同样的效果,range函数的详解可以看这里。问题又来了,range这个对象会产生一个列表,那么这个列表的内容铁定是存放在内存当中的,当需要的循环数量太大时,是相当占用内存的, 为了统计使用range占用内存的情况,我做了6次使用,分别用range产生100,10000,100000,1000000,10000000,100000000长度的列表,然后统计内存的占用:
| 测试代码 | 占用内存 |
| range(100) | 2.0MB |
| range(10000) | 2.2MB |
| range(100000) | 3.8MB |
| range(1000000) | 19.5MB |
| range(10000000) | 168.5MB |
| range(100000000) | 1465.8MB |
可以看到,随着基数的加大,占用内存呈几何倍数增加,显然在进行大循环操作的时候,要避免使用range。 …阅读更多>>
Python异常详解
异常(exceptions)是Python中一种非常重要的类型,它和语法错误不同,是在程序运行期间引发的错误。Python中内置了很多异常,如IOError,NameError,KeyboardInterrupt等,更多的异常可以点击这里。
异常的意义在于提供一种更加优雅的运行方式,例如用Python编写一个计算器,如果用户输入不能计算的对象,则可以抛出异常,并进行处理, 如下:
while True:
try:
x= int(input('Please In enter A number:'))
print "Your Input is %s"%x
break
except Exception,e:
print e
基于select模块的IO复用
Socket的英文原义是“孔”或“插座”。作为BSD UNIX的进程通信机制,取后一种意思。通常也称作”套接字”,用于描述IP地址和端口,是一个通信链的句柄。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket正如其英文原意那样,像一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务。–百度百科

