本篇文章给大家谈谈HTML–包含的原因是什么,以及html包括的知识点,同时本文还将给你拓展asp.net-mvc–DisplayFor忽略html属性的原因是什么?、c–工会会员活跃的原因是什么?、
本篇文章给大家谈谈HTML – 包含的原因是什么,以及html包括的知识点,同时本文还将给你拓展asp.net-mvc – DisplayFor忽略html属性的原因是什么?、c – 工会会员活跃的原因是什么?、count(*)很慢的原因是什么、css失效的原因是什么等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:- HTML – 包含的原因是什么(html包括)
- asp.net-mvc – DisplayFor忽略html属性的原因是什么?
- c – 工会会员活跃的原因是什么?
- count(*)很慢的原因是什么
- css失效的原因是什么
HTML – 包含的原因是什么(html包括)
<style amp-boilerplate>body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}</style><noscript><style amp-boilerplate>body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}</style></noscript>
任何人都可以知道在AMP页面中包含上述css代码的原因吗?
和
我可以写< style amp-boilerplate =“amp-boilerplate”>而不是<样式amp-boilerplate> ?
解决方法
Can anyone kNow the reason for including above css code in AMP pages ?
此代码本身用于隐藏页面,直到完全呈现为止,然后将其淡入以提供更高的感知性能指标.如果您询问标签本身,那么Google将在内部使用< style amp-boilerplate>来命令解析DOM和CSSOM.
Can I write < style amp-boilerplate=”amp-boilerplate”> instead of < style amp-boilerplate> ?
是的,您可以将标记名称作为标记的值,它仍将通过AMP验证.但是,建议不要这样做,因为AMP规范可能随时发生变化,这可能不再有效.
我已通过在实时页面上使用AMP验证工具并在内部同时使用NodeJS验证器和Python验证器来确认这一点.
asp.net-mvc – DisplayFor忽略html属性的原因是什么?
@Html.displayFor(m => m.someField,new { htmlAttributes = "class = someclass" })
该字段在渲染时不包含类someclass.我认为它是因为它只是写出文本而没有span元素或任何设置类的东西.
我真的想设置id,以便稍后我可以通过js更新它.
解决方法
此评论有效
displayFor(),does not have any HTML attributes,thus u can’t do it.
Instead there are other ways of rendering the data inside a DIV/SPAN
with ur class.. – Nick Oct 16 at 11:15
此评论也有效
I think it should be @Html.displayFor(m => m.someField,new {@class=”someClass”}) – Michel Oct 16 at 11:30
c – 工会会员活跃的原因是什么?
我已经阅读了C 14标准的第9.5章(关于工会的第9.5章),但我还没有找到一个明确的答案,说明工会成员的活动是什么.
有一个说明:
In general,one must use explicit destructor calls and placement new
operators to change the active member of a union.
例如,
union U { int i; short s; } u; new(&u.i) int(42);
好的,放置新的更改活动成员,很明显.但是在使用具有普通构造函数的类型时,我们通常不使用placement new.
operator =是否在没有UB的情况下更改活动成员?
u.i = 42;
这里,operator =调用未构造的对象.它定义明确吗?
那这个呢?
struct A { int i0; int i1; }; union U { A a; short s; } u;
是什么让你成为你的活跃成员?设置i0和&我足够吗?
u.a.i0 = 42; u.a.i1 = 99;
如果我写的怎么办:
u.a.i0 = 42; // supposedly this doesn't change the active member to a,as i1 isn't set int x = u.a.i0; // is it fine to read from a.i0? a is not an active member supposedly
在u.a.i0 = 42;之后,活动成员不会改为a(我认为),所以UB要做int x = u.a.i0 ;?
C 17是否改进了活跃成员的描述?
解决方法
[class.union]/5 When the left operand of an assignment operator involves a member access expression (8.2.5) that nominates a union member,it may begin the lifetime of that union member,as described below. For an expression
E
,
define the setS(E)
of subexpressions ofE
as follows:(5.1) — If
E
is of the formA.B
,S(E)
contains the elements ofS(A)
,and also containsA.B
ifB
names a union member of a non-class,non-array type,or of a class type with a trivial default constructor that is not deleted,or an array of such types.(5.2) — If
E
is of the formA[B]
and is interpreted as a built-in array subscripting operator,S(E)
isS(A)
ifA
is of array type,S(B)
ifB
is of array type,and empty otherwise.(5.3) — Otherwise,
S(E)
is empty.In an assignment expression of the form
E1 = E2
that uses either the built-in assignment operator (8.18) or a trivial assignment operator (15.8),for each elementX
ofS(E1)
,if modification ofX
would have undefined behavior under 6.8,an object of the type ofX
is implicitly created in the nominated storage; no initialization is performed and the beginning of its lifetime is sequenced after the value computation of the left and right operands and before the assignment. [ Note: This ends the lifetime of the prevIoUsly-active member of the union,if any (6.8). —end note ]
(接着是一个很长的例子,我懒得格式化,但你可以看到here.)
count(*)很慢的原因是什么
这篇文章主要介绍“count(*)很慢的原因是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“count(*)很慢的原因是什么”文章能帮助大家解决问题。
以下所有的内容均是基于,mysql 5.7 + InnoDB引擎
, 进行的分析。
拓展:
MyISAM 如果没有查询条件,只是简单的统计表中数据总数,将会返回的超快,因为service层中获取到表信息中的总行数是准确的,而InnoDB只是一个估值。
实例
废话不多说,先看一个例子。
以下是一张表数据量有100w,表中字段相对较短,整体数据量不算大。
CREATE TABLE `hospital_statistics_data` (
`pk_id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`id` varchar(36) COLLATE utf8mb4_general_ci NOT NULL COMMENT '外键',
`hospital_code` varchar(36) COLLATE utf8mb4_general_ci NOT NULL COMMENT '医院编码',
`biz_type` tinyint NOT NULL COMMENT '1服务流程 2管理效果',
`item_code` varchar(36) CHaraCTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '考核项目编码',
`item_name` varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '考核项目名称',
`item_value` varchar(36) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '考核结果',
`is_deleted` tinyint DEFAULT NULL COMMENT '是否删除 0否 1是',
`gmt_created` datetime DEFAULT NULL COMMENT '创建时间',
`gmt_modified` datetime DEFAULT NULL COMMENT 'gmt_modified',
`gmt_deleted` datetime(3) DEFAULT '9999-12-31 23:59:59.000' COMMENT '删除时间',
PRIMARY KEY (`pk_id`)
) DEFAULT CHARSET=utf8mb4 COMMENT='医院统计数据';
此表初始状态只有一个聚簇索引
。
以下分不同索引情况,看一下COUNT(*)的执行计划。
1)在只有一个聚簇索引的情况下看一下执行计划。
EXPLAIN select COUNT(*) from hospital_statistics_data;
结果:
这里只关注以下几个属性。
type: 这里显示index,说明使用了索引。
key:PRIMARY使用了主键索引。
key_len: 索引长度8字节。
这里有很关键的一点:count(*)也会走索引
,在当前情况下使用了聚簇索引。
好,再往下看。
2)存在一个非聚簇索引(二级索引)
给表添加一个hospital_code索引。
alter table hospital_statistics_data add index idx_hospital_code(hospital_code)
此时表中存在2个索引,主键
和 hospital_code
。
同样的,再执行一下:
EXPLAIN select COUNT(*) from hospital_statistics_data;
结果:
同样的,看一下 type、key和key_len三个字段。
是不是觉得有点“神奇”。
为何索引变成刚添加的idx_hospital_code
了。
先别急着想结论,再看下面一种情况。
3)存在两个非聚簇索引(二级索引)
在上面的基础上,再添加一个二级索引。
alter table hospital_statistics_data add index idx_biz_type(biz_type)
此时表中存在3个索引,主键 、hospital_code 和 biz_type。
同样的,执行一下:
EXPLAIN select COUNT(*) from hospital_statistics_data;
结果:
是不是更困惑了,索引又..又又...变了.
变成新添加的idx_biz_type。
先不说为何会产生以上的变化,继续往下分析。
在以上3个索引的基础上,分别看一下,count(1)
、count(id)
、count(index)
、count(无索引)
这4种情况,与count(*)的执行计划有何区别。
count(1)
count(id) 对于样例表来说是,主键是pk_id
count(index)
这里选取biz_type索引字段。
count(无索引)
小结:
count(index) 会使用当前index指定的索引。
count(无索引) 是全表扫描,未走索引。
count(1) , count(*), count(id) 一样都会选择idx_biz_type索引
必要知识点
MysqL 分为
service层
和引擎层
。所有的sql在执行前会经过service层的优化,优化分为很多类型,简单的来说可分为
成本
和规则
。执行计划所反映的是service层经过sql优化后,可能的执行过程。并非绝对(免得有些人说我只看执行计划过于片面)。
绝大多数情况执行计划是可信的
。索引类型分为
聚簇索引
和非聚簇索引(二级索引)
。其中数据都是挂在聚簇索引上的,非聚簇索引上只是记录的主键id。抛开数据内存,只谈数据量,都是扯淡。什么500w就是极限,什么2个表以上的join都需要优化了,什么is null不会走索引等,纯纯的放屁。
相信一点,编写MysqL代码的人比,看此文章的大部分人都要优秀。他们会尽可能在执行前,对我这样菜逼写的乱七八糟的sql进行优化。
原因分析
其实原因非常非常简单,上面也说了,service层会基于成本进行优化。
并且,正常情况下,非聚簇索引
所占有的内存要远远小于聚簇索引
。所以问题来了,如果你是MysqL的开发人员,你在执行count(*)查询的时候会使用那个索引?
我相信正常人都会使用非聚簇索引
。
那如果存在2个甚至多个非聚簇索引又该如何选择呢?
那肯定选择最短的,占用内存最小的一个呀,在回头看看上面的实例,还迷惑吗。
同样都是非聚簇索引。idx_hospital_code
的len
是146
字节;而idx_biz_type
的len
只有1
。那还要选吗?
那为何count(*)走了索引,却还是很慢呢?
这里要明确一点,索引只是提升效率的一种方式,但不能完全的解决效率问题。count(*)有一个明显的缺陷,就是它要计算总数,那就意味着要遍历所有符合条件的数据,相当于一个计数器,在数据量足够大的情况下,即使使用非聚簇索引也无法优化太多。
官方文档:
InnoDBhandlesSELECT COUNT(*)andSELECT COUNT(1)operations in the same way. There is no performance difference.
简单的来说就是,InnoDB下 count(*) 等价于 count(1)
既然会自动走索引,那么上面那个所谓的速度排序还觉得对吗? count(*)的性能跟数据量有很大的关系,此外最好有一个字段长度较短的二级索引。
拓展:
另外,多说一下,关于网上说的那些索引失效的情况,大多都是片面的,我这里只说一点。量变才能引起质变,索引的失效取决于你圈定数据的范围,若你圈定的数据量占整体数据量的比例过高,则会放弃使用索引,反之则会优先使用索引。但是此规则并不是完美的,有时候可能与你预期的不同,也可以通过一些技巧强制使用索引,但这种方式少用。
举个栗子:
通过上面这个表hospital_statistics_data
,我进行了如下查询:
select * from hospital_statistics_data where hospital_code is not null;
此时这个sql会使用到hospital_code
的索引吗?
这里也不卖关子了,若hospital_code只有很少一部分数据是null
值,那么将不会走索引,反之则走索引。
原因就2个字:回表
。
好比去买砂糖橘,如果你只买几斤,那么你随便挑筐里面好的就行。但是如果你要买一筐,我相信老板不会让你在里面一个个挑,而是一次给你一整筐,当然大家都不傻,都知道筐里里面肯定有那么几个坏果子。但是这样效率最高,而且对老板来说损失更小。
执行过程
1.首先在server层维护一个count变量
2.server层向InnoDB引擎要第一条记录
3.InnoDB找到第一条二级索引记录,并返回给server层(注意:由于此时只是统计记录数量,所以并不需要回表)
4.由于COUNT函数的参数是*,MysqL会将*当作常数0处理。由于0并不是NULL,server层给count变量加1。
5.server层向InnoDB要下一条记录。
6.InnoDB通过二级索引记录的next_record属性找到下一条二级索引记录,并返回给server层。
7.server层继续给count变量加1。
8.重复上述过程,直到InnoDB向server层返回没记录可查的消息。
9.server层将最终的count变量的值发送到客户端。
关于“count(*)很慢的原因是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注小编行业资讯频道,小编每天都会为大家更新不同的知识点。
css失效的原因是什么
css失效的原因:1、div标签未关闭;2、不当的DOCTYPE声明;3、结尾斜线;4、要在JavaScript中覆盖CDATA标签;5、不良嵌套。
本教程操作环境:windows7系统、css3版,DELL G3电脑。
css失效的原因:
一、div 标签未关闭
这是版面设计失效的最常见原因之一。当我们了解到这是多少精致的版块设计失效的罪魁祸首时,总会大吃一惊。开启的div标签是最普遍的版块设计失误之一,也是最难诊断的失误之一。验证程序有时会指向错误的开启div标签,诊断时就像大海捞针一样麻烦。
二、不当的DOCTYPE声明
不声明DOCTYPE,或者在文件开始错误声明DOCTYPE,也是一个常见错误。根据一般经验,Strict DOCTYPE是大家追求的最高级验证。Strict validation表明你的网页能够在所有浏览器上都得到最佳展示。
三、结尾斜线
如果你的网站不能验证,很有可能是在代码的某个地方漏写了结尾斜线。我们很容易忽略结尾斜线之类的东西,特别是在image标签等元素中。
在严格的DOCTYPE中这是无效的。要在img标签结尾处加上“/”以解决此问题。
四、JavaScript
如果已经声明Strict DOCTYPE,就需要在JavaScript中覆盖CDATA标签。验证程序的这一方面难倒了很多程序员,因为网站倾向于为广告和追踪脚本使用嵌入的 JavaScript。
五、不良嵌套
嵌套就是元素里又包括元素,我们容易混淆嵌套元素的顺序。例如在div标签前启动strong标签,但又先关闭div标签。这可能不会改变版块布局,但却会使你的版块设计失效。
如果仍无法发现,建议用“开发者模式”/“调试模式”(F12打开)查看对应元素继承了哪些属性,是不是其他的样式覆盖了自己设置的样式。
相关学习推荐:css教程
关于HTML – 包含的原因是什么和html包括的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于asp.net-mvc – DisplayFor忽略html属性的原因是什么?、c – 工会会员活跃的原因是什么?、count(*)很慢的原因是什么、css失效的原因是什么等相关知识的信息别忘了在本站进行查找喔。
本文标签: