分类:'编程随笔' 的所有文章

三步让你在共享主机(比如Bluehost)的web服务提速50%?Gzip css/js !

由于Ajax的兴起,现在的web服务多数对css和javascript有很强的依赖,网页上的脚本多达几百K。
尤其是使用了比较肥大的ajax框架的网站,这些脚本和css文件在几乎所有网页上都会被使用,严重拖慢了网站的整体速度。

解决方法很简单,将你的文件传递方式搞成gzip即可,一个50K的脚本gzip压缩以后只需要传递15K左右,压缩率高达70%
如果你的网站大量使用了js和css,使用这种方法提速50%非常有可能!

怎么搞呢?参见这篇文章:[转贴] 配置IIS和Apache的HTTP压缩-Gzip (IIS 6.0配置Gzip Apache配置Gzip

但是,但是,但是,如果你是共享主机呢?像Bluehost这样的,怎么办?
别着急,后面介绍的三步曲非常简单,并且完全不用动以前写的代码,不会有人和的冲突问题!

先说说我面临的问题
————————————————————
近几天在学jQuery,使用以后应该会对代码发芽网(fayaa.com/code )的体验有所提升
原来由于js不熟悉导致的一些问题应该也可以避免了

但是,jQuery毕竟体积不小,min版也有54.5k,比代码发芽网的首页还大。
发芽网定位于小而精的产品,所有这样的大小肥了一点儿。
在jQuery网站上看到可以使用gzip压缩,但是实际上Shared host可能不直接提供gzip,比如Bluehost就没有。
上面那个链接中也提到一个简单的php脚本,但是在我看来还是有些复杂。

今天终于搜到一篇文章提到Bluehost上面如何搞定Gzip css/js,根据文章上的方法成功的解决了Bluehost上的css/js文件压缩的问题。

下面贴一下如何三步搞定Bluehost上gzip传输css/js,实现网站提速:
————————————————————
这里用css文件做例子,javascript(.js)文件照葫芦画瓢。
一般情况下css文件都存在一个单独的目录下,比如说是styles目录,进入这个目录
1. 建一个文件命名为.htaccess(包括那个点儿),里面写:

AddHandler application/x-httpd-php .css

2. 再建立一个文件命名为gzip-css.php,内容为:

<?php
ob_start ('ob_gzhandler');
header('Content-type: text/css; charset: UTF-8');
header('Cache-Control: must-revalidate');
 
header('Expires: '.gmdate('D, d M Y H:i:s',time() + 2629743) . ' GMT');
?>

3. 再建立一个文件php.ini,里面内容为:

[PHP]

; Automatically add files before any PHP document.
auto_prepend_file = gzip-css.php

好啦,万事大吉了,对于css文件来说,所有这个目录及其子目录下的css文件都已经自动gzip了!

下一步就是重复上面的步骤,注意
* 在第一步把.css改为.js
* 在第二步文件名为get-js.php,并把text/css改为application/javascript
* 在第三步把get-css.php改为get-js.php

搞定了!就是这么简单!你完全不用动以前写的代码!

最后,如果你不相信,用curl或者firebug里面的”Net”小工具查查原本54K的jQuery现在有多大:
http://www.fayaa.com/static/scripts/jquery-1.2.6.min.js

好吧,我直接说答案好了,17K!,超过70%的提速!
怎么样,赶紧试试吧!

代码发芽网增加了两个RSS,关于全站代码和评论的

参照: http://www.djangoproject.com/documentation/syndication_feeds/
写了个超级简单的RSS

现在在代码发芽网首页(http://www.fayaa.com/code/)在右上角就可以看到
为了减轻服务器压力,到feedsky做了烧录,两个地址如下:
全站代码RSS:http://feed.feedsky.com/fayaacode
全站评论RSS:http://feed.feedsky.com/fayaacomments

Django做RSS真简便,赞一个。
实现这个功能的部分代码在这里:http://www.fayaa.com/code/view/149/

代码发芽网更新了:界面调整、多种字体 - 无需插件支持blog代码高亮

代码发芽网:无需插件支持blog代码高亮, http://www.fayaa.com/code/
已知支持:百度空间, 网易邮箱、网易博客, 新浪博客, 牛博网, CSDN, 基于Wordpress的Blog, Google Gmail
网站架构:Django + Pygments,架在shared host上面(bluehost的主机)

感谢各位在反馈页面以及python-cn邮件组给出的建议,这段时间都在更新,纯兴趣的东西,时间不够啊…
最近主要更新如下
1. 界面进行了更多的调整,让字体配色显得更加舒服,把表情图片改小了一些,看起来更加协调
2. 加入了方便复制代码的按钮
3. 加入了”给用户发信”功能
4. 发自己用的临时贴不需要填标题了
5. 可以选择字体了,会枚举这些字体(机器上没有则不显示):’Consolas’, ‘Lucida Console’, ‘Courier New’, ‘Bitstream Vera Sans Mono’, ‘monospace’, ‘Fixedsys’, ‘Monaco’
(目前复制粘贴以后字体还在,但是发blog / email以后字体消失,还没有搞清楚是哪里的问题…)

可以打开这个例子看看效果:猜数字游戏的八步以内求解程序

猜数字游戏,计算机求解,八步以内求解决策树

猜数字游戏

这个游戏的规则比较简单,一般两个人玩,一方出数字,一方猜。出数字的人要想好一个没有重复数字的4位数,不能让猜得人知道。猜的人就可以开始猜。每猜一个数字,出数者就要根据这个数字给出几A几B,其中A前面的数字表示位置正确的数的个数,而B前的数字表示数字正确而位置不对的数的个数。

如正确答案为5234,而猜的人猜5346,则是1A2B,其中有一个5的位置对了,记为1A,而3和4这两个数字对了,而位置没对,因此记为2B,合起来就是1A2B。

接着猜的人再根据出题者的几A几B继续猜,直到猜中为止。

次数限制
有的时候,这个游戏有猜测次数上的限制。根据计算机测算,这个游戏,如果以最严谨的计算,任何数字可以在7次之内猜出。而有些地方把次数限制为6次或更少,则会导致有些数可能猜不出来。而有些地方考虑到人的逻辑思维难以达到计算机的那么严谨,故设置为8次甚至10次。也有的没有次数上的限制。

前几天,突然想起来,研究生时候研究的猜数字程序求解问题,当时想做出一个完全决策树,根据这个树,任何数字都可以在8次以内求解。

解题思路很简单:

#1. 生成所有的四位不重复的0-9的数字组合的集合
#2. 随便找四个数字,比如0123
#3. 根据用户返回结果(xAyB),砍掉集合里面不符合结果的
#4. 根据现有数字组合,猜下一个,主要技术含量在这里:
#  a. 贪心算法,每次都找当前步骤里最优的
#  b. “最优”的定义:
#   b1. 选择一个组合
#   b2. 把这个组合和剩下的组合进行匹配,统计xAyB出现的次数,
#   __比如0A0B出现了10次,1A3B出现了0次等等
#   b3. 如果xAyB的所有可能出现的机会最为均等,那么这个选择的“区分度”就很大
#   __这个可以通过信息量理论进行衡量,也可以简化为通过“最小标准差”来衡量
#   b4. 遍历所有组合,找出“区分度”最大的
#5. 重复步骤3, 4,直到用户给出4A0B或者集合里面只剩下一个元素

首先在python-cn上面发起了关于如何快速生成所有数字组合的讨论
抛砖引玉,讨论的结果中居然有十多种方法,体现了不同的思路,具体的讨论参见:
函数性能:列出四个不重复数字(0-9)的所有组合

相关代码在这里:
生成四位不重复数字(0-9)的所有组合,比如8765, 9876, 0123
生成四位不重复数字(0-9)的所有组合

后来实现了上面所得解题思路,代码在这里:猜数字游戏的八步以内求解程序.

为了验证一定能在八步以内求解,我决定做个决策树生成程序,这个决策树的节点代表着每次猜测,树枝代表着xAyB这样的选择。
猜数字游戏8步以内的完全求解决策树生成程序

我实验过将这个决策树直接用于计算机求解,速度没的说,基本上就是8个以内的dict元素get操作和比较操作就能搞定。

参见:代码发芽网上所有标签(Tag) 为 猜数字 的文章

在Pygments.org上加了代码发芽网的链接

早晨起来给Pygments的作者Brandl写了一封感谢信,晚上回来收到他的回信说:Sounds great! I’ve added the site to the “Who uses Pygments” page

现在访问http://pygments.org/projects/ 可以看到一个发芽网的链接: Fayaa, a Chinese pastebin

Pygments是个非常漂亮的工具,感谢Brandl的付出与共享。

顺便到百度百科、csdn、coolcode.cn、以及javaeye.com上面去做了一下“广告”:主要是介绍这个工具。
唉,人家Javaeye的网站,那叫一个快啊!

BTW:
在Javaeye做完“广告”不到两个小时,我的Javaeye帐号就被默默的删除了,那叫一个快啊!
发的两篇贴也踪影皆无,效率真tm高,过程真tm和谐
看来即便做广告一定不能说明自己是做广告,要这么说:我发现一个在线加色工具,效果还不错,云云,
但是,这他妈的就是我自己的工具,我觉得好用,推荐一下,有什么不可以?
毛遂自荐即便不算什么美德,也犯不着封杀吧?

骂归骂,我比Javaeye的素质高多了,随便你用,爱怎么的怎么的
干!

下一页 »