1 | /** |
1 | /** |
1 | function getData() { |
1 | .nowrap { |
我选择重写分页类的相关方法
在app目录下建立Bootstrap.php文件:
1 | <?php |
将自定义的分类绑定到容器Provider定义文件内provider.php即可(tp6自定义分类设置,其他版本请查阅相关文档)
1 | return [ |
在js中使用parseInt
转换浮点数总有些时候会给你意想不到的惊喜,例如:
1 | parseInt(0.0000005); // => 5 |
解决办法:
使用Math.floor
代替parseInt
1 | Math.floor(0.0000005); // => 0 |
让我们再次看一下 parseInt(numericalString) 第一个参数的作用:如果它不是字符串,则将其转换为字符串,然后进行解析,并返回解析后的整数。
这可能是第一个线索。
然后让我们尝试将浮点数手动转换为字符串表示形式:
1
2
3
4
5
6
7
8 String(0.5); // => '0.5'
String(0.05); // => '0.05'
String(0.005); // => '0.05'
String(0.0005); // => '0.005'
String(0.00005); // => '0.00005'
String(0.000005); // => '0.000005'
String(0.0000005); // => '5e-7'
显式转换为字符串的String(0.0000005)行为与其他浮点数不同:它是指数表示法的字符串表示形式!
第二个线索,当采用指数表示法解析为整数时,您将得到数字5:
1
2
3
4
5 parseInt(0.0000005); // => 5
// 类似于
parseInt(5e-7); // => 5
// 类似于
parseInt('5e-7'); // => 5
parseInt(‘5e-7’)考虑到第一个数字’5’,但跳过’e-7’。
谜团已揭开!因为parseInt()总是将其第一个参数转换为字符串,所以小于10 -6的浮点数将以指数表示法编写。然后parseInt()从float的指数表示法中提取整数!
使用方法就是把它放在select查询语句的前面。
简单的看结果中的type类型就可以。如果它是all,那说明这条查询语句是全表扫描,并没有使用到索引。
key为查询使用到的索引
id
列数字越大越先执行,如果说数字一样大,那么就从上往下依次执行,id列为null的就表是这是一个结果集,不需要使用它来进行查询。
select_type
列常见的有:
table
显示的查询表名,如果查询使用了别名,那么这里显示的是别名,如果不涉及对数据表的操作,那么这显示为null,如果显示为尖括号括起来的
type
依次从好到差:system,const,eq_ref,ref,fulltext,ref_or_null,unique_subquery,index_subquery,range,index_merge,index,ALL,除了all之外,其他的type都可以使用到索引,除了index_merge之外,其他的type只可以用到一个索引
possible_keys
查询可能使用到的索引都会在这里列出来
key
查询真正使用到的索引,select_type为index_merge时,这里可能出现两个以上的索引,其他的select_type这里只会出现一个。
key_len
用于处理查询的索引长度,如果是单列索引,那就整个索引长度算进去,如果是多列索引,那么查询不一定都能使用到所有的列,具体使用到了多少个列的索引,这里就会计算进去,没有使用到的列,这里不会计算进去。留意下这个列的值,算一下你的多列索引总长度就知道有没有使用到所有的列了。要注意,mysql的ICP特性使用到的索引不会计入其中。另外,key_len只计算where条件用到的索引长度,而排序和分组就算用到了索引,也不会计算到key_len中。
ref
如果是使用的常数等值查询,这里会显示const,如果是连接查询,被驱动表的执行计划这里会显示驱动表的关联字段,如果是条件使用了表达式或者函数,或者条件列发生了内部隐式转换,这里可能显示为func
rows
这里是执行计划中估算的扫描行数,不是精确值
extra
这个列可以显示的信息非常多,有几十种,常用的有
除了这些之外,还有很多查询数据字典库,执行计划过程中就发现不可能存在结果的一些提示信息
在测试一个 group by 的sql查询语句时出现了如下的错误
1 | SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'database.table.column' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by |
这种错误是由于mysql高于5.7的版本默认的sql配置是sql_mode="ONLY_FULL_GROUP_BY"
,这个配置严格执行了”SQL92标准”。
此标准下,一个字段没有在target list(查询结果列/目标列表)和group by字段中同时出现,或者是聚合函数的值的话,那么这条sql查询是被mysql认为非法的
解决办法:
方案一:修改sql语句
方案二:
在数据库配置在[mysqld]后面添加代码:
1
2
3 [mysqld]
...
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
1 | $('#fileInput-audio').on('change', function(e) { |
当查询数据时,查询使用的sql字段使用的类型与数据库中的字段类型不一致时,进行隐式转换依然能查出数据,但此时索引失效,将进行全表扫描
所以,
需避免mysql中自动进行隐式转换,避免导致性能问题
现在的剪贴板基本功能有限,有如下限制:
支持 Chrome 42+、Firefox 41+、IE 9+、Opera 29+、Safari 10+、Edge 12+,您还可以通过运行ClipboardJS.isSupported()
来检查是否支clipboard.js
示例代码:
复制文本卸载data-clipboard-text
属性内
1 | <button class="btn" data-clipboard-text="Just because you can doesn't mean you should — clipboard.js">Copy to clipboard</button> |
或通过data-clipboard-target
指定复制其他元素的文本
1 | <input id="foo" value="https://github.com/zenorocha/clipboard.js.git"> |
您可以定义一个data-clipboard-action
属性以指定是否要copy
或cut
内容。默认值为copy
1 | <textarea id="bar">Mussum ipsum cacilds...</textarea> |
事件监听:
1 | var clipboard = new ClipboardJS('.btn'); |
高级用法:
1
2
3
4
5
6
7
8
9 new ClipboardJS('.btn', {
target: function(trigger) {
return trigger.nextElementSibling; //动态设置target,则需要返回一个Node。
},
text: function(trigger) {
return trigger.getAttribute('aria-label'); //动态设置text,则将返回一个String。
},
container: document.getElementById('modal'), //Bootstrap Modals中使用或与其他任何更改焦点的库一起使用,您需要将focused元素设置为该container值。
});
另外,如果是单页应用程序,则可能需要更精确地管理DOM的生命周期。这是清理创建的事件和对象的方式。
1 | var clipboard = new ClipboardJS('.btn'); |
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true
世事无常