Feb 08

目前主流的浏览器为IE系列、firFox系列、Opera、safari、Chrom 5款。

随着每一款浏览器的升级,都会有一次速度,内存占用,启动速度的横向评比。

相同的,每一次的矛头不可避免的都指向了IE,因为几乎无一例外,每次都是IE垫底。

7款浏览器速度测试

7款浏览器速度测试

而目前市场占有率最大的,却恰恰是性能最慢的浏览器。

08年10月浏览器市占率报告

为何其他性能卓越的浏览器,却如此难以撼动ie的市场地位呢?

我认为除了windows的捆绑策略以外,还与其他浏览器开发厂商的技术型思维有关。

大部分的开源浏览器社区都是由技术人员组成的,他们衡量浏览器的竞争优势,是以执行效率和性能来评价的。

而这与普通的浏览器用户,思维是不一致的。

实际上,在最终用户哪里,浏览器载入页面的速度不是瓶颈,而网速才是最大的瓶颈,也就是说,浏览器执行性能上的差异,与网速瓶颈相比,简直就是可以忽略不计的。

所以,强调浏览器的性能,和载入速度,不会使任何浏览器的竞争优势明显。

在普通的用户哪里,根本体验不到各个浏览器载入速度有何明显的差异。

而微软的捆绑策略,才是最大的竞争优势,因为不更换浏览器,对普通用户来说,可以省去很大的麻烦。

相比国内的某些以ie为内核的山寨浏览器,由于在xp系统绑定ie6的时期,提供了标签窗口的功能,另辟蹊径,为用户提供了速度以外的便利性,所以,取得了比ie更大的竞争优势。

所以,过分强调性能的浏览器,迟迟不能撼动ie的原因,是竞争优势并不明显。

Dec 29

今天才搞明白Ucenter同步登陆退出的真正原理,其实很简单,没有当初自己想像那么复杂,但是为了这几行简单的代码,绕了我一天。

Ucenter的用户库,uid字段,应该和各个应用的用户表的id字段一致,所以同步登陆,是通过uid同步的,登陆一个应用以后,通过同步其他应用相同uid的用户,实现同步。

整个过程是:

$ucsynlogin = uc_user_synlogin($user['User']['id']);

这一句,是各应用登陆后,通过uid生成同步登陆代码,一开始不太明白登陆代码是什么意思,最后才发现,是生成了一段javaScript语句!然后在返回的网页上执行,就是下面这段:

<script type="text/javascript" 
src="http://localhost/bbs/api/uc.php?time=1262097782&code=5a85NWP3neqXUX1dk1yQnTqc%2FOQblvyh%2B%2BU7s%2F4q53qJU2LAGdUyENKBFsVJ9Oq8Iqhiwzm9x7%2Fz1iL3G6vsqodmBjt%2Bw4PUsGY43Aqvt8DzMTumA4gR9OLml2BOyG%2FSgAS9BFI%2FpzOkV5fksLI5f9FmlkYkL0ZTisr9ug"
reload="1"></script>
<script type="text/javascript" 
src="http://127.0.0.1/examples/api/uc.php?time=1262097782&code=cd01PfYo%2FnXkZgBj9s9CAYXX5vnfo0EzQ%2F3WcpD%2FAD%2F4wrwgFGTbo995YQf6scvXX%2FS6z3juHtMgcPzkwaR6ArI67IqFNrJKTcQMgm86sNfEBpYM6X2p5M7sdr1KgC5%2FwX3lLcNcqt7Hv%2Fl5OtuIcEBqy3nN6tWQMpmS5A"
reload="1"></script>

可以看到,分别调用了其他应用的api/uc.php,来进行登陆,除了当前应用以外,ucenter里面配置了几个应用,就生成几段这样的js调用。

所以,执行完$ucsynlogin = uc_user_synlogin($user['User']['id']);以后,一定要在网页上输出这个$ucsynlogin,这就是同步的关键点。

