- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
因此,我一直在使用Lighthouse查看Chrome的新“审核”面板,并逐渐改善了我网站的指标。它目前位于95(性能),97(可访问性)和75(最佳实践)上。
我开始仔细阅读建议,然后单击几个部分的“了解更多”链接。因此,我现在正在阅读Google Developers网站。但是,对我的问题特别重要的两篇文章是Render-Blocking Resources和Render-Blocking CSS。
从“渲染阻止资源”一文中,这是最重要的摘录(整个CSS文章实质上对此进行了更详细的介绍):
对于关键脚本,请考虑将其内联到HTML中。对于非关键脚本,请考虑使用async
或defer
属性对其进行标记。请参阅Adding Interactivity with JavaScript以了解更多信息。
对于样式表,请考虑按照媒体查询将样式拆分为不同的文件,然后为每个样式表链接添加media
属性。加载页面时,浏览器仅阻止第一个绘画来检索与用户设备匹配的样式表。请参阅Render-Blocking CSS以了解更多信息。
对于非关键的HTML导入,请使用async
属性对其进行标记。通常,async
应该与HTML导入一起使用。
现在,为了使我的网站达到当前评分,这是当前的位置。 (我应该注意,如果可能的话,我确实计划充分利用它们。这只是该站点当前的状态。)
当前实施
该网站100%设计为移动优先,并且与设备分辨率兼容,范围从240像素到3840像素。我正在使用自适应设计,但有一些断点。
我正在使用HTTPS。
我正在使用图标精灵。
由于站点主题仍在开发中,因此我使用的是非最小化的CSS和JavaScript,它们分为多个文件。 CSS文件包含媒体查询。<a>
个元素正在使用target="_blank"
,并且rel="noopener"
不存在。<script>
元素未使用async
或defer
属性。
我没有使用HTTP / 2或服务工作者。
我已经通过cPanel(“优化网站”)启用了GZIP压缩,定位所有内容。 (如果平均加载时间更快,我准备将其限制为HTML,PHP,CSS,JavaScript,纯文本和XML [我计划通过运行基准测试来对这两种情况进行10次测试,以测试这两种情况。还没有机会进行测试]。)
问题所在
主CSS文件相当大(当前为75 kiB)。最重要的是,已经缩小了(95 kiB)的jQuery文件,还有一些特定于站点某些区域的较小CSS文件。由于我的网站(微处理器信息存储库)的性质,还希望用户一次访问就可以浏览多个页面。
为了符合上述概述的准则,我正在考虑将CSS文件拆分为不仅依赖于网站当前所在的部分,还依赖于媒体查询,并通过<link>
元素使用media
属性,而不是CSS文件本身中的查询。
对于JavaScript,我正在考虑将所有async
脚本归为一个文件,而将所有defer
脚本归为另一个文件。我假设将jQuery API代码与其他自写函数组合在一起没有问题吗?
好的。有我的计划,但是在退后一会儿并思考如何实现这一点时,引起了我几个问题,我希望你们可以帮助我做出决定。这种思考过程对我来说是很新的(部分原因是我以前从未有过这么大的站点),因此任何投入都会很棒。
问题
由于所有CSS文件均已下载,无论是否使用它们,我都不确定一个大型主CSS文件是最佳选择,还是不确定是否有更多HTTP请求并按媒体类型/查询和部分将其拆分该网站。无论采用哪种方法,CSS都将被最小化。
<link rel="stylesheet" href="reset-min.css"> <!-- ~ 1.5 kiB; all media types -->
<link rel="stylesheet" href="layout-min.css"> <!-- ~ 50 kiB; internal @media -->
<link rel="stylesheet" href="color-min.css"> <!-- ~ 25 kiB; internal @media -->
<!--
3 HTTP requests; 76.5 kiB
Main CSS file split into "layout" and "color" for easy editing in the future.
-->
vs.
<link rel="stylesheet" href="reset-min.css"> <!-- ~ 1.5 kiB; all media types -->
<link rel="stylesheet" href="global-screen.css" media="screen"> <!-- ~ 7 kiB; site-wide elements -->
<link rel="stylesheet" href="color-screen.css" media="screen"> <!-- ~ 10 kiB -->
<link rel="stylesheet" href="database-screen.css" media="screen"> <!-- 20 kiB; not on all pages -->
<link rel="stylesheet" href="global-print.css" media="print"> <!-- ~ 6 kiB; site-wide elements -->
<link rel="stylesheet" href="color-print.css" media="print"> <!-- ~ 7 kiB -->
<link rel="stylesheet" href="database-print.css" media="print"> <!-- ~ 7 kiB; not on all pages -->
<!--
7 HTTP requests; 58.5 kiB
CSS files split into "global/database" and "color" for easy editing in the future.
-->
async
或
defer
属性分割,因此将导致更多的HTTP请求,但大小更小。 JS也将被缩小。
<script src="jquery-min.css"> <!-- ~ 95 kiB; local -->
<script src="scripts-min.css"> <!-- ~ 21.3 kiB -->
<!--
2 HTTP requests; 116.3 kiB
-->
vs.
<script src="scripts-async-min.css" async> <!-- ~ 108.1 kiB; includes jQuery API -->
<script src="scripts-defer-min.css" defer> <!-- ~ 4.3 kiB -->
<!--
2 HTTP requests; 112.4 kiB
-->
最佳答案
这是我对您提出的问题的看法:
1)浏览器可以在加载文件时打开到单个服务器的多个并行连接。但是,问题在于这些连接数量的限制。加载76.5 KiB的单个文件通常比加载25 KiB的3个文件要慢。因为服务器握手时间“可能”大于实际获取资源所花费的时间,所以这种情况永远不会成立,特别是在文件大小为70KB和平均Internet速度不断提高的情况下。我想最好的解决方案将高度取决于您所针对的地理区域。
这是关于并行连接限制的讨论:Max parallel http connections in a browser?
2)同样的谓词也适用于js文件。但是,jQuery如今几乎是全球性的。用户访问您的网站之前需要访问的网站的可能性非常高。因此,使用流行的CDN意味着将完全不会下载jQuery文件,也不会从浏览器缓存中加载jQuery文件。您最大的罪魁祸首之一。即使文件不存在于浏览器缓存中,使用CDN也应是首选做法,因为根据定义,CDN是地理分布式系统,并且如果访问者不在地理区域内,则CDN很有可能提供较低的延迟。与您的服务器相同的区域。
并非立即需要执行的javascript代码应异步加载或延迟。您对这两者的操作还取决于您要定位的浏览器。较旧的浏览器不会看到延迟加载的任何优势。
参考:Script Tag - async & defer
3)同样的理由也适用于字体。如果您使用的是流行字体,则很有可能已经在缓存中了。
对我来说,使用服务人员来管理jquery和字体似乎是过大了。不过,您可能希望将它们用于其他资产。
另外,我想补充一点,您应该尝试逐步加载网页。仅将所需的代码放入头部。在用户交互后执行的JS代码应在DOM内容之后(即,在结束body标签上方)加载。
我还建议推迟加载用于样式化内容的CSS,而不是固定布局。这包括所有颜色,字体和其他奇特的东西。
如果您的目的是在Chrome审核中获得良好的成绩,那么我提到的内容可能并不正确。但是,为了服务于实际用户,这是我个人要做的。
关于javascript - 网站性能(通过Lighthouse):更少的HTTP请求或更少的渲染阻止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45607625/
我有一个 html 格式的表单: 我需要得到 JavaScript在value input 字段执行,但只能通过表单的 submit .原因是页面是一个模板所以我不控制它(不能有
我管理的论坛是托管软件,因此我无法访问源代码,我只能向页面添加 JavaScript 来实现我需要完成的任务。 我正在尝试用超链接替换所有页面上某些文本关键字的第一个实例。我还根据国家/地区代码对这些
我正在使用 JS 打开新页面并将 HTML 代码写入其中,但是当我尝试使用 document.write() 在新页面中编写 JS 时功能不起作用。显然,一旦看到 ,主 JS 就会关闭。用于即将打开的
提问不是为了解决问题,提问是为了更好地理解系统 专家!我知道每当你将 javascript 代码输入 javascript 引擎时,它会立即由 javascript 引擎执行。由于没有看过Engi
我在一个文件夹中有两个 javascript 文件。我想将一个变量的 javascript 文件传递到另一个。我应该使用什么程序? 最佳答案 window.postMessage用于跨文档消息。使
我有一个练习,我需要输入两个输入并检查它们是否都等于一个。 如果是 console.log 正则 console.log false 我试过这样的事情: function isPositive(fir
我正在做一个Web应用程序,计划允许其他网站(客户端)在其页面上嵌入以下javascript: 我的网络应用程序位于 http://example.org 。 我不能假设客户端网站的页面有 JQue
目前我正在使用三个外部 JS 文件。 我喜欢将所有三个 JS 文件合而为一。 尽一切可能。我创建 aio.js 并在 aio.js 中 src="https://code.jquery.com/
我有例如像这样的数组: var myArray = []; var item1 = { start: '08:00', end: '09:30' } var item2 = {
所以我正在制作一个 Chrome 扩展,它使用我制作的一些 TamperMonkey 脚本。我想要一个“主”javascript 文件,您可以在其中包含并执行其他脚本。我很擅长使用以下行将其他 jav
我有 A、B html 和 A、B javascript 文件。 并且,如何将 A JavaScript 中使用的全局变量直接移动到 B JavaScript 中? 示例 JavaScript) va
我需要将以下整个代码放入名为 activate.js 的 JavaScript 中。你能告诉我怎么做吗? var int = new int({ seconds: 30, mark
我已经为我的 .net Web 应用程序创建了母版页 EXAMPLE1.Master。他们的 I 将值存储在 JavaScript 变量中。我想在另一个 JS 文件中检索该变量。 示例1.大师:-
是否有任何库可以用来转换这样的代码: function () { var a = 1; } 像这样的代码: function () { var a = 1; } 在我的浏览器中。因为我在 Gi
我收到语法缺失 ) 错误 $(document).ready(function changeText() { var p = document.getElementById('bidp
我正在制作进度条。它有一个标签。我想调整某个脚本完成的标签。在找到可能的解决方案的一些答案后,我想出了以下脚本。第一个启动并按预期工作。然而,第二个却没有。它出什么问题了?代码如下: HTML:
这里有一个很简单的问题,我简单的头脑无法回答:为什么我在外部库中加载时,下面的匿名和onload函数没有运行?我错过了一些非常非常基本的东西。 Library.js 只有一行:console.log(
我知道 javascript 是一种客户端语言,但如果实际代码中嵌入的 javascript 代码以某种方式与在控制台上运行的代码不同,我会尝试找到答案。让我用一个例子来解释它: 我想创建一个像 Mi
我如何将这个内联 javascript 更改为 Unobtrusive JavaScript? 谢谢! 感谢您的回答,但它不起作用。我的代码是: PHP js文件 document.getElem
我正在寻找将简单的 JavaScript 对象“转储”到动态生成的 JavaScript 源代码中的最优雅的方法。 目的:假设我们有 node.js 服务器生成 HTML。我们在服务器端有一个对象x。
我是一名优秀的程序员,十分优秀!