小编mjy*_*mjy的帖子

你如何解决memcached的键/值限制?

Memcached对密钥(250?)和值(大约1MB)有长度限制,以及一些(据我所知)对密钥没有很好定义的字符限制.在您看来,解决这些问题的最佳方法是什么?我使用Perl API Cache :: Memcached.

我目前所做的是,如果原始值太大("parts:<number>"),则为主键的值存储一个特殊字符串,在这种情况下,我使用名为1+ <main key>的键存储<number>部分,2 + <主键>等.对于某些情况,这似乎"好"(但很乱),对其他情况不太好,并且它有一些固有的问题,即某些部分可能随时丢失(因此空间被浪费)为了保持他人和时间浪费阅读他们).

至于关键限制,人们可能会实现散列并在值中存储完整的密钥(以解决冲突),但我还不需要这样做.

有没有人提出更优雅的方式,甚至是透明处理任意数据大小(和键值)的Perl API?有没有人黑客入侵memcached服务器以支持任意键/值?

memcached

15
推荐指数
2
解决办法
3万
查看次数

Makefile分享的任何有趣用途?

"make"不仅对构建编程项目很有用,而且在其他领域似乎还没有得到充分利用.

例如,许多shell脚本可以重写为Makefile,以允许独立的部分并行运行(使用"make -jXX")以保持所有CPU内核的繁忙,并将显式声明的依赖项作为额外的好处,以防万一考虑在shell脚本中重新排序带副作用的一些任务.

你有任何有趣的故事与make/Makefiles的不同寻常的用途分享?您是否使用其他实用程序作为廉价的作业调度程序?

bash scripting makefile gnu-make

12
推荐指数
1
解决办法
2137
查看次数

高效低效的CSS选择器(根据谷歌,PageSpeed ......)

在尝试减少网页的HTML大小时,我遇到了谷歌和PageSpeed Firefox Add-On的建议,这些建议使CSS选择器的效率降低(几乎)让我重新考虑这些变化:

http://code.google.com/intl/de-DE/speed/page-speed/docs/rendering.html#UseEfficientCSSSelectors

具体来说,后代选择器非常适合使用ID或CLASS属性选择整个块(例如DIV),然后保持其所有子元素不具有CLASS/ID属性.但是,如果应用规则的遍历顺序如Google所述,则不应使用它们:

后代选择器是低效的,因为对于与键匹配的每个元素,浏览器还必须遍历DOM树,评估每个祖先元素,直到找到匹配或到达根元素.密钥越不具体,需要评估的节点数就越多.

我非常怀疑浏览器使用这种低效的遍历顺序,当然它们只会处理与顶部选择器组件匹配的元素子树,即#foo span {...} 只应检查#foo下面的元素而不是每一个跨度.任何看过最近的浏览器代码的人都可以确认/否认这个吗?

第二个值得怀疑的建议是关于过度合格的选择者:

根据定义,ID选择器是唯一的.包含标记或类限定符只会添加需要不必要地评估的冗余信息.

如果ID选择器的定义是唯一的,为什么浏览器需要检查冗余信息?我知道他们这样做是因为,例如,

div#foo {color:black; } #foo {color:white; }

将导致a中的黑色文本<div id=foo>,但a)它不应该完成(需要W3C引用)和b)我不明白为什么它会导致对元素的简单O(1)检查明显变慢标签名称.

任何与现代浏览器源代码保持良好关系的人都可以对这些说法有所了解吗?由于大多数现代网站使用后代选择器(包括SO)并且它们具有明显的优势,我非常希望使用它们......

编辑:

我已经对生成的页面进行了一些实验,看起来浏览器对后代选择器的处理确实很可怜:

由(缩写)组成的页面:

#top a {text-decoration:none;}

#foo1 a.foo {color:red;}

#foo2 a.foo {color:red;}

[...重复10000次]

<body id = top>

<div> ... [嵌套50次] <a href=foo> bla </a> </ div> [...]

[前一行重复10000次]

(基本上是10000行,每行有50个嵌套的div,直到根节点和1个与10000匹配的选择器)

window.onload()使用Safari 5在2.2秒内加载和渲染(执行时间),使用Firefox 3.6.10只需不到10秒.

.foo从非应用规则中删除类选择器时,使用Safari 5时页面大约需要200秒,使用Firefox 3.6.10需要96秒.这说明了后代选择器的实现有多糟糕(在这种情况下,10000规则中的每一个都可能导致遍历直到#top,其中规则失败).

儿童选择器的票价如何?#foo > span > div > div > div > div > div a {color: red;}(也永远不会匹配,但强制遍历6个父节点)Safari 5需要27秒,Firefox 3.6.10需要31秒.

结论

后代和儿童选择器目前都在主流浏览器上吮吸.如果您关心速度,至少对于非常常见的HTML标记(例如,img,div等),最好将丑陋的class/id属性添加到所有样式标记中.

css css-selectors css3 pagespeed

10
推荐指数
1
解决办法
4438
查看次数

谁"发明"了i,j,k作为整数计数器变量名?

可能重复:
为什么我们在循环中使用i作为计数器

我已经使用了这些超过15年,但不能真正记住我是如何/在哪里养成这种习惯的.由于它真的很普遍,我很想知道谁最初建议/推荐使用这些名称作为整数循环计数器(是K&R书吗?).

naming-conventions loop-counter

4
推荐指数
2
解决办法
6610
查看次数