最近升级Wordpress的主题到twentyfifteen,清爽的界面看着果然高大上。然后问题来了,一直工作很好的分享工具JiaThis和uJian出问题了。找了客服问了下(自己太懒,不愿意debug),解决了JiaThis的问题,然后按照发现的问题的思路,顺便解决了uJian的问题。

JiaThis的分享按钮过小的问题

最开始的分享按钮是这样的

按钮很小

加上如下样式:

.jiathis_style img {
    max-width: 26px;
}

即可修复,变成

按钮正常

JiaThis的分享渠道面板

最开始的样式

无法展开

面板在鼠标放到按钮上的时候无法展开

加上如下样式:

.jiathis_style table{
    table-layout: auto;
}

使得表格的宽度计算方法恢复为默认的按内容来计算,样式就正常了

正常面板

uJian的展开样式

最开始是这样的扭曲

变形的uJian

加上和上面JiaThis的面板同样的样式之后

.jiathis_style table, #ujian-side table {
    table-layout: auto;
}

可以看的下去一点了

好一点的面板

再加上如下这段

#ujian-side a {
    box-sizing: content-box;
}

解决盒模型的计算方法

最终正常了:

效果? 看右侧的分享 ===============================>

所有的样式收集整理如下:

.jiathis_style img{ max-width:26px;}
.jiathis_style table,#ujian-side table{table-layout: auto;}
#ujian-side a{box-sizing: content-box;}

翻译自:http://learn.jquery.com/performance/optimize-selectors/

在越来越多的浏览器支持document.querySelectorAll()之后,使得查找DOM的压力从jQuery转移到浏览器,选择器的优化,已经没有以往那么重要。然而,仍然有一些小技巧要记住。

基于ID的选择器(ID-Based Selectors)

基于ID进行查找永远是最好的方法。

// 快速:
$( "#container div.robotarm" );
 
// 更加快速:
$( "#container" ).find( "div.robotarm" );

使用.find()的方法更快,因为第一个选择器是没法脱离Sizzle选择器引擎的处理 – 而只有一个ID不包含其他类型的选择器,是直接由document.getElementById来处理的,这个是原生方法,超级快

特异性(Specificity)

把更特异的选择器放右侧,更简单的选择器放左侧。(Sizzle选择器在某些情况下,是会从右往左进行查找,这个时候,右侧的特异性,使得查找出来的结果集很小,然后再往上遍历查找符合条件的父级,效率就会很高 — 编者译)

// 没优化的:
$( "div.data .gonzalez" );
 
// 优化了的:
$( ".data td.gonzalez" );

避免过度特异性(Avoid Excessive Specificity)

$( ".data table.attendees td.gonzalez" );
 
// 更好的: 如果可以尽量去除中间的多余的条件
$( ".data td.gonzalez" );

一个轻简的DOM有助于提升选择器的性能(原文是:A “flatter” DOM also helps improve selector performance,不太好翻译),因为这样可以在查找dom的时候,减少需要检索的层级

避免全部选择器(Avoid the Universal Selector)

如果明确的或隐晦的的全部选择器(结果如果是会匹配绝大多数的DOM),这样的选择器会非常的缓慢

$( ".buttons > *" ); // 非常耗性能
$( ".buttons" ).children(); // 更好的方式
 
$( ".category :radio" ); // 隐晦的全部选择器
$( ".category *:radio" ); // 和上面的效果一样,只是更加明确
$( ".category input:radio" ); // 更好的写法

今天要帮人实现一个可以在窗口上飘来飘去的广告,虽然对这类漂浮移动的广告很不感冒,但是写还是得写的。

原理知道,但是自己写,总是麻烦,就去网上找了个demo,然后再基于那个demo做了点修改。

话不多说,上代码:




    
    Document
    


效果看这里:

主要的修改有如下几点:

  • requestAnimationFrame — 使得在高级浏览器下的性能呢更好
  • document.documentElement.clientHeight/clientWidth — W3C标准的获取窗口尺寸的方法
  • 数据缓存 把部分固定不变的变量移动到动画主函数之外,避免多余的计算消耗和DOM查找