上次,我们看到了 平均网页 的样子,使用了来自约 800 万个网站 的数据。 这是一个很大的数据集,我们一直在继续筛选它。 我们这次又回来了,展示一些关于标记用法有趣的随机事实。
隐藏 DOM 元素
隐藏 DOM 元素有多种方法:完全隐藏、语义隐藏或视觉隐藏。
考虑到当前的做法和建议,请查看通过 HTML 或 CSS 隐藏内容的最常用方法的发现结果。
选择器 | 计数 |
---|---|
[aria-hidden] |
2,609,973 |
.hidden |
1,556,017 |
.hide |
1,389,540 |
.sr-only |
583,126 |
.visually-hidden |
136,635 |
.visuallyhidden |
116,269 |
.invisible |
113,473 |
[hidden] |
31,290 |
no-js HTML 类
当 Modernizr 等 JavaScript 库运行时,no-js
类将被删除,并被替换为 js
。 这样,您就可以根据浏览器中是否启用了 JavaScript 来应用不同的 CSS 规则。
我们发现共有 844,242 个元素的 HTML 类列表包含 no-js
字符串。 其中超过 92% 是 html
元素。
如果您想知道剩下的 8%,请查看前 10 名
元素 | 计数 |
---|---|
html |
782,613 |
body |
31,256 |
a |
17,833 |
div |
7,364 |
meta |
1,104 |
ul |
905 |
li |
789 |
nav |
768 |
span |
431 |
article |
263 |
noscript
HTML noscript
元素定义了一部分标记,该标记充当对禁用客户端脚本的用户或浏览器不支持客户端脚本的用户提供的备用内容。 客户端脚本语言通常是 JavaScript。
我们在 Google 前 20 名结果的 800 万个页面中发现了 3,536,247 个 noscript
元素。
AMP
Accelerated Mobile Pages (AMP) 是 Google 的一项计划,旨在加快移动网络的速度。 大多数出版商正在以 AMP 格式并行提供其内容。
为了让 Google 和其他平台知道它,您需要 将 AMP 页面和非 AMP 页面链接 起来。
在我们查看的 800 万个页面中,我们只找到了 1,944 个非 AMP 页面使用 rel=amphtml
引用了其 AMP 版本。
链接属性和值
href=”javascript:void(0)
我们找到了 2,002,716 个带有 href="javascript:void(0)"
的 a
元素。 无论您是编码按钮还是编码链接,您都 做错了。
href=”javascript:void(0)”
(a) 您使用错误的元素编码按钮
(b) 您使用错误的技术编码链接
– Heydon Pickering
target=_blank 带或不带 rel=noopener
我们分析的锚点中有 43,924,869 个使用 target="_blank"
而不与 rel="noopener"
结合使用。 在这种情况下,如果缺少 rel="noopener"
,您将让用户面临网络钓鱼攻击的风险,这被认为是安全漏洞。
锚点/链接 | 计数 |
---|---|
[target=_blank] |
43,924,869 |
[rel=noopener] |
40,756 |
[target=_blank][rel=noopener] |
35,604 |
MDN:
使用 target 时,您应该考虑添加 rel=”noopener noreferrer”,以避免利用 window.opener API。
Ben Halpern 和 Mathias Bynens 也写了一些关于这个问题的好文章,常见的建议是:不要使用 target=_blank
,除非您有充分的理由。
href=#top
似乎使用 #top
作为 href
值来将用户重定向到当前页面的顶部部分是一种常见的做法。 我们发现 377,486 个带有 href=#top
值的 a
元素。
lang
HTML lang 属性用于识别网页上文本内容的语言。 此信息有助于搜索引擎返回特定语言的结果,它也用于切换语言配置文件以提供正确口音和发音的屏幕阅读器。
在我们能够查看的 8,021,323 个页面中,有 5,368,133 个页面在 html 元素上使用 lang
属性。 约 70%!
div
平均网页大约有 71 个 div
。 这个数字是在 8,021,323 个页面中遇到了 576,067,185 个 div
元素后计算出来的。
header vs footer
2,358,071 个页面使用 header
元素,而 footer
被 2,363,665 个页面使用。 我们还发现,只有 2,117,448 个页面同时使用 header
和 footer
。
元素 | 计数 |
---|---|
footer |
2,363,665 |
header |
2,358,071 |
链接不是按钮
div
和 span
也不是。
元素 | 属性和值 | 计数 |
---|---|---|
a |
class=btn | 3,251,114 |
a |
class=button | 2,776,660 |
span |
class=button | 292,168 |
div |
class=button | 278,996 |
span |
class=btn | 202,054 |
div |
class=btn | 131,950 |
作为交换,以下是原生按钮的统计数据
选择器 | 计数 |
---|---|
button |
4,237,743 |
input[type=image] |
1,030,802 |
input[type=button] |
916,268 |
未指定类型的按钮
说到按钮,button
元素的 默认类型 为 submit
。 确保您始终指定按钮类型,因为我们发现大约 1,336,990 个缺少 type
属性的 button
元素。 这大约占野生状态下发现的 button
总数的 31.5%。
BEM 语法
如果你是一位 CSS 爱好者,你可能听说过 BEM,它是一种流行的 HTML 类命名约定。
了解 BEM 命名风格,其中包含包含双下划线或双破折号的字符串,我们可以推测只有 20,463 个元素使用 BEM 命名风格。
Bootstrap & Font Awesome
显然,我们只找到 1,711 个页面链接到包含 bootstrap[.min.].js|.css
的 CSS 或 JavaScript 资源。此外,看起来有 379 个页面链接到包含 font-awesome[.min.].css
的 CSS 资源。
我本来预计会更多。
WordPress
在我们分析的总数中,有 1,866,241 个页面包含 <meta name="generator" content="*WordPress*">
。我们只能假设还有更多使用 WordPress 的页面,但有些人选择从其来源中删除此元信息。
.clearfix VS .clear VS .cf
有很多命名风格用于这种众所周知的 CSS 工具,可以帮助清除浮动。以下是细分。
选择器 | 计数 |
---|---|
.clearfix |
19,573,521 |
.clear |
10,925,887 |
.cf |
1,102,698 |
Favicon
现代浏览器会自动异步获取 /favicon.ico
。因此,不要手动指定其根位置,只需将其放置在那里。除非出于某些原因,你更喜欢将它放在其他位置。
看起来有 354,024 家发布商仍在 head
中链接 /favicon.ico
。
空元素
是否关闭 空元素,这是一个问题。虽然 HTML 两种方式都可以,但建议不要关闭空元素。至少为了简洁起见。
元素 | 计数 |
---|---|
<img/> |
121,463,561 |
<br/> |
67,595,285 |
<link/> |
61,746,984 |
<meta/> |
46,688,572 |
<br> |
34,492,680 |
<input/> |
27,845,389 |
<img> |
17,844,667 |
<meta> |
15,133,457 |
<link> |
11,740,839 |
<input> |
7,231,827 |
<hr/> |
2,610,890 |
<hr> |
1,690,891 |
<param/> |
1,390,339 |
<area/> |
1,336,974 |
<area> |
1,025,183 |
<param> |
698,611 |
<source/> |
435,877 |
<base/> |
389,717 |
<embed/> |
304,954 |
<source> |
286,380 |
<wbr> |
237,606 |
<col/> |
151,757 |
<col> |
145,434 |
<base> |
105,688 |
<wbr/> |
77,922 |
<embed> |
56,610 |
<track/> |
376 |
<track> |
310 |
<keygen/> |
1 |
<keygen> |
– |
tabindex
在劫持 Tab 顺序时,使用 tabindex
来解决一些断开的 UI 元素,通常只会 将问题推到文档级别.
常见的建议是谨慎使用它。我们确实注意到 552,109 个 HTML 元素使用 tabindex
属性来覆盖使用键盘导航时的默认设置。
alt
的图像
缺少 在分析了这组数据后,这个永恒的 SEO 和可访问性问题似乎仍然很常见。在总共 139,308,228 张图像中,几乎有一半缺少 alt
属性或使用空值。
元素 | 计数 |
---|---|
img |
139,308,228 |
img alt="*" |
73,430,818 |
img alt="" |
32,603,650 |
img w/ missing alt |
33,273,760 |
自定义元素
不包括 Web Component 标记,以下是一些捏造的标记或自定义元素,与 MDN 的 HTML 元素参考 不同。
元素 | 计数 |
---|---|
<o:p> |
808,253 |
<g:plusone> |
273,166 |
<fb:like> |
111,806 |
<asp:label> |
76,501 |
<inline> |
53,026 |
<noindex> |
51,604 |
<icon> |
42,703 |
<block> |
34,167 |
<red> |
33,424 |
<ss> |
27,451 |
我们也找到了 21,403 个 h7
元素。
A11Y
如果你可以使用本机 HTML 元素 [HTML51] 或具有你所需语义和行为的属性(已内置),那么使用它,而不是重新利用一个元素并添加 ARIA 角色、状态或属性来使其可访问,请这样做。
地标角色
ARIA 地标角色 帮助使用辅助技术设备的用户浏览你的网站。
当 验证 文档时,你可能会看到此警告消息:“对于元素 header,banner 角色是不必要的”。这是因为像 iOS Safari 这样的浏览器目前不支持上述隐式映射,因此,目前最好继续添加这些地标角色,避免 HTML 验证警告。
关于 HTML5 隐式映射,以下是统计数据
元素 | 计数 |
---|---|
<nav role=navigation> |
1,144,750 |
<header role=banner> |
675,970 |
<footer role=contentinfo> |
613,454 |
<main role=main> |
236,484 |
<article role=article> |
129,845 |
<aside role=complementary> |
105,627 |
<section role=region> |
4,326 |
autoplay
视频和音频 autoplay
被认为是一种不好的做法,不仅影响可访问性,也影响可用性。
因此,不要自动播放,这将使所有用户满意。
查看来自 108,321 个 video
和 64,212 个 audio
元素的总数的调查结果。
元素 | 计数 |
---|---|
<video autoplay> |
31,653 |
<video autoplay=true> |
5,601 |
<audio autoplay> |
2,595 |
<audio autoplay=true> |
339 |
<video autoplay=false> |
79 |
<audio autoplay=false> |
22 |
maximum-scale
Maximum-scale 定义最大缩放比例,当设置为 maximum-scale=1
时,将不允许用户缩放页面。你不应该这样做,因为缩放是一个重要的可访问性功能,很多人使用它,因为它通过满足用户的需求提供了更好的体验。
来自 HTML 5.2 编辑草案,2016 年 10 月 4 日的警告:
作者不应抑制或限制用户调整文档大小的能力,因为这会导致可访问性和可用性问题。
但是,我们确实发现了 1,047,294 个使用maximum-scale=1
的网站和 87,169 个设置了user-scalable=no
值的网站。同时,326,658 个页面同时使用maximum-scale=1
和user-scalable=no
。
role=button
为button
设置role=button
是允许的,但不建议,因为button
已经具有role=button
作为默认隐式 ARIA 语义。尽管如此,我们确实发现了 26,360 个设置了role=button
的button
元素。
以下是其他值得注意的元素的细分,它们的默认行为被role=button
覆盖了
元素 | 计数 |
---|---|
<a role=button> |
577,905 |
<div role=button> |
85,565 |
<span role=button> |
21,466 |
<input role=button> |
8,286 |
关于如何正确地使事物可点击,MDN 做了一个总结
使用按钮角色标记链接时要小心。预期按钮使用空格键触发,而预期链接使用回车键触发。换句话说,当链接用作按钮时,仅添加 role=”button” 不足以。还需要添加一个监听空格键的键事件处理程序,以保持与原生按钮的一致性。
SVG
在 HTML 中包含 SVG 有多种方法,我们对它们进行了总结,发现总共有5,610,764 个 SVG 引用。
如何使用 SVG | % |
---|---|
在 HTML 中内联 SVG 代码 | 97.05% |
将 SVG 用作<img> |
2.88% |
将 SVG 用作<object> |
0.05% |
将 SVG 用作<embed> |
0.02% |
将 SVG 用作<iframe> |
– |
object、iframe 和 embed 方法的使用率低于 1%。
data-*=svg
有 17,920 个元素的data-*
属性值包含字符串svg
。大多数元素是<svg>
或<img>
。
前 5 个 data-* 值
http://www.w3.org/2000/svg
– 471hg-svg
– 127svg-siteline-facebook
– 114icon-facebook.svg
– 95twitter.svg
– 95
id*=svg
有 141,813 个元素的id
属性值包含字符串“svg”。大多数元素是<svg>
或其内部元素。
前 5 个 id 值
emotion-header-title-svg
– 16,281cicLeftBtnSVG
– 5,793cicPauseBtnSVG
– 5,793cicPlayBtnSVG
– 5,793cicRightBtnSVG
– 5,793
class*=svg
有 329,004 个元素的 class 属性值包含字符串“svg”。大多数元素是<svg>
、<i>
、<img>
或内部元素。
前 10 个 class 值
sqs-svg-icon--social
– 58,501nav_svg
– 29,826svg
– 28,604mk-svg-icon
– 24,193svg-icon
– 12,255icon_svg
– 7,956ico ico-svg ico-40-svg
– 3,980svg temp_no_id temp_no_img_src
– 3,794svgIcon-use
– 3,127svg temp_no_img_src
– 3,017
关于上面的前十名,也许值得一提的是,sqs-svg-icon--social
是 Squarespace 网站模板使用的 (类似 BEM 的) 命名约定。
currentColor
有 868,194 个 SVG 内部元素包含值currentColor
,主要用于fill
或stroke
属性。
前 10 个 SVG 元素
<symbol>
– 845,626<path>
– 12,834<g>
– 6,073<path>
– 3,207<circle>
– 1,885<svg>
– 1,061<polygon>
– 575<rect>
– 480<line>
– 412<use>
– 206
SVG 作为背景图片 (旅程!)
为了找出某个元素是否使用 SVG 作为背景图片,情况要复杂一些。我们的大部分数据只使用了 HTML 文档,但我们找到了一种解决方案来获取活动样式表。
在我们能够从 6,359,031 个域中收集数据的总数量中,84.5% (5,371,806) 使用带有 CSS 背景图片的 HTML 元素,而只有 1.2% (82,008) 个域使用至少一个 SVG 背景图片。
此外,在总共 92,388,615 个带有 CSS 背景图片的 HTML 元素中,0.5% (439,447) 使用了 SVG 背景图片。
过程
我们遍历了所有 HTML 文件,并将本地/相对 CSS 文件引用转换为绝对引用,例如<link rel="stylesheet" href="style.css">
变为<link rel="stylesheet" href="http://www.domain.com/style.css">
。
这花费了一些时间,因为我们对第一次运行的结果进行了一些抽样,发现结果不一致,不得不重新开始该过程。压缩文件大小为 65GB(解压缩后为 323GB),因此处理需要几天时间才能生成上述结果集并不奇怪。
尝试并放弃 PhantomJS
由于可以通过 CSS 应用背景图片,因此我们需要一些东西来呈现 DOM 并对其应用样式。我们想到了一个我们非常熟悉的工具:PhantomJS。我们对实际页面进行了一些测试,发现一切似乎运行正常。然后我们构建了我们的 Java 客户端来与 PhantomJS webserver 交互:启动、打开页面、提取输出、处理响应、保存结果,然后清理,但在尝试在一台机器上使用和扩展呈现过程时,遇到了灾难性的性能结果。
呈现一个 HTML 文件可能需要几秒钟到几分钟,我们无法知道 PhantomJS 在做什么。再加上资源使用量随着 DOM 的增大而呈指数级增长,这让我们不得不放弃它,寻找其他替代方案。
使用 Selenium 运气更好
幸运的是,一位同事正在尝试在无头 Chrome 之上使用Selenium。由于他在 PhantomJS 缺乏的各个领域都获得了令人鼓舞的结果,我们考虑离开 Java 一切包办的舒适区,并在需要时将任务委托给其他工具。测试结果非常有希望 - 无头 Chrome 看起来非常适合我们的需求:超快的启动时间、很棒的渲染时间,以及对停止进程的完全控制。
Selenium web driver 实际上会关闭二进制文件,而不是我们向 PhantomJS 发送exit
命令并希望它不在 100% 负载下,因此它会实际处理它。这使我们能够单独控制每个进程,而不必每隔几分钟使用一次killall
以及在其中一个进程失控并占用 CPU 时停止所有进程。
这种方法的唯一问题是,JavaScript 无法再包含在单个独立的 JS 文件中,然后传递到 PhantomJS 可执行文件,而必须内嵌在 HTML 文件中。以下是我们使用的脚本的简化版本,它依赖于 Window.getComputedStyle() 方法。
let backgroundImages = [],
allElem = document.querySelectorAll("*"),
allElemLength = allElem.length;
for (let i = 0; i < allElemLength; i++) {
let style = window.getComputedStyle(allElem[i], false),
backgroundImage = style.backgroundImage.slice(4, -1);
backgroundImages.push(backgroundImage);
}
保存数据将通过调用一个简单的 PHP 脚本来完成。我们进行了一些更大规模的测试来验证我们的选择,一切运行都非常完美,所以我们继续建立了一个可扩展的环境。
我们再次处理了所有 HTML 文件,并注入了上面的 JavaScript 代码段。下一个挑战是将所有内容上传到亚马逊。 S3Browser,我们使用它进行“休闲”的列出和下载/上传,似乎不够快(至少免费版本不行)。所以,我们寻找了一个替代方案,并找到了 s3-parallel-put.
我们在本地 Linux 机器上设置了它,将 SSD 移过去,然后很快上传了 65GB 的压缩文本数据。它使我们的机器和运行在它上面的本地 Jenkins 服务器瘫痪了 - 直到我们升级了旧的 Q9550 CPU :)。
问题出现在开始扩展时。我们发现,即使 Selenium 驱动程序报告页面已成功渲染,我们的单台 Web 服务器也会不堪重负,停止保存结果。这也意味着我们的许多队列消息会被浪费(被消费并从队列中删除),而不会产生任何结果。
因此,我们决定使用 Redis,建立一个更细致的系统来跟踪已处理/未处理的文件:每次我们开始处理一个文件时,我们都会将域名插入到 Redis 集合中。每次我们处理完一个文件(我们的 PHP 脚本会被调用)时,我们都会将域名插入到另一个 Redis 集合中。关键是保持这两个集合之间的差异最小(任何超过一定值的差异都意味着某些东西没有正常工作),并且如果需要,可以轻松地进行重试。
硬件设置
对于我们的硬件设置,我们首先在 10 台 Amazon c4.large 机器上运行 10 个线程 * 每台机器 1 个 Chrome 实例,这些机器由一台运行在 m3.medium 上的 Apache Web 服务器提供服务,最初它做得非常糟糕。在调整了 Apache 的设置后,我们逐渐将所有内容都扩展到了 40 台 c4.large 机器,这些机器由运行在 4 台 m3.medium 机器上的 Apache Web 服务器提供服务,它们位于负载均衡器后面。我们的 Redis 实例为所有 10 个线程 * 40 台机器 * 每 5-20 秒 3-4 个请求提供服务,它运行在 r3.large 机器上。因此,大约是 **每秒 60-320 个请求**。
在成本方面,很难给出确切的支出金额或 CPU 时间,因为我们在拥有一个完全功能化且稳定的生态系统之前遇到了许多问题。理想情况下,一台机器需要大约 45 秒来处理 100 个文件:下载、解压缩、渲染和清理。
问答/后续
tbody
元素?
为什么会有这么多 对于上述新数据,我们对 800 万份文档进行了又一次全面的扫描,还修复了一个解析清理问题,即 jsoup 解析器会自动为所有表格添加 tbody
元素。这就是一些人在评论中提出的问题的答案:“为什么会有这么多 tbody
元素?”
因此,大多数页面使用的元素数量现在是 25,tbody
的统计数据现在已经减少了。
body
占 99%?
简单回顾一下:根据 规范,省略 body
是可以的:起始标签:可选,结束标签:可选。
所以,根据你的评论,最令人惊讶的结果之一是 body
元素丢失了 1%。我想我欠你一个解释,为此我进行了更深入的解析,以获得一些见解。
- 正如 你们中的一些人已经猜到,大多数页面缺少
body
标签,因为frameset
使用频率很高。 - 使用
meta http-equiv="refresh"
的客户端重定向方法,后面没有body
内容,这是另一个原因。 - 令人失望的是,在预计在 Google 上排名靠前的页面中,有很多页面使用粗糙的 JavaScript
window.location
解决方案来将人们重定向到其他域名。同样,这些页面完全没有包含body
部分。 - 一些标记为缺少
body
的页面完全崩溃了,例如由于 PHP 错误。一些页面省略了起始body
标签,但没有省略结束标签。
想要更多?
你是否想查看某个元素/属性的统计数据?请在 Twitter 上联系我,或在下面留言,我们会想办法!
另外,请确保你查看了 完整统计数据。
这些 SVG 数字看起来很奇怪:
符号如果没有用,就毫无意义。一些差异是合理的,因为有些页面会导入一组符号,但只使用其中几个,或者因为一些脚本会在动态地将一个
<span>
或<img>
升级为使用<use>
的 SVG 之前测试内联 SVG 支持。但我无法相信这些因素会造成如此大的差异。嗨,Amelia,
你上面提到的数字只代表使用属性/值对(如
fill=currentColor
或stroke=currentColor
)的内部 SVG 元素。以下是关于
<symbol>
和使用<use>
的 SVG 的实际数字——从总计 5,445,493 个内联 SVG 元素中10.36% –
<symbol>
4.94% – 带有
<use>
来自 https://www.advancedwebranking.com/html/#inline-svg
啊,明白了,这样更有意义了!从文字中并不清楚这些数字是
currentColor
描述的扩展。感谢你提供指向完整数字的链接。看到
<symbol>
比<use>
多两倍,仍然有点令人惊讶,但这可以用我上面提到的原因来解释。的确,一个页面更有可能包含一组
<symbol>
,而不是实际<use>
它们。我认为你完美地指出了原因,谢谢!
使用带有空
alt
值的<img>
是一种不错的使用方式,只要图像被认为是装饰性的,并且应该被屏幕阅读器忽略。我自己不是 Bootstrap 或 Font Awesome 的用户,但我怀疑这些数字低于预期,因为这些类型的资产通常会被最小化并合并到一个单独的
app.css
(或类似)文件中。我也是这样。在我的个人项目,甚至是在我工作中的项目,我们通常将所有资产构建成几个最小化的资产,这些资产没有 .min 的标识,因为在我们的视图文件中重新链接资产对我们的构建工具来说是多余的负担。
我认为这对我们的代码来说是可以接受的,因为我们不会将其用于公开发布。但是,使用由 CDN 提供的第三方脚本,使用 .min 标识更有意义。
这篇文章很有趣。但是…未关闭的空元素?它们看起来很裸露,很冷。
哈哈,我想我再也不会以同样的方式看待未关闭的空元素了。
感谢您对
target="_blank"
的说明 - 我之前并不知道其安全隐患。阅读后,我发现浏览器的默认行为似乎是不正确的,(如果需要的话)应该需要一个特殊的 rel 属性才能获得默认的默认效果。关于 favicon,有一个非常简单的理由来说明为什么需要包含它。如果您使用链接标签来指定触控图标,许多浏览器会重新缩放它以代替书签栏中的 favicon。但是,触控图标使用的图标被设计为在合适的尺寸下看起来不错,在 Android 上可以达到 192×192。当缩放到 16×16 时,它们看起来很糟糕。
因此,对于 FireFox 和 Chrome 等浏览器,您仍然需要在其中指定一个使用 favicon 格式的链接标签,并将其指定为最后一个带有
rel="icon"
属性的链接,以便它们将其用于书签或浏览器标签中网站名称旁边的实际 favicon 目的。否则,它们会将用于移动设备的触控图标的最后一个链接标签缩小,这可能会看起来很糟糕。
为了扩展 favicon 的说明,这是我所做的事情 -
这使得 Android 和我相信 gnome 能够识别触控图标(我不知道 webp 是否支持触控图标,但以防万一),但以 32×32 favicon 作为最后一个,FireFox 和 Linux 上的 Chromium 会抓取 192×192 png 并缩小它 - 即使我确实在根目录中有一个 favicon.ico(mod_rewrite 规则指向 16×16 版本)
带有触控图标的 iOS 很奇怪 - 使用链接标签指定它们的唯一方法违反了规范,因此,如果您想要一个有效的页面,为 iOS 执行触控图标的唯一方法是将它们放在根目录中,并使用预期的名称(或 mod_rewrite 规则)
我不知道触控图标问题是否导致如此多的人仍然指定 favicon,但这就是我这样做的原因。
有趣的阅读,感谢您抽出时间完成这些!
想知道查找 document.write 使用情况有多难?谷歌最近宣布他们将对使用它的网站进行处罚,我很想知道有多少网站在使用。
嘿,阿尔伯特,
在 HTML 文档中搜索
document.write
是可行的。但是,说到准确性,我不确定我们能得到什么结果。这是因为我们只会搜索标记(用于内联脚本),而不会搜索包含的 JavaScript 文件。以上数据来自仅分析 HTML 文档。确实,我们找到了一个解决方案来获取 SVG 作为背景图像 统计信息的活动样式表,但我们没有关联的 JavaScript 文件。还没有。
哇,很有意思 - 自从大约 15 年前我发现 DOMDocument 以来,我大多数个人项目都是使用 DOMDocument 生成的,并作为正确的 XML 提供服务。IE 9 之前的 Internet Explorer 用户对我来说并不重要。
将内容作为 XML 提供的一个后果是,没有 document.write(),也没有 document.write() 就意味着没有 adsense 或其他 Google 服务,多年来我一直要求他们更改它,但我的请求都石沉大海。
他们是要惩罚自己,还是最终修复了他们所有的服务?
尽管我对样本感到疑惑,但这非常有趣,而且像往常一样,有点令人沮丧。这是我们需要的数据。
无法将这组数据与其他研究(例如 Google 的 Web 创作统计)进行比较。
但我喜欢这样想,这组数据有它自己独特的地方,与之前的研究进行比较。:)