CSDN 编者按】Google 搜索已废弃其“网页快照”链接功能,这一决策反映了互联网技术的进步和用户需求的变化。此功能曾帮助用户访问不稳定或已更新的网页版本,但随着加载问题的减少,Google 觉得不再必要。尽管直接访问快照的按钮已移除,特定的操作仍能访问缓存的页面。此举释放了大量资源,同时对互联网档案馆记录网页变化的任务造成了影响。
链接:https://arstechnica.com/gadgets/2024/02/google-search-kills-off-cached-webpages/
长期以来,Google 搜索通过其“网页快照”功能,为用户提供了访问已关闭或更新网站的备选方式。然而,根据 Google 的搜索联络人 Danny Sullivan 在 X 平台(原推特)上的声明,这一功能已经停止。Sullivan 解释说,这项功能最初旨在早期互联网时期,为用户提供帮助,以解决网页加载不稳定的问题。随着技术进步,这类问题已经大幅减少,因此 Google 决定逐步淘汰此项功能。
Danny Sullivan 在 X 平台(原推特)上的声明截图
从去年 12 月开始,用户发现网页快照功能时而有效时而失效,现在在 Google 搜索中已经很难看到这类链接了。虽然网页快照的按钮已不可用,用户仍然可以通过直接访问特定的 URL 或在 Google 搜索中输入“cache:”指令加上网址来访问网页的缓存版本。目前,例如 Ars Technica 网站的网页快照仍然可用。与此同时,Google 已删除了所有有关网页快照的支持页面。
网页快照原先位于 Google 搜索结果旁的下拉菜单中。它是直接访问 Google 爬虫在搜索新的或已更新网页时保存的网页内容副本的方式。这一做法最终让 Google 几乎拥有了整个互联网的备份,其数据量庞大到难以估计。考虑到 Google 目前正在节约成本,减少缓存数据可能会释放出大量资源。
网页快照不仅在网站关闭或内容快速变化时有用,多年来还提供了洞见,帮助人们了解 Google Bot 如何浏览网页。然而,网页快照可能与用户预期的显示方式有所不同。过去,Google Bot 只能识别文本,但随着时间的推移,它开始能够处理媒体和其他复杂数据,如 JavaScript。尽管 Google 为了防止 SEO 垃圾邮件攻击而对Google Bot 的许多细节保密,通过查看网页快照,用户仍可获得有关其工作方式的信息。尽管如此,如果你想了解自己的网站在 Google Bot 眼中的样子,仍然可以通过搜索控制台来实现,不过这只适用于你自己的网站。
随着网页快照功能的消失,互联网档案馆在记录和跟踪全球网页变化方面的任务变得更加艰巨。
你对 Google 取消网页快照的功能有什么看法?你觉得这对网站的可靠性和可访问性有什么影响?欢迎在评论区发表你的观点。
家好,很高兴又见面了,我是"高级前端?进阶?",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发,您的支持是我不断创作的动力。
未使用的 JavaScript 会拖慢页面加载速度,主要体现在以下几点:
Chrome DevTools 中的coverage选项卡可以为开发者提供未使用代码的逐行细分。 Puppeteer 中的 Coverage 类也可以帮助自动执行检测未使用代码和提取已使用代码的过程,比如下面的代码:
// 启动 JavaScript 和 CSS coverage分析
await Promise.all([
page.coverage.startJSCoverage(),
page.coverage.startCSSCoverage(),
]);
// 导航到一个页面
await page.goto('https://example.com');
// 禁止 JavaScript 和 CSS coverage分析
const [jsCoverage, cssCoverage]=await Promise.all([
page.coverage.stopJSCoverage(),
page.coverage.stopCSSCoverage(),
]);
let totalBytes=0;
let usedBytes=0;
const coverage=[...jsCoverage, ...cssCoverage];
for (const entry of coverage) {
totalBytes +=entry.text.length;
for (const range of entry.ranges) usedBytes +=range.end - range.start - 1;
}
console.log(`Bytes used: ${(usedBytes / totalBytes) * 100}%`);
在浏览器中,可以通过下面的方法查找未使用的代码:
绿色代表使用的 CSS,红色代表未使用的 CSS。
在上面的屏幕截图中,devsite-google-blue.css 的第 55 至 57 行和 65 至 67 行未使用,而第 59 至 63 行已使用。
查看以下 Tooling.Report 测试,了解打包程序是否支持删除未使用的代码的功能:
代码分割是交付高性能 JavaScript 应用程序的重要组成部分,有助于避免下载和执行超出给定页面所需的 JavaScript。 从更高的层次上来说,“代码拆分”是指将打包的代码分解为多个较小的 Bundle 包的过程,这些 Bundle 包可以根据需要独立加载和执行。
死代码消除是删除当前应用程序未使用的代码的过程。 代码被解析以创建一个抽象语法树,然后遍历该树以查找未使用的函数和变量,最后该树被转换回 JavaScript 源代码。
有许多工具可以在 JavaScript 源代码上执行死代码消除,其中最流行的是 Terser 和 Closure Compiler。
在下面的测试中,每个构建工具都配置为通过其内置的“production”选项来优化 Bundle 包,或者在没有此类选项的情况下使用最常见的配置。 一些工具能够作为 Bundle 的一部分执行死代码消除,其他工具可能依赖于 Terser 等其他工具。
// index.js
import { logCaps } from './utils.js';
logCaps(exclaim('This is index'));
function thisIsNeverCalled() {
console.log(`No, really, it isn't`);
}
下面是 Utils.js 的内容:
export function logCaps(msg) {
console.log(msg.toUpperCase());
}
export function thisIsNeverCalledEither(msg) {
return msg + '!';
}
一旦为生产而构建, thisIsNeverCalled 和 thisIsNeverCalledEither 函数都应该从包中完全删除。
未由应用程序中的任何其他模块导入或使用的模块的导出也可以被视为死代码并需要删除。
然而,这可能会导致一些棘手的优化问题,因为模块的导出可能会以难以静态分析的方式被使用。 动态导入就是其中一种情况,因为动态导入返回的模块记录具有每个导出的属性,可以通过多种不同的方式引用这些属性,其中一些无法在构建时确定。
下面的测试用使用了两个模块 , 一个入口模块和一个动态导入以创建分割点的 utils.js 模块。动态导入的模块有两个导出,但只使用了 logCaps 导出。
// index.js
(async function () {
const { logCaps }=await import('./utils.js');
logCaps('This is index');
})();
下面是 utils.js 内容:
// utils.js
export function logCaps(msg) {
console.log(msg.toUpperCase());
}
export function thisIsNeverCalled(msg) {
return msg + '!';
}
一旦为生产而构建,utils.js 中的 thisIsNeverCalled 函数不应出现在生成的 Bundle 中。
然而,不同的打包工具在这个功能上表现差异非常大。如:browserify 不支持懒加载而无法实现该功能、rollup 不支持、parcel 表现亮眼、而 webpack 不支持如下的特殊解构语法。
const { logCaps }=await import('./utils.js');
但 webpack 允许手动列出通过魔术注释使用的导出:
const { logCaps }=await import(/* webpackExports: "logCaps" */ './utils.js');
如果不是服务器端渲染,可以使用 React.lazy() 拆分 JavaScript 包。否则,使用第三方库(例如:loadable-components)进行代码分割。
比如下面的示例,Loadable 允许开发者将动态导入渲染为常规组件:
import loadable from '@loadable/component';
const OtherComponent=loadable(()=> import('./OtherComponent'));
function MyComponent() {
return (
<div>
<OtherComponent />
</div>
);
}
如果不是服务器端渲染并使用 Vue router,可以通过延迟加载路由拆分包。Vue Router 原生支持开箱即用的动态导入,这意味着可以用动态导入替换静态导入:
const UserDetails=()=> import('./views/UserDetails.vue')
const router=createRouter({
// ...
routes: [
{ path: '/users/:id', component: UserDetails }
// or use it directly in the route definition
{ path: '/users/:id', component: ()=> import('./views/UserDetails.vue') },
],
})
component(和components)选项接受一个返回组件 Promise 的函数,Vue Router 仅在第一次进入页面时获取,然后使用缓存的版本。 这意味着开发者还可以拥有更复杂的函数,只要它们返回 Promise:
const UserDetails=()=>
Promise.resolve({
/* component definition */
});
一般来说,最好始终对所有路由使用动态导入。当使用像 webpack 这样的打包器时将自动受益于代码分割 使用 Babel 时,需要添加 syntax-dynamic-import 插件,以便 Babel 能够正确解析语法。
https://developer.chrome.com/docs/devtools/css/reference/#coverage
https://bundlers.tooling.report/transformations/dead-code/
https://bundlers.tooling.report/transformations/dead-code-dynamic/
https://loadable-components.com/docs/getting-started/
https://pptr.dev/api/puppeteer.coverage/
https://router.vuejs.org/guide/advanced/lazy-loading.html
afari浏览器怎么清除历史记录? 现在,不少人都在使用iphone手机或者Mac电脑。而safari浏览器是苹果设备自带的浏览器,但是很多朋友都找不到safari浏览器清理缓存和历史记录的地方,那么safari怎么清除历史记录?safari怎么清除缓存?让小编来给大家介绍safari浏览器清除历史记录教程吧!
safari浏览器清除历史记录
使用苹果手机的朋友们一般都会使用苹果手机自带的safari浏览器,几乎很少人会去使用第三方浏览器,大家都知道,第三方手机浏览器清理缓存都是在浏览器设置中操作,而Safari则不同,正因为如此,才会有很多果粉朋友,不知道Safari如何清理缓存,下面小编就来详细介绍下。
1.依次进入iPhone 「设置」-》 然后下拉点击进入「Safari」设置。
safari浏览器清除历史记录
2.进入 Safari 浏览器设置后,点击底部的“清空历史数据与网站数据”,之后会弹出一个确认清空选项,继续点击底部的“清空历史记录与数据”就可以完成Safari缓存清理了,如下图所示。
safari浏览器清除历史记录
PS: Safari 浏览器也支持设置无痕浏览,也就是浏览网页不会产生缓存与历史数据,这个需要在 Safari 浏览器中进行设置。
*请认真填写需求信息,我们会在24小时内与您取得联系。