男厕所便槽危机

以下讨论男公共厕所中的地形环境、礼仪习俗、宗教信仰等等。并不适用于我仅几次造访的女厕所。

引发此番思考的是数周之前看过的以一个伪科学论 文:http://blag.xkcd.com/2009/09/02/urinal-protocol-vulnerability/
在此简要 概括下此文内容,此文主要设想了如下情况:
当一大腹便便、急切希望释放压力的男士进入男厕时,无论人种学或文化背景的因素,都会做出一个相当国际 性的判断,即尽量选择一个不与被使用中的便槽相邻的便槽(不考虑偷窥癖或暴露癖者)。那么假设一共有5个便槽:
图片
一字排开的便槽原 则上(原则即上文所诉的那个,可称Catch 22)被最大限度的利用了,当然剩下两个在紧急情况下还是可以使用的。
如果一共是7个便槽,可能造 成如下局面:
图片
被剩下的那4个 便槽都处于尴尬的情况。
图片
8个便槽的的情 况好些,至少有一半被使用了。
1-10个便槽的最大使用人数(在遵守男厕所第22条行为准则时)和使用率如下:
1,1,1
2,1,0.5
3,2,0.66666667
4,2,0.5
5,3,0.6
6,3,0.5
7,3,0.42857143
8,4,0.5
9,5,0.55555556
10,5,0.5
可 见3、5、9个便槽是不错的选择。

此番思考的目的并不是纠结于应该安装几个便槽之类的,显然对于便槽问题的解决方法应该是拉开便槽距离、 加入隔板,或者索性共用便槽(雾)。

然后还有一个关于某些纯洁思想作祟的问题:
前日因为某些原因震惊的了解到YUI是建议把外联 js的script标签放在html闭合之后的,这是个相当奇怪的做法。
一直以来出于习惯原因我一直是把外联script尽可能地放在head 里,而且尽量不用inline的script形式,这是一个纯洁的做法,我对此深信不疑,正如第22条便槽使用准则那样。
于是在YDN上搜索了一 下,把script移到底部的做法出处是Steve Souders,见:http://developer.yahoo.net/blog/archives/2007/07 /high_performanc_5.html与http://developer.yahoo.com/performance /rules.html#js_bottom
可见把外联script移到底部主要有两点
一个是等待DOM树创建完毕,但此点来说把 script移到底部并不是解决方法,还是应该继续侦听DOMContentLoaded事件(在IE可以用测试 document.documentElement.doScroll方法是否抛出错误来暂时性替代)。另外在script标签中加入 defer=”defer”属性是IE的私有解决方法(现在FF3.5也支持了:https://developer.mozilla.org/en /Firefox_3.5_for_developers),在此强烈不予推荐,而应继续使用$(document).ready()、 YAHOO.util.Event.onDOMReady()等。
第二个原因就是对于外联脚本的下载方面的考虑,传说中当一个外联的js或者 css被下载时,浏览器不会去下载其他任何东西,甚至其他域名下的东西也不会。
来看一下顺序上的规则吧:
执行上来说inline脚本会先 于外联脚本执行,虽然inline脚本deferred的话不会影响加载,但会影响解析和渲染。
html本身加载完毕之后,从上倒下,从head 到body加载各种资源,js和css总在图片之前,于是将css放在head之内就可以在body被渲染之前已经定义好了css规则,于是css就应该 被放在head内。而将js移到底部的原因就是在js之前先完成其他东西加载,才不会被js的下载阻断,而在html闭合之后放就是在dom树种所有东西 都已加载完毕之后再载入js,但同时html闭合之后并不表示浏览器已经将解析好的东西创建出了DOM树,于是还是应该像第一点说的依然要defer脚 本。

但这里还有几个洁癖和实用主义上的问题:
1、html闭合只有又出现script标签,这无疑是破坏xml结构的。
2、 类似google统计的
var gaJsHost = ((“https:” == document.location.protocol) ? “https://ssl.” : “http://www.”);
document.write(unescape(“%3Cscript src='” + gaJsHost + “google-analytics.com/ga.js’ type=’text/javascript’%3E%3C/script%3E”));
因为使用到了document.write出一个 script,另外由于这是一个inline脚本,所以最好放在</body>最后出现之前的位置。
3、不怕破坏xml结构的话,毫 无疑问,可以把外联js都放在</html>之后。
4、目前我只能接受把script放在body最后出现之前的位置,这样能省去一 点点麻烦,但是仍应该继续坚持使用$(document).ready()、YAHOO.util.Event.onDOMReady()等来进行 defer。

关于类似便槽使用规则或script标签位置这类问题,总结就是:
事关洁癖,不可大意。

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*

You may use these HTML tags and attributes <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>