整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          Google 決定停止備份網頁,不再提供“網頁快照”

          Google 決定停止備份網頁,不再提供“網頁快照”功能

          CSDN 編者按】Google 搜索已廢棄其“網頁快照”鏈接功能,這一決策反映了互聯網技術的進步和用戶需求的變化。此功能曾幫助用戶訪問不穩定或已更新的網頁版本,但隨著加載問題的減少,Google 覺得不再必要。盡管直接訪問快照的按鈕已移除,特定的操作仍能訪問緩存的頁面。此舉釋放了大量資源,同時對互聯網檔案館記錄網頁變化的任務造成了影響。

          鏈接:https://arstechnica.com/gadgets/2024/02/google-search-kills-off-cached-webpages/

          者 | RON AMADEO
          譯者 | 明明如月 責編 | 鄭麗媛
          出品 | CSDN(ID:CSDNnews)

          長期以來,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 會拖慢頁面加載速度,主要體現在以下幾點:

          • 如果 JavaScript 是渲染阻塞的,則瀏覽器必須下載、解析、編譯和執行腳本,然后才能繼續渲染頁面所需的所有其他工作。
          • 即使 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}%`);

          在瀏覽器中,可以通過下面的方法查找未使用的代碼:

          • 當 DevTools 處于焦點狀態時,按 Command+Shift+P (Mac) 或 Control+Shift+P(Windows、Linux、ChromeOS)可打開命令菜單,輸入coverage。

          • 選擇Show Coverage

          • 單機錄制按鈕,Coverage選項卡提供了瀏覽器加載的每個文件使用了多少 CSS(和 JavaScript)的概覽。

          綠色代表使用的 CSS,紅色代表未使用的 CSS。

          • 單擊 CSS 文件可在上面的預覽中查看其使用的 CSS 的逐行細分

          在上面的屏幕截圖中,devsite-google-blue.css 的第 55 至 57 行和 65 至 67 行未使用,而第 59 至 63 行已使用。

          支持刪除未使用代碼的構建工具

          查看以下 Tooling.Report 測試,了解打包程序是否支持刪除未使用的代碼的功能:

          代碼分割

          代碼分割是交付高性能 JavaScript 應用程序的重要組成部分,有助于避免下載和執行超出給定頁面所需的 JavaScript。 從更高的層次上來說,“代碼拆分”是指將打包的代碼分解為多個較小的 Bundle 包的過程,這些 Bundle 包可以根據需要獨立加載和執行。

          死代碼消除(Unused Code Elimination)

          死代碼消除是刪除當前應用程序未使用的代碼的過程。 代碼被解析以創建一個抽象語法樹,然后遍歷該樹以查找未使用的函數和變量,最后該樹被轉換回 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 函數都應該從包中完全刪除。

          死導入代碼(Dead Imported Code)

          未由應用程序中的任何其他模塊導入或使用的模塊的導出也可以被視為死代碼并需要刪除。

          然而,這可能會導致一些棘手的優化問題,因為模塊的導出可能會以難以靜態分析的方式被使用。 動態導入就是其中一種情況,因為動態導入返回的模塊記錄具有每個導出的屬性,可以通過多種不同的方式引用這些屬性,其中一些無法在構建時確定。

          下面的測試用使用了兩個模塊 , 一個入口模塊和一個動態導入以創建分割點的 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

          如果不是服務器端渲染,可以使用 React.lazy() 拆分 JavaScript 包。否則,使用第三方庫(例如:loadable-components)進行代碼分割。

          比如下面的示例,Loadable 允許開發者將動態導入渲染為常規組件:

          import loadable from '@loadable/component';
          const OtherComponent=loadable(()=> import('./OtherComponent'));
          function MyComponent() {
            return (
              <div>
                <OtherComponent />
              </div>
            );
          }

          Vue

          如果不是服務器端渲染并使用 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瀏覽器清除歷史記錄教程吧!

          • 軟件版本:
          • 軟件大小:
          • 軟件授權:
          • 適用平臺:
          • http://dl.pconline.com.cn/download/79644.html

          safari瀏覽器清除歷史記錄

          使用蘋果手機的朋友們一般都會使用蘋果手機自帶的safari瀏覽器,幾乎很少人會去使用第三方瀏覽器,大家都知道,第三方手機瀏覽器清理緩存都是在瀏覽器設置中操作,而Safari則不同,正因為如此,才會有很多果粉朋友,不知道Safari如何清理緩存,下面小編就來詳細介紹下。

          1.依次進入iPhone 「設置」-》 然后下拉點擊進入「Safari」設置。

          safari瀏覽器清除歷史記錄

          2.進入 Safari 瀏覽器設置后,點擊底部的“清空歷史數據與網站數據”,之后會彈出一個確認清空選項,繼續點擊底部的“清空歷史記錄與數據”就可以完成Safari緩存清理了,如下圖所示。

          safari瀏覽器清除歷史記錄

          PS: Safari 瀏覽器也支持設置無痕瀏覽,也就是瀏覽網頁不會產生緩存與歷史數據,這個需要在 Safari 瀏覽器中進行設置。


          主站蜘蛛池模板: 爆乳无码AV一区二区三区| 成人区精品人妻一区二区不卡| 色妞AV永久一区二区国产AV| 亚洲日本va午夜中文字幕一区| 天天视频一区二区三区 | 无码国产精品一区二区高潮| 亚洲色欲一区二区三区在线观看 | 老湿机一区午夜精品免费福利| 一区二区在线视频观看| 国产福利91精品一区二区| 在线观看国产一区| 精品中文字幕一区在线| 精品视频一区二区三区四区| 亚洲爆乳精品无码一区二区三区| 一区二区国产精品| 国内精品视频一区二区八戒| 中文字幕日韩丝袜一区| 久久99国产精一区二区三区| 日本视频一区二区三区| 精品国产日韩亚洲一区在线| 日韩国产免费一区二区三区| 国产AV一区二区三区传媒| 熟女少妇精品一区二区| 中文字幕一区二区三区日韩精品 | 深田咏美AV一区二区三区| 国产一区二区精品久久| 日本韩国黄色一区二区三区| 无码少妇丰满熟妇一区二区| 久久精品亚洲一区二区三区浴池| 日本免费一区二区久久人人澡| 久久精品中文字幕一区| 精品亚洲一区二区三区在线播放| 福利在线一区二区| 一区二区国产精品| 亚洲av片一区二区三区| 一区二区三区免费在线观看| 一区二区国产在线播放| 国产福利电影一区二区三区| 色狠狠色噜噜Av天堂一区| 精品一区二区久久| 性色AV一区二区三区|