注册时候要注意的问题:

因为有可能出现其他应用和ucenter的用户表里插入了新记录,而本应用没有插入的情况,所以,为了避免uid冲突,在本应用进行用户注册时,切忌用自动增长字段作为用户表id,而应该先注册ucenter用户表,然后获得$uid,以这个$uid,作为本应用新用户的id号,这样,多个应用的用户id始终与ucenter保持一致,具体代码如下:
$uid = uc_user_register($this->data['User']['name'], $this->data['User']['password'], $this->data['User']['email']);
然后:
$this->data['User']['id']=$uid;
再用这个数组进行注册:
$this->User->save($this->data);

退出和登陆是同样的道理,不说了。

Tagged with:
Dec 24

Ucenter本身存在一个用户表member,而各个应用也都有自己的用户表,当同步时,可能会有这么几种情况:
注册时:当在各个应用的注册入口进行注册时,除了在该应用自己的用户表中插入一条记录外,也在ucenter的member表里插入相应记录,所以,无论在哪里注册,ucenter的member表里,都是用户的汇总。
激活时:当在应用A中注册了用户,A中的用户表和ucenter用户表中是有记录的,而应用B中是没有的。所以,当用该用户名第一次登录B时,会提示激活,这个激活,实际上执行的操作,就是在B的用户表里也插入一条该用户记录,使A,B,C同步。

如要避免激活的问题,可以在各个注册入口处,手动的加进程序进行同步,即在一个应用注册用户的时候,同时注册其他应用的用户表,也可以用数据库的触发器,这个不难。

Tagged with:
Dec 16

