Submitted by gouki on 2010, December 4, 11:48 AM
在转这篇文章之前,我先说一点项目中遇到的问题,公司的主页最近改版上线,但是上线后出了一点问题,是CSS方面的问题。
CSS文件很多,前端把它分的很细,每一个小的widget部位就是一个单独的CSS文件,这样确实方便了有重复内容时的工作量减轻。于是我们在上线后,对CSS文件进行了合并,用的是Yii的插件 EclientScript(@hightman开发的一个插件)。CSS和JS都顺利合并了,但结果却不太正常。经过仔细检查发现是每个文件头的@charset=utf-8导致了这个问题。合并后,所有的文件内容都被引用到一起,所以造成了合并后的文件中“@charset=utf8”有好几个,但是为了保证文件是按utf-8格式被加载于是保留了最上面的@charset=utf8,其余的都删除了。OK,这时候所有的流量器都正常了。
结果第二天,老板过来说,在IPAD下不正常,于是继续排查,最终发现还是这个@charset=utf8的原因。前面说过,我们只保留了第一个文件的UTF8的判断,其他的都清空了,那为什么还会出错呢?经过测试,发现@charset=utf-8只能在第一行才有效,在其他行时,safari不认,而EClientScript在压缩文件后,会在文件第一行加上这个文件对应实际文件的地址,于是就让@charset=utf8到了第二行。所以IPAD上面显示就不太正常了。。
接下来就转载了:CSS通用元素选择器的都市流言,原文来自:http://shawphy.com/2010/11/css-universal-selector.html
本文尚未有测试数据支持,以下结论仅是根据现有情况的一种解释。
关于 * 这个选择器,一直有个疑惑,到底是否影响效率。在先前的观念中,这由于要匹配所有的元素,让每一个元素都带上这个属性,所以会影响页面的效率。但近来的思考,觉得这应该不会影响效率。为此还特地写过一篇博文,里边提到了这点:真的还需要reset.css么?
而这篇文章中我打算着重阐述为何 * 这个选择器不会影响效率。
上周六去参加了 web标准化交流会,席间 winter 从浏览器(webkit)的角度分享了关于页面渲染的过程。其PPT也可以在前面的链接中下载到。
其中一个很重要的过程是,当页面载入过程中,CSS 和 HTML 是并行下载的。并且通常CSS是在HEAD中引入的,并且体积不如HTML大,所以CSS会先下载完。下载的过程中浏览器就已经开始对CSS中的规则进行 索引,也就是已经确定哪一个元素呈现的样式是如何的了。同时,浏览器根据HTML构建出的DOM树,其中的每一个元素会直接去CSS规则索引中去比对,构 建出渲染树。这个过程都是并行的,并且CSS规则是进行了索引的,因此速度非常的快速。
那么我们看看CSS规则的来源主要有2个,一是浏览器内置的元素样式,Firefox 3.x版是放在目录下的res文件夹内,4.0版和Chrome中没找到(这里是我的主观臆断不太可靠,大家自行辨别),另一个就是页面提供的。根据查看 放在 res 文件夹下的 CSS 文件就可以得知,就是是什么样式都不写,已经为每一个HTML元素设定好了基本样式了。
那么看看我们所忌讳的事情,不用*{margin:0;padding:0},而是使用
CSS代码
- html, body, div, span, applet, object, iframe,
- h1, h2, h3, h4, h5, h6, p, blockquote, pre,
- a, abbr, acronym, address, big, cite, code,
- del, dfn, em, font, img, ins, kbd, q, s, samp,
- small, strike, strong, sub, sup, tt, var,
- b, u, i, center,
- dl, dt, dd, ol, ul, li,
- fieldset, form, label, legend,
- table, caption, tbody, tfoot, thead, tr, th, td {
- margin: 0;
- padding: 0;
- }
看看这一大坨东西啊,难道不是跟上面的 * 选择器一个用途么?对每个元素(至少是常用元素),添加样式。其实作用是一样的,并且就算没有这一坨,浏览器内置样式也在对每个元素设置样式。之后 HTML 文件中的每一个元素,可以很容易找到自己应当呈现的样式了。
那么,对于之后添加的,会不会有性能影响呢?也不会,由于CSS规则已经确定并索引了,所以今后增加的元素也不过就是简单比对一下而已,不会多走一步的。
所以,由此得出结论,只要有需要,大胆的使用 * 吧,他不会给你从性能上增加额外的麻烦。
最后补两个前端优化小知识:
1,由于CSS规则和HTML是并行载入的,因此把CSS放在HEAD中是非常有必要的。
2,少使用 :last-child 。因为这个选择器无法索引起来,必须等DOM构件完,才能知道他是不是父元素中最后的那个 元素。这种就非常慢了,慎用。
----EOF--
注:文中@charset=utf-8我格式可能写的不对,只是表达一个意思,因为我没有dreamwaver,而所说DW在写CSS的时候,默认会在第一行加上这个玩意。。。
Tags: css, charset, eclientscript, yii
PHP | 评论:0
| 阅读:20104
Submitted by gouki on 2010, December 2, 9:50 AM
有朋友在sinaapp上开了个项目,是快盘提取文件,支持任意后缀名,因为这样就可以方便用户转贴到任意勃客或者论坛之类的了
所以我也就写了一个类似的。。还没有做rewrite。。
可以尝试一下:
http://labs.neatstudio.com/115.php?code=t99f5a9181&type=
这个type可以是tel,cnc,union,udan,对应了电信,网通,联通,优蛋(优蛋只能生成链接并帮你触发点击)
如果网上啥数据也没有,那就只能生成U蛋链接喽。
想法创意来自:http://kill.sinaapp.com/
Tags: 115
PHP | 评论:1
| 阅读:17190
Submitted by gouki on 2010, November 7, 10:28 PM
这,应该算是冯大辉的牢骚吧?事实上我们也都知道,IE6真的不靠谱,不给力,但。。。有时候真的不能不用。
冯大辉这么说,从国内 IE 6 的市场份额说开去,
网络大战,眼球无数,口水横飞,最受伤的仍然是那些可怜的用户。刚才偶然想到另一个和大战中的各方有点关系的话题:IE 6 浏览器在中国市场份额为何仍然高居不下?
作为一个十余年前发布的软件产品,作为无数互联网行业同仁最头疼的浏览器,无论从哪个方面看,IE 6 都应该推出历史舞台。但是,从各方面数据来看,在国内仍有接近半数的用户在用这个千疮百孔的浏览器,这不是怪事吗? 有知就里的朋友会觉得这不是一个多么复杂的问题,业界同仁都会给出这样一个答案:因为大量定制的盗版 Windows 造成这一局面。这是个关键因素,抛开那个盗版利益链不谈,我们继续提问,为何国内这些安全厂商不协力将这一境况改变?
如果"尊重用户的利益"(refer), 那么自居"卫士"的那个公司应该努力把这事儿解决掉,而不是搞什么"开机速度大比拼"。按理说,这事儿应该很容易,那个软件管家整天给用户提示一些没什么 新功能的"新版本"软件,给用户多提示下升级真的更加安全的 IE 8 应该不难吧? 当然不厌其烦去提示用户升级一下 IE,不推广自己的什么所谓的"安全浏览器"肯定是一件有损自身商业的事情,但这样会真的赢得口碑和尊重。
同样,那个靠 IM 独霸一方的公司,既然为"一天就能扫描出170万个木马"(refer)而担心用户安全的问题,那么帮用户把大门修好,你们是不是也很省心?当然,这样会有损你们自家生产的浏览器市场。但长期来看,那些损失的会弥补回来。
那个国内最大的电子商务公司,那家国内最大的第三方支付企业,与其忙活着开发"自己"(其实也都是用了别人的内核)的浏览器,还不如去协助用户用到更好一点的浏览器,提升用户的安全,自己就会减少麻烦。这不是帮别人,这是在帮助自己。
或许,这些想法都太幼稚了,因为一个有缺陷的浏览器是是一个植入梦境的机会,是生财之道。谁控制浏览器,谁控制 Web 入口;谁控制入口,谁就能源源不断得获取利益。
中国用户之所以 IE 6 的份额高举不下,其实就是和这些利益链条有关系。说白了,IE 6 这个堪称世界上最不安全的浏览器,就好比一个操作系统系统后门,要想在我等可怜的用户的操作系统上来去自如多半要依赖它。如果中国用户统一升级到 IE 最新版本或是其它如 Firefox、Chrome 等浏览器,恐怕很多号称做"安全"产品的公司都要关门大吉,你说,他们能干么?
对于国内的所有网站来说,解决 IE 6 的问题,就是在帮网站提高效率;对于每一个技术人来说,解决 IE 6 的问题,就是提升我们的生产力;对于每一个用户来说,解决 IE 6 的问题,就是给自己一个掌控自身权益的机会。
这才有点"低碳、环保"的意味在里面。
--EOF--
有时候想想是谁在坚持着IE6?难道不又是那些我们认为大型的公司嘛?正是他们养成了那些普通用户的习惯,只是现在又要求他们改掉,但对那些不太熟悉电脑的人来说,这个难度不低啊。我是习惯了firefox了。。不过,最近也准备折腾chrome,因为听说开发插件很方便。而firefox的插件则有点痛苦。。。
PHP | 评论:1
| 阅读:16951
Submitted by gouki on 2010, November 5, 10:14 PM
以前这个开放平台就存在,但一直没有关注过。只是这次好象开始支持PHP了。而且。。。
腾讯社区开放平台是基于QQ空间、朋友社区(QQ校友)两大社交网络的开放平台。至今官方提供了一系列的开放接口(Open API)和开发工具包(SDK),开发者可以通过Open API获取登录用户信息、用户签名信息以及好友关系链信息等。已上线的应用还可以调用支付和监控接口,实现支付功能,查看应用实时运维数据。这句话来自:http://opensns.qq.com/apps/wiki
API接口地址在这里:http://wiki.opensns.qq.com/wiki/SDK%E4%B8%8B%E8%BD%BD#1_PHP_SDK,也可以在此页面下载,文件名中pengyou.class.php,有兴趣的可以看一下。我是下载了,有空的时候折腾折腾。
Tags: qq, tencent, api
PHP | 评论:0
| 阅读:23194
Submitted by gouki on 2010, October 27, 9:09 AM
在商城程序中,不可避免的会给商城的用户展示自己的QQ,于是QQ在线状态就好象比较重要了,因为光显示一个号码并不能使得用户直接与商家交流,所幸QQ提供了这样的功能。
如果你是个人用户,那么:http://wp.qq.com/就可以生成自己的在线状态,比如我就这样显示了一下:
但如果你是企业QQ,上面的功能就不能用了,因为企业QQ的状态与其他的不太一样,他的在线状态生成在这里:http://b.qq.com/wp/
但目前从网上找的资料来看,好象没有更好的办法来判断用户是否是企业QQ,因此只能找了一些相关资料:
XML/HTML代码
- 企业QQ是按您所购买的工号数,来收取相应的年费的。我们按工号数量划分为3个套餐,您可以根据自己的需要,购买我们的产品。同时我们会免费赠送一个尊贵的400/800开头的10位企业QQ号码,此企业QQ号码,可以与您的热线400/800电话一致,从而尽显您企业的专业形象。具体经销商联系方式,请参见“企业QQ经销售联系方式”。
所以只能现在这样判断:10位的数字,前三位是400或者800:
PHP代码
- <?php
- $qqnumber = '';
- $bizPre = substr($qqnumber,0,3);
- if( ($bizPre == '400' || $bizPre == '800' ) && strlen($qqnumber) == '10' ){
-
- }
-
于是,就可以根据QQ号显示不同的在线状态了
Tags: qq, 在线状态
PHP | 评论:1
| 阅读:26606