To use the below, call it like a normal function. There are four arguments. The first determines what you want to measure the date difference in - years, months, quarters, etc - and the allowed values of this are listed in the first few lines of the function. The next two are the dates themselves. Any valid date should work just fine. You can also use timestamps as dates, although if you do, you must set the last of the four arguments to “true”. You can call it like so:
example:
datediff(”m”,’1978-10-11′,date(”Y-m-d”))
echo datediff(’w', ‘9 July 2003′, ‘4 March 2004′, false);

function datediff($interval, $datefrom, $dateto, $using_timestamps = false) {
/*
$interval can be:
yyyy - Number of full years
q - Number of full quarters
m - Number of full months
y - Difference between day numbers
(eg 1st Jan 2004 is “1″, the first day. 2nd Feb 2003 is “33″. The datediff is “-32″.)
d - Number of full days
w - Number of full weekdays
ww - Number of full weeks
h - Number of full hours
n - Number of full minutes
s - Number of full seconds (default)
*/

if (!$using_timestamps) {
$datefrom = strtotime($datefrom, 0);
$dateto = strtotime($dateto, 0);
}
$difference = $dateto - $datefrom; // Difference in seconds

switch($interval) {

case ‘yyyy’: // Number of full years

$years_difference = floor($difference / 31536000);
if (mktime(date(”H”, $datefrom), date(”i”, $datefrom), date(”s”, $datefrom), date(”n”, $datefrom), date(”j”, $datefrom), date(”Y”, $datefrom)+$years_difference) > $dateto) {
$years_difference–;
}
if (mktime(date(”H”, $dateto), date(”i”, $dateto), date(”s”, $dateto), date(”n”, $dateto), date(”j”, $dateto), date(”Y”, $dateto)-($years_difference+1)) > $datefrom) {
$years_difference++;
}
$datediff = $years_difference;
break;

case “q”: // Number of full quarters

$quarters_difference = floor($difference / 8035200);
while (mktime(date(”H”, $datefrom), date(”i”, $datefrom), date(”s”, $datefrom), date(”n”, $datefrom)+($quarters_difference*3), date(”j”, $dateto), date(”Y”, $datefrom)) < $dateto) {
$months_difference++;
}
$quarters_difference–;
$datediff = $quarters_difference;
break;

case “m”: // Number of full months

$months_difference = floor($difference / 2678400);
while (mktime(date(”H”, $datefrom), date(”i”, $datefrom), date(”s”, $datefrom), date(”n”, $datefrom)+($months_difference), date(”j”, $dateto), date(”Y”, $datefrom)) < $dateto) {
$months_difference++;
}
$months_difference–;
$datediff = $months_difference;
break;

case ‘y’: // Difference between day numbers

$datediff = date(”z”, $dateto) - date(”z”, $datefrom);
break;

case “d”: // Number of full days

$datediff = floor($difference / 86400);
break;

case “w”: // Number of full weekdays

$days_difference = floor($difference / 86400);
$weeks_difference = floor($days_difference / 7); // Complete weeks
$first_day = date(”w”, $datefrom);
$days_remainder = floor($days_difference % 7);
$odd_days = $first_day + $days_remainder; // Do we have a Saturday or Sunday in the remainder?
if ($odd_days > 7) { // Sunday
$days_remainder–;
}
if ($odd_days > 6) { // Saturday
$days_remainder–;
}
$datediff = ($weeks_difference * 5) + $days_remainder;
break;

case “ww”: // Number of full weeks

$datediff = floor($difference / 604800);
break;

case “h”: // Number of full hours

$datediff = floor($difference / 3600);
break;

case “n”: // Number of full minutes

$datediff = floor($difference / 60);
break;

default: // Number of full seconds (default)

$datediff = $difference;
break;
}

return $datediff;

}

Tagged with:
Dec 06

这个博客本来不是写SEO的,但是最近对SEO思考的比较多,所以上网查了一些资料,其中关于首页设计方案,觉得菜头工作室写的有些道理,原文如下:

网站的首页最应该怎么放更合理

新浪的首页改版了,改的更加的密密麻麻,这种网页虽然可以给新浪首页增加更多的广告位来卖,但是这种设计风格并不是最合理的,好在新浪的用户都喜欢了新浪,可以在最短的时间内找到自己需要的东西,所以这种设计风格对新浪的影响不是太大。

但是其他新网站在设计的时候,很容易来模仿新浪,走入网站首页设计的误区。我和许多设计师沟通过,他们之所以跟风新浪首页这种设计风格,主要有以下原因:
这种设计风格“大气”:
大部分行业人士打开一个网站的时候,发现这个网站首页密密麻麻的有好几屏,就会觉得这个网站内容特别多,特别的像新浪和sohu,内容非常多,像门户网站一样,像一个大网站!
如此来搞,虽然看起来像大网站,看起来内容很多,一切都是“看起来”或者是“像”,它不是真正的。于是它的作用仅仅是忽悠一些不懂网站的朋友夸一下你,欺骗一下你自己。除此之外,它对你的网站发展一点利都没有。为什么呢?
1、浪费带宽:
对于一个网页而言,内容越小,速度越快! 虽然目前宽带一个很普及了,但是IDC资源却越来越紧张。你想象,一个网页中80%的内容是80%的用户根本不会去看的内容,那么这80%的内容还堆积在这个网页中是否是浪费带宽呢?
2、打开速度慢
大家知道,网页越大,打开速度就越慢。新浪之所以内容多,打开速度还很快,是因为新浪有很好的服务器和带宽支持。这都需要大量成本来支持的。
如果你的网页设计的很大,打开速度就会变慢,无法给用户快感,你的网站对用户的吸引力就会下降。
3、让用户很不方便:
网站首页密密麻麻的堆积大堆内容,会让新用户眼花缭乱心情烦躁的,而且还会影响用户无法在最短的时间内找到自己最需要的内容。
那么网站的首页最应该放什么内容呢? 要了解该放什么内容,就需要首页对于网站最重要的几个作用:
1、导航作用:
导航的目的是帮助用户最最短的时间内找到自己最需要的内容。如果你的网站能够让用户在3步之内找到他需要的内容,你的网站就非常成功了!导航一定要人性化。
2、突出特点:
想让用户记住你的网站,就需要让用户在登陆你网站的第一瞬间,就明白你的网站是做什么?有哪些他需要的内容或者服务。然后把这些特点以最吸引用户的形式表现出来。
3、突出精华:
什么样的内容才是最精华的内容呢? 那就是你的网站80%以上的用户都感兴趣的内容。不同类型的网站,其大部分用户最感兴趣的内容都不同。
按照这三个标准,重新考虑一下你的网站最该放什么了,然后重新做一个首页,测试一下用户感受,也许你会有意外的收获.

原文地址:http://www.csbian.com.cn/article/69.html

觉得与本文的作者,有同感,就是大家都说密密麻麻的首页用户体验不好,设计理论也不支持像新浪这种首页设计方案,参考国外比较知名的网站,也很少有像国内三大门户这种风格的首页。

那么,既然设计理论公认的用户体验不好的设计方案,为什么在国内这么流行?这是个表面看起来很矛盾的问题,值得思考一下。

我相信,既然存在了,就肯定有他合理的地方,浏览国内各个门户,行业网站,甚至一些比较大的企业网站,首页密密麻麻似乎备受设计者的青睐。

那么,访问量比较大的网站,难道没有意识到用户体验很重要么?我想不可能。我想他们在考虑用户体验的同时,也不得不考虑流量才是硬道理。

1. 用户是喜欢简练直接的首页,这一点是公认的。而首页内容太少,却不利于网站的收录,和相关关键词的排名,所以,首页的设计,要平衡多内容和条例性,用户体验和SEO兼顾,不可偏废;

2. 由于国内门户对中国网民多年习惯的养成,有很大一部分人对于内容和链接条目繁多的首页还是持肯定评价的。他们会对这种网站留下内容丰富,“大站”等肯定的评价。虽然,实质上对用户可能没有太大意义,但给用户一个值得肯定的印象,对网站还是有好处的;

3. 综合SEO和国内用户的偏好,国内网站的首页设计,不唯用户体验,兼顾SEO,内容丰富,条理尽量清晰的首页设计,还是利大于弊的。毕竟,没有流量的站,即使体验再好,也是徒劳的。

Tagged with:
Nov 26

ucenter是康盛的用户中心,利用这个中心,可以实现多个应用的用户信息共享,同步登入,同步推出,同步注册和注销等。

ucenter除了可以集成多个康盛公司自己的产品,也可以集成除康盛产品之外的其他应用,甚至与你自己写的任何程序。

集成康盛自己的产品,只需按步骤安装后,都可自动完成。

这里着重对集成其他应用的步骤和容易范错误的点说明一下。

集成其他应用,需要有一定的php编程基础。康盛在ucenter集成手册里,给出了一个示例程序,其中有一个为客户应用已包含用户数据表,一个为不包含数据表。

根据手册提示,需要将uc_client、api两个目录,复制到自己应用的文件夹下,另外还有一个文件config.inc.php也是复制到自己应用的文件夹下。

按照手册中的说明(手册已经讲的很详细,不重复讲了),配置好这三个文件中的内容,然后在ucenter的管理后台-应用管理-添加应用,这些在手册中都有说明,我主要讲一下手册里没有的。

也许是康盛的小小失误,在示例程序的config.inc.php文件里,少写了一行代码,就是这个小小的失误,让许多人走了很长的弯路。

在config.inc.php文件里,少了一句:$database = ‘mysql’;

这句是设定数据库的类型,其他类型的数据库请修改引号里的内容。

加上了这句以后,示例程序应该可以通讯成功了。

但是按照手册中的写的,配置完自己的应用后,还是不能通讯成功。

仔细看示例程序目录下,原来有一个include目录,而手册中没有提及。

讲这个目录,也一并复制到你应用的根目录下,通讯成功。

不知道康盛是有意还是无意,自己的例子程序没有调试通过,居然这么长时间也没有发觉。

况且版本已经更迭,而且官方论坛里有无数人提到这个问题,居然到目前仍然没有改动。

不理解。

Tagged with:
Nov 23

做了这么长时间的web开发了,今天居然在html标签上发现一个盲点,这个标签可能也被大多数人遗忘,因为用的确实太少了:

<fieldset><legend>SQL options</legend>这种格式并无选项</fieldset>

显示出来是这个样子

SQL options这种格式并无选项

我觉得这个标签还是很不错的,很清晰,记录一下。

Tagged with:
Nov 21

昨天研究Zend Studio下的字体设置,一直没找到满意的可以同时显示中文的代码字体。最后下定决心找出Zend Studio显示中文的乱码的根本原因,没想到一找还就真的找到了。原来根本问题不再Zend Studio而是在Java,而且类似问题在很多Java环境的编辑器中都出现过。

问题的关键就在于java的字体配置文件,这个配置文件应该在 jre_path/lib/ 下,文件名以fontconfig.开头。关于这个文件的详细介绍我就不说了,想了解的可以看看Sun的Font Configuration Files文档

我说下具体解决方法,这种解决方法应该不仅仅用于解决Zend studio的问题,也能够解决几乎所有给予java的编辑器字体问题,具体原理我就不细说了,大家应该很容易明白。
具体步骤:

1、 找到jre_path/lib/目录,注意zend studio的jre目录一般在”c:\program files\zend\zendstudio-5.X.0\jre\lib”,而系统的jre目录一般在”c:\program files\java\jre1.X\lib”。

2、除fontconfig.properties.src文件保留外,删除所有以fontconfig.开头的文件

3、复制fontconfig.properties.src文件为fontconfig.properties

4、在文件的末尾添加上,下面四行

dialoginput.plain.alphabetic=Consolas
dialoginput.bold.alphabetic=Consolas Bold
dialoginput.italic.alphabetic=Consolas Italic
dialoginput.bolditalic.alphabetic=Consolas Bold Italic

5、在编辑器(zend studio)中指定字体位”dialoginput”,重启编辑器

6、注意:第4步的中“Consolas、Consolas Bold..“部分即为你选择的字体名称。以后如果希望更改字体,就要在这里改,然后重启编辑器即可生效。

Jul 20

所谓CGI既是公共网管接口,CGI方式的PHP服务器,每次收到一个请求,都会启动一个进程,任务完成后销毁。

为了提高系统效率,fast-cgi将同时启动多个进程驻留内存中,由一个核心进行调配,实现了多任务进程间的共享。

在程序调试的阶段,每次启动服务器,都会自动打开多个php-cgi.exe进程,这在单用户的情况下,是对内存占用的浪费。

一般的apachi服务器,调整fast-cgi进程数的方法为:

httpd.conf文件中:

FastCgiServer "D:/server/php4/php.exe" -processes 4
后面的数字是几,就启动几个进程,没设置之前默认是8。

我使用的是zend Studio自带的Core内核进行调试,打开httpd.conf后,
没有发现上面的一句,在文档的末尾发现:

LoadModule zend_enabler_module "C:/Program Files/Zend/Core/modules/apache2.2/zend_fcgi.dll"
FastCgiConfig "C:/Program Files/Zend/Core/etc/fastcgi.conf"
打开fastcgi.conf文件,发现StartProcesses="8",将其改为4后,重启服务器后,
在windows任务管理器中变为只有4个php-cgi进程。
Tagged with:
Jul 15

这个是一般不为人知,也很少引起注意,但惹上了会给调试带来大麻烦。

在fireFox下调试通过没有报错,但是IE6和IE7都会报错。

就是页面中的id名,不能和JS脚本中的变量名和函数名重名。

这应该是IE的bug,把页面中的id名,统统当作脚本中的全局变量。

fireFox下没有这个问题,所以很容易在调试中造成困扰。

preload preload preload