denoland / dotland

[Archived] deno.land website
https://deno.land
MIT License
957 stars 626 forks source link

Deno.land is very slow #2220

Closed mohsen1 closed 2 years ago

mohsen1 commented 2 years ago

I'm browsing from Barcelona, Spain

Visiting https://deno.land/x/fresh@1.0.0/www is extremely slow (more than ~2 seconds page load time)

Screen Shot 2022-06-30 at 12 32 10 AM

Non-HTML assets load pretty fast. Just to prove it's not my network etc

Screen Shot 2022-06-30 at 12 33 48 AM

HAR

har file ```json { "log": { "version": "1.2", "creator": { "name": "WebKit Web Inspector", "version": "1.0" }, "pages": [ { "startedDateTime": "2022-06-29T22:32:02.235Z", "id": "page_0", "title": "https://deno.land/x/fresh@1.0.0/www", "pageTimings": { "onContentLoad": 127207.40608332562, "onLoad": 127351.99941665633 } } ], "entries": [ { "pageref": "page_0", "startedDateTime": "2022-06-29T22:32:02.235Z", "time": 3028.204767848365, "request": { "method": "GET", "url": "https://deno.land/x/fresh@1.0.0/www", "httpVersion": "HTTP/2", "cookies": [], "headers": [ { "name": "Accept", "value": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" }, { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, { "name": "Host", "value": "deno.land" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Safari/605.1.15" }, { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, { "name": "Referer", "value": "https://deno.land/x/fresh@1.0.0" }, { "name": "Connection", "value": "keep-alive" } ], "queryString": [], "headersSize": 235, "bodySize": 0 }, "response": { "status": 200, "statusText": "", "httpVersion": "HTTP/2", "cookies": [], "headers": [ { "name": "Content-Encoding", "value": "gzip" }, { "name": "Date", "value": "Wed, 29 Jun 2022 22:32:05 GMT" }, { "name": "Content-Type", "value": "text/html; charset=utf-8" }, { "name": "Vary", "value": "Accept-Encoding" }, { "name": "Content-Length", "value": "14299" }, { "name": "Server", "value": "deno/europe-southwest1-a" } ], "content": { "size": 50996, "compression": 36688, "mimeType": "text/html", "text": "fresh@1.0.0 | Deno

x/fresh@1.0.0/www

The next-gen web framework.
GitHub Stars
3082
Latest

fresh website

This is the fresh website source. The fresh website contains:

\n
    \n
  • a homepage
  • \n
  • a documentation page
  • \n
\n

Usage

Start the project:

\n
deno run -A --watch main.ts

This will watch the project directory and restart as necessary.

\n
" }, "redirectURL": "", "headersSize": 98, "bodySize": 14308, "_transferSize": 14406 }, "cache": {}, "timings": { "blocked": 43.211838317802176, "dns": -1, "connect": -1, "ssl": -1, "send": 0, "wait": 2982.772236893652, "receive": 2.220692636910826 }, "serverIPAddress": "34.120.54.55", "_serverPort": 443, "connection": "4", "_fetchType": "Network Load", "_priority": "high" }, { "pageref": "page_0", "startedDateTime": "2022-06-29T22:32:05.302Z", "time": 0.058375007938593626, "request": { "method": "GET", "url": "https://deno.land/_frsh/js/2az4qb2r16e0/main.js", "httpVersion": "", "cookies": [], "headers": [], "queryString": [], "headersSize": -1, "bodySize": -1 }, "response": { "status": 200, "statusText": "", "httpVersion": "", "cookies": [], "headers": [ { "name": "Content-Type", "value": "application/javascript" }, { "name": "Date", "value": "Wed, 29 Jun 2022 22:29:39 GMT" }, { "name": "Content-Encoding", "value": "gzip" }, { "name": "Content-Length", "value": "541" }, { "name": "Cache-Control", "value": "public, max-age=604800, immutable" }, { "name": "Vary", "value": "Accept-Encoding" }, { "name": "Server", "value": "deno/europe-southwest1-a" } ], "content": { "size": 0, "compression": 0, "mimeType": "application/javascript" }, "redirectURL": "", "headersSize": -1, "bodySize": -1 }, "cache": {}, "timings": { "blocked": 0, "dns": -1, "connect": -1, "ssl": -1, "send": 0, "wait": 0.042625004425644875, "receive": 0.01575000351294875 }, "_fetchType": "Memory Cache" }, { "pageref": "page_0", "startedDateTime": "2022-06-29T22:32:05.305Z", "time": 0.04949999856762588, "request": { "method": "GET", "url": "https://deno.land/_frsh/js/2az4qb2r16e0/chunk-BRWYY6B6.js", "httpVersion": "", "cookies": [], "headers": [], "queryString": [], "headersSize": -1, "bodySize": -1 }, "response": { "status": 200, "statusText": "", "httpVersion": "", "cookies": [], "headers": [ { "name": "Content-Type", "value": "application/javascript" }, { "name": "Date", "value": "Wed, 29 Jun 2022 22:29:39 GMT" }, { "name": "Content-Encoding", "value": "gzip" }, { "name": "Content-Length", "value": "5320" }, { "name": "Cache-Control", "value": "public, max-age=604800, immutable" }, { "name": "Vary", "value": "Accept-Encoding" }, { "name": "Server", "value": "deno/europe-southwest1-a" } ], "content": { "size": 0, "compression": 0, "mimeType": "application/javascript" }, "redirectURL": "", "headersSize": -1, "bodySize": -1 }, "cache": {}, "timings": { "blocked": 0, "dns": -1, "connect": -1, "ssl": -1, "send": 0, "wait": 0.034916651202365756, "receive": 0.014583347365260124 }, "_fetchType": "Memory Cache" }, { "pageref": "page_0", "startedDateTime": "2022-06-29T22:32:05.308Z", "time": 0.05433335900306702, "request": { "method": "GET", "url": "https://deno.land/_frsh/js/2az4qb2r16e0/island-versionselect.js", "httpVersion": "", "cookies": [], "headers": [], "queryString": [], "headersSize": -1, "bodySize": -1 }, "response": { "status": 200, "statusText": "", "httpVersion": "", "cookies": [], "headers": [ { "name": "Content-Type", "value": "application/javascript" }, { "name": "Date", "value": "Wed, 29 Jun 2022 22:29:39 GMT" }, { "name": "Content-Encoding", "value": "gzip" }, { "name": "Content-Length", "value": "19552" }, { "name": "Cache-Control", "value": "public, max-age=604800, immutable" }, { "name": "Vary", "value": "Accept-Encoding" }, { "name": "Server", "value": "deno/europe-southwest1-a" } ], "content": { "size": 0, "compression": 0, "mimeType": "application/javascript" }, "redirectURL": "", "headersSize": -1, "bodySize": -1 }, "cache": {}, "timings": { "blocked": 0, "dns": -1, "connect": -1, "ssl": -1, "send": 0, "wait": 0.03695834311656654, "receive": 0.017375015886500478 }, "_fetchType": "Memory Cache" }, { "pageref": "page_0", "startedDateTime": "2022-06-29T22:32:05.311Z", "time": 19.208447745768353, "request": { "method": "GET", "url": "https://deno.land/fonts/inter/inter.css", "httpVersion": "HTTP/2", "cookies": [], "headers": [ { "name": "Accept", "value": "text/css,*/*;q=0.1" }, { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, { "name": "If-None-Match", "value": "W/b0ab1101952b9bd946e8ac0ab2ece7948eba7048" }, { "name": "Host", "value": "deno.land" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Safari/605.1.15" }, { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, { "name": "Referer", "value": "https://deno.land/x/fresh@1.0.0/www" }, { "name": "Connection", "value": "keep-alive" } ], "queryString": [], "headersSize": 87, "bodySize": 0 }, "response": { "status": 304, "statusText": "", "httpVersion": "HTTP/2", "cookies": [], "headers": [ { "name": "ETag", "value": "b0ab1101952b9bd946e8ac0ab2ece7948eba7048" }, { "name": "Content-Type", "value": "text/css" }, { "name": "Vary", "value": "Accept-Encoding, If-None-Match" }, { "name": "Date", "value": "Wed, 29 Jun 2022 22:32:05 GMT" }, { "name": "Server", "value": "deno/europe-southwest1-a" } ], "content": { "size": 0, "compression": 0, "mimeType": "text/css", "text": "@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 100;\n font-display: swap;\n src: url(\"Inter-Thin.woff2?v=3.13\") format(\"woff2\"),\n url(\"Inter-Thin.woff?v=3.13\") format(\"woff\");\n}\n@font-face {\n font-family: 'Inter';\n font-style: italic;\n font-weight: 100;\n font-display: swap;\n src: url(\"Inter-ThinItalic.woff2?v=3.13\") format(\"woff2\"),\n url(\"Inter-ThinItalic.woff?v=3.13\") format(\"woff\");\n}\n\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 200;\n font-display: swap;\n src: url(\"Inter-ExtraLight.woff2?v=3.13\") format(\"woff2\"),\n url(\"Inter-ExtraLight.woff?v=3.13\") format(\"woff\");\n}\n@font-face {\n font-family: 'Inter';\n font-style: italic;\n font-weight: 200;\n font-display: swap;\n src: url(\"Inter-ExtraLightItalic.woff2?v=3.13\") format(\"woff2\"),\n url(\"Inter-ExtraLightItalic.woff?v=3.13\") format(\"woff\");\n}\n\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 300;\n font-display: swap;\n src: url(\"Inter-Light.woff2?v=3.13\") format(\"woff2\"),\n url(\"Inter-Light.woff?v=3.13\") format(\"woff\");\n}\n@font-face {\n font-family: 'Inter';\n font-style: italic;\n font-weight: 300;\n font-display: swap;\n src: url(\"Inter-LightItalic.woff2?v=3.13\") format(\"woff2\"),\n url(\"Inter-LightItalic.woff?v=3.13\") format(\"woff\");\n}\n\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(\"Inter-Regular.woff2?v=3.13\") format(\"woff2\"),\n url(\"Inter-Regular.woff?v=3.13\") format(\"woff\");\n}\n@font-face {\n font-family: 'Inter';\n font-style: italic;\n font-weight: 400;\n font-display: swap;\n src: url(\"Inter-Italic.woff2?v=3.13\") format(\"woff2\"),\n url(\"Inter-Italic.woff?v=3.13\") format(\"woff\");\n}\n\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(\"Inter-Medium.woff2?v=3.13\") format(\"woff2\"),\n url(\"Inter-Medium.woff?v=3.13\") format(\"woff\");\n}\n@font-face {\n font-family: 'Inter';\n font-style: italic;\n font-weight: 500;\n font-display: swap;\n src: url(\"Inter-MediumItalic.woff2?v=3.13\") format(\"woff2\"),\n url(\"Inter-MediumItalic.woff?v=3.13\") format(\"woff\");\n}\n\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(\"Inter-SemiBold.woff2?v=3.13\") format(\"woff2\"),\n url(\"Inter-SemiBold.woff?v=3.13\") format(\"woff\");\n}\n@font-face {\n font-family: 'Inter';\n font-style: italic;\n font-weight: 600;\n font-display: swap;\n src: url(\"Inter-SemiBoldItalic.woff2?v=3.13\") format(\"woff2\"),\n url(\"Inter-SemiBoldItalic.woff?v=3.13\") format(\"woff\");\n}\n\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(\"Inter-Bold.woff2?v=3.13\") format(\"woff2\"),\n url(\"Inter-Bold.woff?v=3.13\") format(\"woff\");\n}\n@font-face {\n font-family: 'Inter';\n font-style: italic;\n font-weight: 700;\n font-display: swap;\n src: url(\"Inter-BoldItalic.woff2?v=3.13\") format(\"woff2\"),\n url(\"Inter-BoldItalic.woff?v=3.13\") format(\"woff\");\n}\n\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 800;\n font-display: swap;\n src: url(\"Inter-ExtraBold.woff2?v=3.13\") format(\"woff2\"),\n url(\"Inter-ExtraBold.woff?v=3.13\") format(\"woff\");\n}\n@font-face {\n font-family: 'Inter';\n font-style: italic;\n font-weight: 800;\n font-display: swap;\n src: url(\"Inter-ExtraBoldItalic.woff2?v=3.13\") format(\"woff2\"),\n url(\"Inter-ExtraBoldItalic.woff?v=3.13\") format(\"woff\");\n}\n\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 900;\n font-display: swap;\n src: url(\"Inter-Black.woff2?v=3.13\") format(\"woff2\"),\n url(\"Inter-Black.woff?v=3.13\") format(\"woff\");\n}\n@font-face {\n font-family: 'Inter';\n font-style: italic;\n font-weight: 900;\n font-display: swap;\n src: url(\"Inter-BlackItalic.woff2?v=3.13\") format(\"woff2\"),\n url(\"Inter-BlackItalic.woff?v=3.13\") format(\"woff\");\n}\n\n/* -------------------------------------------------------\nVariable font.\nUsage:\n\n html { font-family: 'Inter', sans-serif; }\n @supports (font-variation-settings: normal) {\n html { font-family: 'Inter var', sans-serif; }\n }\n*/\n@font-face {\n font-family: 'Inter var';\n font-weight: 100 900;\n font-display: swap;\n font-style: normal;\n font-named-instance: 'Regular';\n src: url(\"Inter-roman.var.woff2?v=3.13\") format(\"woff2\");\n}\n@font-face {\n font-family: 'Inter var';\n font-weight: 100 900;\n font-display: swap;\n font-style: italic;\n font-named-instance: 'Italic';\n src: url(\"Inter-italic.var.woff2?v=3.13\") format(\"woff2\");\n}\n\n\n/* --------------------------------------------------------------------------\n[EXPERIMENTAL] Multi-axis, single variable font.\n\nSlant axis is not yet widely supported (as of February 2019) and thus this\nmulti-axis single variable font is opt-in rather than the default.\n\nWhen using this, you will probably need to set font-variation-settings\nexplicitly, e.g.\n\n * { font-variation-settings: \"slnt\" 0deg }\n .italic { font-variation-settings: \"slnt\" 10deg }\n\n*/\n@font-face {\n font-family: 'Inter var experimental';\n font-weight: 100 900;\n font-display: swap;\n font-style: oblique 0deg 10deg;\n src: url(\"Inter.var.woff2?v=3.13\") format(\"woff2\");\n}\n" }, "redirectURL": "", "headersSize": 52, "bodySize": 0, "_transferSize": 52 }, "cache": {}, "timings": { "blocked": 1.2518979201558977, "dns": -1, "connect": -1, "ssl": -1, "send": 0, "wait": 17.880243016406894, "receive": 0.07630680920556188 }, "serverIPAddress": "34.120.54.55", "_serverPort": 443, "connection": "4", "_fetchType": "Memory Cache", "_priority": "high" }, { "pageref": "page_0", "startedDateTime": "2022-06-29T22:32:05.313Z", "time": 225.49014040851034, "request": { "method": "GET", "url": "https://deno.land/site.webmanifest", "httpVersion": "HTTP/2", "cookies": [], "headers": [ { "name": "Accept", "value": "*/*" }, { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, { "name": "Host", "value": "deno.land" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Safari/605.1.15" }, { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, { "name": "Referer", "value": "https://deno.land/x/fresh@1.0.0/www" }, { "name": "Connection", "value": "keep-alive" } ], "queryString": [], "headersSize": 191, "bodySize": 0 }, "response": { "status": 200, "statusText": "", "httpVersion": "HTTP/2", "cookies": [], "headers": [ { "name": "Content-Encoding", "value": "gzip" }, { "name": "ETag", "value": "W/9f3629712dfe3df80d74fd9573d762c105bcf2c1" }, { "name": "Content-Type", "value": "application/manifest+json" }, { "name": "Vary", "value": "Accept-Encoding, If-None-Match" }, { "name": "Date", "value": "Wed, 29 Jun 2022 22:32:05 GMT" }, { "name": "Server", "value": "deno/europe-southwest1-a" } ], "content": { "size": 1066, "compression": 787, "mimeType": "application/manifest+json", "text": "{\n \"name\": \"Deno\",\n \"short_name\": \"Deno\",\n \"theme_color\": \"#000000\",\n \"background_color\": \"#ffffff\",\n \"display\": \"standalone\",\n \"Scope\": \"/\",\n \"start_url\": \"/\",\n \"icons\": [\n {\n \"src\": \"images/icons/icon-72x72.png\",\n \"sizes\": \"72x72\",\n \"type\": \"image/png\"\n },\n {\n \"src\": \"images/icons/icon-96x96.png\",\n \"sizes\": \"96x96\",\n \"type\": \"image/png\"\n },\n {\n \"src\": \"images/icons/icon-128x128.png\",\n \"sizes\": \"128x128\",\n \"type\": \"image/png\"\n },\n {\n \"src\": \"images/icons/icon-144x144.png\",\n \"sizes\": \"144x144\",\n \"type\": \"image/png\"\n },\n {\n \"src\": \"images/icons/icon-152x152.png\",\n \"sizes\": \"152x152\",\n \"type\": \"image/png\"\n },\n {\n \"src\": \"images/icons/icon-192x192.png\",\n \"sizes\": \"192x192\",\n \"type\": \"image/png\"\n },\n {\n \"src\": \"images/icons/icon-384x384.png\",\n \"sizes\": \"384x384\",\n \"type\": \"image/png\"\n },\n {\n \"src\": \"images/icons/icon-512x512.png\",\n \"sizes\": \"512x512\",\n \"type\": \"image/png\"\n }\n ]\n}\n" }, "redirectURL": "", "headersSize": 135, "bodySize": 279, "_transferSize": 414 }, "cache": {}, "timings": { "blocked": 0.9480733424425125, "dns": 2.000135136768222, "connect": 39.99913317966275, "ssl": 21.9992040656507, "send": 2.4809837341308594, "wait": 179.9629567831289, "receive": 0.09881655569188297 }, "serverIPAddress": "34.120.54.55", "_serverPort": 443, "connection": "5", "_fetchType": "Network Load", "_priority": "low" }, { "pageref": "page_0", "startedDateTime": "2022-06-29T22:32:05.315Z", "time": 30.973449494922534, "request": { "method": "GET", "url": "https://deno.land/app.css", "httpVersion": "HTTP/2", "cookies": [], "headers": [ { "name": "Accept", "value": "text/css,*/*;q=0.1" }, { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, { "name": "If-None-Match", "value": "W/a6b13aea2a6e38224f0cbc0f20399031f2c9de95" }, { "name": "Host", "value": "deno.land" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Safari/605.1.15" }, { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, { "name": "Referer", "value": "https://deno.land/x/fresh@1.0.0/www" }, { "name": "Connection", "value": "keep-alive" } ], "queryString": [], "headersSize": 62, "bodySize": 0 }, "response": { "status": 304, "statusText": "", "httpVersion": "HTTP/2", "cookies": [], "headers": [ { "name": "ETag", "value": "a6b13aea2a6e38224f0cbc0f20399031f2c9de95" }, { "name": "Content-Type", "value": "text/css" }, { "name": "Vary", "value": "Accept-Encoding, If-None-Match" }, { "name": "Date", "value": "Wed, 29 Jun 2022 22:32:05 GMT" }, { "name": "Server", "value": "deno/europe-southwest1-a" } ], "content": { "size": 0, "compression": 0, "mimeType": "text/css", "text": "/* Copyright 2022 the Deno authors. All rights reserved. MIT license. */\n\nhtml {\n\tscroll-behavior: smooth;\n}\n\n/* Manual */\n\n#manualSidebarToggle:checked + #manualSidebar {\n\tdisplay: block;\n}\n\nol.nested {\n\tcounter-reset: item;\n}\nol.nested li {\n\tdisplay: block;\n}\nol.nested li:before {\n\tfont-feature-settings: \"kern\" 1, \"tnum\" 1;\n\t-webkit-font-feature-settings: \"kern\" 1, \"tnum\" 1;\n\t-ms-font-feature-settings: \"kern\" 1, \"tnum\" 1;\n\t-moz-font-feature-settings: \"kern\" 1, \"tnum\" 1;\n\tcontent: counters(item, \".\") \". \";\n\tcounter-increment: item;\n}\n\n/* Add Module */\n\n#modulename:valid ~ span {\n\tdisplay: none;\n}\n\n#subdirectory:invalid + span {\n\tdisplay: block;\n}\n\n/* Module */\n\n#hiddenItemsToggle:not(:checked) ~ table #hiddenItemsButton span:first-child {\n\tdisplay: none;\n}\n#hiddenItemsToggle:checked ~ table #hiddenItemsButton span:last-child {\n\tdisplay: none;\n}\n\n#hiddenItemsToggle:not(:checked) ~ table tr[name=\"hidden\"] {\n\tdisplay: none;\n}\n\n#hiddenItemsToggle:checked ~ table #hiddenItemsTr {\n\tborder-bottom-width: 1px;\n}\n\nspan:target {\n\tbackground-color: #fffbdd;\n}\n\nspan[data-highlight] {\n\tbackground-color: #fffbdd;\n}\n\n/* 404 Page */\n\n@keyframes move {\n\tfrom {\n\t\tleft: -200px;\n\t}\n\tto {\n\t\tleft: 100%;\n\t}\n}\n\n/* Benchmark */\n\n#normalizedToggle:not(:checked) + label > span:first-of-type {\n\tbackground-color: rgb(229 231 235);\n}\n#normalizedToggle:checked + label > span:first-of-type > span {\n\ttransform: translateX(1.25rem);\n}\n\n#normalizedToggle:checked ~ div:first-of-type {\n\tdisplay: none;\n}\n#normalizedToggle:not(:checked) ~ div:last-of-type {\n\tdisplay: none;\n}\n\n/* removes focus outlines on mouse clicks */\n*:focus:not(:focus-visible),\n*::before:focus:not(:focus-visible),\n*::after:focus:not(:focus-visible) {\n\toutline: none;\n}\n\n/* https://github.com/denoland/dotland/issues/1163 */\n.language-toml > code > .token-line > .table {\n\tdisplay: inline;\n}\n\nspan.token.plain:empty:before {\n\tcontent: \"\\200b\";\n}\n\n.prism-code {\n\tborder-radius: .25rem;\n\ttab-size: 2;\n\t-moz-tab-size: 2;\n}\n.highlight-line {\n\tbackground-color: #fffbdd;\n}\n\nul.tree,\nul.tree ul {\n\tlist-style: none;\n\tmargin: 0;\n\tpadding: 0;\n}\n\nul.tree ul {\n\tmargin-left: 12px;\n}\n\nul.tree li {\n\tmargin: 0;\n\tpadding: 0 8px;\n\tline-height: 20px;\n\tborder-left: 1px solid rgb(100, 100, 100);\n}\n\nul.tree li:last-child {\n\tborder-left: none;\n}\n\nul.tree li:before {\n\tposition: relative;\n\ttop: -4px;\n\theight: 12px;\n\twidth: 12px;\n\tcolor: white;\n\tborder-bottom: 1px solid rgb(100, 100, 100);\n\tcontent: \"\";\n\tdisplay: inline-block;\n\tleft: -4px;\n}\n\nul.tree li:last-child:before {\n\tborder-left: 1px solid rgb(100, 100, 100);\n}\n\n.markdown-body img {\n display: inline;\n}\n\n.markdown-body ol {\n\tlist-style: decimal;\n}\n\n.markdown-body ul {\n list-style: disc;\n}\n" }, "redirectURL": "", "headersSize": 45, "bodySize": 0, "_transferSize": 45 }, "cache": {}, "timings": { "blocked": 0.8958712278399616, "dns": -1, "connect": -1, "ssl": -1, "send": 0, "wait": 30.002158833667636, "receive": 0.07541943341493607 }, "serverIPAddress": "34.120.54.55", "_serverPort": 443, "connection": "4", "_fetchType": "Memory Cache", "_priority": "high" }, { "pageref": "page_0", "startedDateTime": "2022-06-29T22:32:05.316Z", "time": 33.565073972567916, "request": { "method": "GET", "url": "https://deno.land/gfm.css", "httpVersion": "HTTP/2", "cookies": [], "headers": [ { "name": "Accept", "value": "text/css,*/*;q=0.1" }, { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, { "name": "Host", "value": "deno.land" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Safari/605.1.15" }, { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, { "name": "Referer", "value": "https://deno.land/x/fresh@1.0.0/www" }, { "name": "Connection", "value": "keep-alive" } ], "queryString": [], "headersSize": 30, "bodySize": 0 }, "response": { "status": 200, "statusText": "", "httpVersion": "HTTP/2", "cookies": [], "headers": [ { "name": "Content-Encoding", "value": "gzip" }, { "name": "Date", "value": "Wed, 29 Jun 2022 22:32:05 GMT" }, { "name": "Content-Type", "value": "text/css" }, { "name": "Vary", "value": "Accept-Encoding" }, { "name": "Content-Length", "value": "3283" }, { "name": "Server", "value": "deno/europe-southwest1-a" } ], "content": { "size": 15681, "compression": 12389, "mimeType": "text/css", "text": ":root,[data-color-mode=light][data-light-theme=light],[data-color-mode=dark][data-dark-theme=light]{--color-canvas-default-transparent:rgba(255,255,255,0);--color-prettylights-syntax-comment:#6e7781;--color-prettylights-syntax-constant:#0550ae;--color-prettylights-syntax-entity:#8250df;--color-prettylights-syntax-storage-modifier-import:#24292f;--color-prettylights-syntax-entity-tag:#116329;--color-prettylights-syntax-keyword:#cf222e;--color-prettylights-syntax-string:#0a3069;--color-prettylights-syntax-variable:#953800;--color-prettylights-syntax-string-regexp:#116329;--color-prettylights-syntax-constant-other-reference-link:#0a3069;--color-fg-default:#24292f;--color-fg-muted:#57606a;--color-canvas-default:#fff;--color-canvas-subtle:#f6f8fa;--color-border-default:#d0d7de;--color-border-muted:#d8dee4;--color-neutral-muted:rgba(175,184,193,.2);--color-accent-fg:#0969da;--color-accent-emphasis:#0969da;--color-danger-fg:#cf222e}@media (prefers-color-scheme:light){[data-color-mode=auto][data-light-theme=light]{--color-canvas-default-transparent:rgba(255,255,255,0);--color-prettylights-syntax-comment:#6e7781;--color-prettylights-syntax-constant:#0550ae;--color-prettylights-syntax-entity:#8250df;--color-prettylights-syntax-storage-modifier-import:#24292f;--color-prettylights-syntax-entity-tag:#116329;--color-prettylights-syntax-keyword:#cf222e;--color-prettylights-syntax-string:#0a3069;--color-prettylights-syntax-variable:#953800;--color-prettylights-syntax-string-regexp:#116329;--color-prettylights-syntax-constant-other-reference-link:#0a3069;--color-fg-default:#24292f;--color-fg-muted:#57606a;--color-canvas-default:#fff;--color-canvas-subtle:#f6f8fa;--color-border-default:#d0d7de;--color-border-muted:#d8dee4;--color-neutral-muted:rgba(175,184,193,.2);--color-accent-fg:#0969da;--color-accent-emphasis:#0969da;--color-danger-fg:#cf222e}}@media (prefers-color-scheme:dark){[data-color-mode=auto][data-dark-theme=light]{--color-canvas-default-transparent:rgba(255,255,255,0);--color-prettylights-syntax-comment:#6e7781;--color-prettylights-syntax-constant:#0550ae;--color-prettylights-syntax-entity:#8250df;--color-prettylights-syntax-storage-modifier-import:#24292f;--color-prettylights-syntax-entity-tag:#116329;--color-prettylights-syntax-keyword:#cf222e;--color-prettylights-syntax-string:#0a3069;--color-prettylights-syntax-variable:#953800;--color-prettylights-syntax-string-regexp:#116329;--color-prettylights-syntax-constant-other-reference-link:#0a3069;--color-fg-default:#24292f;--color-fg-muted:#57606a;--color-canvas-default:#fff;--color-canvas-subtle:#f6f8fa;--color-border-default:#d0d7de;--color-border-muted:#d8dee4;--color-neutral-muted:rgba(175,184,193,.2);--color-accent-fg:#0969da;--color-accent-emphasis:#0969da;--color-danger-fg:#cf222e}}[data-color-mode=light][data-light-theme=dark],[data-color-mode=dark][data-dark-theme=dark]{--color-canvas-default-transparent:rgba(13,17,23,0);--color-prettylights-syntax-comment:#8b949e;--color-prettylights-syntax-constant:#79c0ff;--color-prettylights-syntax-entity:#d2a8ff;--color-prettylights-syntax-storage-modifier-import:#c9d1d9;--color-prettylights-syntax-entity-tag:#7ee787;--color-prettylights-syntax-keyword:#ff7b72;--color-prettylights-syntax-string:#a5d6ff;--color-prettylights-syntax-variable:#ffa657;--color-prettylights-syntax-string-regexp:#7ee787;--color-prettylights-syntax-constant-other-reference-link:#a5d6ff;--color-fg-default:#c9d1d9;--color-fg-muted:#8b949e;--color-canvas-default:#0d1117;--color-canvas-subtle:#161b22;--color-border-default:#30363d;--color-border-muted:#21262d;--color-neutral-muted:rgba(110,118,129,.4);--color-accent-fg:#58a6ff;--color-accent-emphasis:#1f6feb;--color-danger-fg:#f85149}@media (prefers-color-scheme:light){[data-color-mode=auto][data-light-theme=dark]{--color-canvas-default-transparent:rgba(13,17,23,0);--color-prettylights-syntax-comment:#8b949e;--color-prettylights-syntax-constant:#79c0ff;--color-prettylights-syntax-entity:#d2a8ff;--color-prettylights-syntax-storage-modifier-import:#c9d1d9;--color-prettylights-syntax-entity-tag:#7ee787;--color-prettylights-syntax-keyword:#ff7b72;--color-prettylights-syntax-string:#a5d6ff;--color-prettylights-syntax-variable:#ffa657;--color-prettylights-syntax-string-regexp:#7ee787;--color-prettylights-syntax-constant-other-reference-link:#a5d6ff;--color-fg-default:#c9d1d9;--color-fg-muted:#8b949e;--color-canvas-default:#0d1117;--color-canvas-subtle:#161b22;--color-border-default:#30363d;--color-border-muted:#21262d;--color-neutral-muted:rgba(110,118,129,.4);--color-accent-fg:#58a6ff;--color-accent-emphasis:#1f6feb;--color-danger-fg:#f85149}}@media (prefers-color-scheme:dark){[data-color-mode=auto][data-dark-theme=dark]{--color-canvas-default-transparent:rgba(13,17,23,0);--color-prettylights-syntax-comment:#8b949e;--color-prettylights-syntax-constant:#79c0ff;--color-prettylights-syntax-entity:#d2a8ff;--color-prettylights-syntax-storage-modifier-import:#c9d1d9;--color-prettylights-syntax-entity-tag:#7ee787;--color-prettylights-syntax-keyword:#ff7b72;--color-prettylights-syntax-string:#a5d6ff;--color-prettylights-syntax-variable:#ffa657;--color-prettylights-syntax-string-regexp:#7ee787;--color-prettylights-syntax-constant-other-reference-link:#a5d6ff;--color-fg-default:#c9d1d9;--color-fg-muted:#8b949e;--color-canvas-default:#0d1117;--color-canvas-subtle:#161b22;--color-border-default:#30363d;--color-border-muted:#21262d;--color-neutral-muted:rgba(110,118,129,.4);--color-accent-fg:#58a6ff;--color-accent-emphasis:#1f6feb;--color-danger-fg:#f85149}}.markdown-body{word-wrap:break-word;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;font-size:16px;line-height:1.5}.markdown-body:before{content:\"\";display:table}.markdown-body:after{clear:both;content:\"\";display:table}.markdown-body>:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdown-body a:not([href]){color:inherit;text-decoration:none}.markdown-body .absent{color:var(--color-danger-fg)}.markdown-body .anchor{float:left;margin-left:-20px;padding-right:4px;line-height:1}.markdown-body .anchor:focus{outline:0}.markdown-body p,.markdown-body blockquote,.markdown-body ul,.markdown-body ol,.markdown-body dl,.markdown-body table,.markdown-body pre,.markdown-body details{margin-top:0;margin-bottom:16px}.markdown-body hr{height:.25em;background-color:var(--color-border-default);border:0;margin:24px 0;padding:0}.markdown-body blockquote{color:var(--color-fg-muted);border-left:.25em solid var(--color-border-default);padding:0 1em}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:24px;margin-bottom:16px;font-weight:600;line-height:1.25}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{color:var(--color-fg-default);vertical-align:middle;visibility:hidden}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{visibility:visible}.markdown-body h1 tt,.markdown-body h1 code,.markdown-body h2 tt,.markdown-body h2 code,.markdown-body h3 tt,.markdown-body h3 code,.markdown-body h4 tt,.markdown-body h4 code,.markdown-body h5 tt,.markdown-body h5 code,.markdown-body h6 tt,.markdown-body h6 code{font-size:inherit;padding:0 .2em}.markdown-body h1{border-bottom:1px solid var(--color-border-muted);padding-bottom:.3em;font-size:2em}.markdown-body h2{border-bottom:1px solid var(--color-border-muted);padding-bottom:.3em;font-size:1.5em}.markdown-body h3{font-size:1.25em}.markdown-body h4{font-size:1em}.markdown-body h5{font-size:.875em}.markdown-body h6{color:var(--color-fg-muted);font-size:.85em}.markdown-body summary h1,.markdown-body summary h2,.markdown-body summary h3,.markdown-body summary h4,.markdown-body summary h5,.markdown-body summary h6{display:inline-block}.markdown-body summary h1,.markdown-body summary h2{border-bottom:0;padding-bottom:0}.markdown-body ul,.markdown-body ol{padding-left:2em}.markdown-body ul.no-list,.markdown-body ol.no-list{padding:0;list-style-type:none}.markdown-body ol[type=\"1\"]{list-style-type:decimal}.markdown-body ol[type=a]{list-style-type:lower-alpha}.markdown-body ol[type=i]{list-style-type:lower-roman}.markdown-body div>ol:not([type]){list-style-type:decimal}.markdown-body ul ul,.markdown-body ul ol,.markdown-body ol ol,.markdown-body ol ul{margin-top:0;margin-bottom:0}.markdown-body li>p{margin-top:16px}.markdown-body li+li{margin-top:.25em}.markdown-body dl{padding:0}.markdown-body dl dt{margin-top:16px;padding:0;font-size:1em;font-style:italic;font-weight:600}.markdown-body dl dd{margin-bottom:16px;padding:0 16px}.markdown-body table{width:100%;width:max-content;max-width:100%;display:block;overflow:auto}.markdown-body table th{font-weight:600}.markdown-body table th,.markdown-body table td{border:1px solid var(--color-border-default);padding:6px 13px}.markdown-body table tr{background-color:var(--color-canvas-default);border-top:1px solid var(--color-border-muted)}.markdown-body table tr:nth-child(2n){background-color:var(--color-canvas-subtle)}.markdown-body table img{background-color:rgba(0,0,0,0)}.markdown-body img{max-width:100%;box-sizing:content-box;background-color:var(--color-canvas-default)}.markdown-body img[align=right]{padding-left:20px}.markdown-body img[align=left]{padding-right:20px}.markdown-body .emoji{max-width:none;vertical-align:text-top;background-color:rgba(0,0,0,0)}.markdown-body span.frame{display:block;overflow:hidden}.markdown-body span.frame>span{float:left;width:auto;border:1px solid var(--color-border-default);margin:13px 0 0;padding:7px;display:block;overflow:hidden}.markdown-body span.frame span img{float:left;display:block}.markdown-body span.frame span span{clear:both;color:var(--color-fg-default);padding:5px 0 0;display:block}.markdown-body span.align-center{clear:both;display:block;overflow:hidden}.markdown-body span.align-center>span{text-align:center;margin:13px auto 0;display:block;overflow:hidden}.markdown-body span.align-center span img{text-align:center;margin:0 auto}.markdown-body span.align-right{clear:both;display:block;overflow:hidden}.markdown-body span.align-right>span{text-align:right;margin:13px 0 0;display:block;overflow:hidden}.markdown-body span.align-right span img{text-align:right;margin:0}.markdown-body span.float-left{float:left;margin-right:13px;display:block;overflow:hidden}.markdown-body span.float-left span{margin:13px 0 0}.markdown-body span.float-right{float:right;margin-left:13px;display:block;overflow:hidden}.markdown-body span.float-right>span{text-align:right;margin:13px auto 0;display:block;overflow:hidden}.markdown-body code,.markdown-body tt{background-color:var(--color-neutral-muted);border-radius:6px;margin:0;padding:.2em .4em;font-size:85%}.markdown-body code br,.markdown-body tt br{display:none}.markdown-body del code{-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}.markdown-body samp{font-size:85%}.markdown-body pre{word-wrap:normal}.markdown-body pre code{font-size:100%}.markdown-body pre>code{word-break:normal;white-space:pre;background:0 0;border:0;margin:0;padding:0}.markdown-body .highlight{margin-bottom:16px}.markdown-body .highlight pre{word-break:normal;margin-bottom:0}.markdown-body .highlight pre,.markdown-body pre{background-color:var(--color-canvas-subtle);border-radius:6px;padding:16px;font-size:85%;line-height:1.45;overflow:auto}.markdown-body pre code,.markdown-body pre tt{max-width:auto;line-height:inherit;word-wrap:normal;background-color:rgba(0,0,0,0);border:0;margin:0;padding:0;display:inline;overflow:visible}.markdown-body .csv-data td,.markdown-body .csv-data th{text-align:left;white-space:nowrap;padding:5px;font-size:12px;line-height:1;overflow:hidden}.markdown-body .csv-data .blob-num{text-align:right;background:var(--color-canvas-default);border:0;padding:10px 8px 9px}.markdown-body .csv-data tr{border-top:0}.markdown-body .csv-data th{background:var(--color-canvas-subtle);border-top:0;font-weight:600}.markdown-body [data-footnote-ref]:before{content:\"[\"}.markdown-body [data-footnote-ref]:after{content:\"]\"}.markdown-body .footnotes{color:var(--color-fg-muted);border-top:1px solid var(--color-border-default);font-size:12px}.markdown-body .footnotes ol{padding-left:16px}.markdown-body .footnotes li{position:relative}.markdown-body .footnotes li:target:before{pointer-events:none;content:\"\";border:2px solid var(--color-accent-emphasis);border-radius:6px;position:absolute;top:-8px;bottom:-8px;left:-24px;right:-8px}.markdown-body .footnotes li:target{color:var(--color-fg-default)}.markdown-body .footnotes .data-footnote-backref g-emoji{font-family:monospace}.markdown-body{background-color:var(--color-canvas-default);color:var(--color-fg-default)}.markdown-body a{color:var(--color-accent-fg);text-decoration:none}.markdown-body a:hover{text-decoration:underline}.markdown-body iframe{background-color:#fff;border:0;margin-bottom:16px}.markdown-body .highlight .token.keyword,.gfm-highlight .token.keyword{color:var(--color-prettylights-syntax-keyword)}.markdown-body .highlight .token.tag .token.class-name,.markdown-body .highlight .token.tag .token.script .token.punctuation,.gfm-highlight .token.tag .token.class-name,.gfm-highlight .token.tag .token.script .token.punctuation{color:var(--color-prettylights-syntax-storage-modifier-import)}.markdown-body .highlight .token.operator,.markdown-body .highlight .token.number,.markdown-body .highlight .token.boolean,.markdown-body .highlight .token.tag .token.punctuation,.markdown-body .highlight .token.tag .token.script .token.script-punctuation,.markdown-body .highlight .token.tag .token.attr-name,.gfm-highlight .token.operator,.gfm-highlight .token.number,.gfm-highlight .token.boolean,.gfm-highlight .token.tag .token.punctuation,.gfm-highlight .token.tag .token.script .token.script-punctuation,.gfm-highlight .token.tag .token.attr-name{color:var(--color-prettylights-syntax-constant)}.markdown-body .highlight .token.function,.gfm-highlight .token.function{color:var(--color-prettylights-syntax-entity)}.markdown-body .highlight .token.string,.gfm-highlight .token.string{color:var(--color-prettylights-syntax-string)}.markdown-body .highlight .token.comment,.gfm-highlight .token.comment{color:var(--color-prettylights-syntax-comment)}.markdown-body .highlight .token.class-name,.gfm-highlight .token.class-name{color:var(--color-prettylights-syntax-variable)}.markdown-body .highlight .token.regex,.gfm-highlight .token.regex{color:var(--color-prettylights-syntax-string)}.markdown-body .highlight .token.regex .regex-delimiter,.gfm-highlight .token.regex .regex-delimiter{color:var(--color-prettylights-syntax-constant)}.markdown-body .highlight .token.tag .token.tag,.markdown-body .highlight .token.property,.gfm-highlight .token.tag .token.tag,.gfm-highlight .token.property{color:var(--color-prettylights-syntax-entity-tag)}\n.markdown-body ul {\n list-style: disc\n}\n.markdown-body ol {\n list-style: numeric\n}\n" }, "redirectURL": "", "headersSize": 21, "bodySize": 3292, "_transferSize": 3313 }, "cache": {}, "timings": { "blocked": 0.4550784360617399, "dns": -1, "connect": -1, "ssl": -1, "send": 0, "wait": 32.9743264883291, "receive": 0.13566904817707837 }, "serverIPAddress": "34.120.54.55", "_serverPort": 443, "connection": "4", "_fetchType": "Network Load", "_priority": "high" }, { "pageref": "page_0", "startedDateTime": "2022-06-29T22:32:05.320Z", "time": 0.047375011490657926, "request": { "method": "GET", "url": "https://cdn.jsdelivr.net/npm/@docsearch/css@3", "httpVersion": "", "cookies": [], "headers": [], "queryString": [], "headersSize": -1, "bodySize": -1 }, "response": { "status": 200, "statusText": "", "httpVersion": "", "cookies": [], "headers": [ { "name": "Content-Encoding", "value": "gzip" }, { "name": "Timing-Allow-Origin", "value": "*" }, { "name": "Cache-Control", "value": "public, max-age=604800, s-maxage=43200" }, { "name": "Accept-Ranges", "value": "bytes" }, { "name": "Access-Control-Allow-Origin", "value": "*" }, { "name": "Cross-Origin-Resource-Policy", "value": "cross-origin" }, { "name": "Content-Length", "value": "3143" }, { "name": "Vary", "value": "Accept-Encoding" }, { "name": "Date", "value": "Wed, 29 Jun 2022 22:29:40 GMT" }, { "name": "Access-Control-Expose-Headers", "value": "*" }, { "name": "Age", "value": "33802" }, { "name": "Content-Type", "value": "text/css; charset=utf-8" }, { "name": "ETag", "value": "W/\"3506-oIMToQ/HZjEDKFKZMdESWRqPndQ\"" }, { "name": "X-Content-Type-Options", "value": "nosniff" } ], "content": { "size": 0, "compression": 0, "mimeType": "text/css" }, "redirectURL": "", "headersSize": -1, "bodySize": -1 }, "cache": {}, "timings": { "blocked": 0, "dns": -1, "connect": -1, "ssl": -1, "send": 0, "wait": 0.030083348974585533, "receive": 0.017291662516072392 }, "_fetchType": "Memory Cache" }, { "pageref": "page_0", "startedDateTime": "2022-06-29T22:32:05.322Z", "time": 0.04325000918470323, "request": { "method": "GET", "url": "https://deno.land/logo.svg?__frsh_c=2az4qb2r16e0", "httpVersion": "", "cookies": [], "headers": [], "queryString": [ { "name": "__frsh_c", "value": "2az4qb2r16e0" } ], "headersSize": -1, "bodySize": -1 }, "response": { "status": 200, "statusText": "", "httpVersion": "", "cookies": [], "headers": [ { "name": "Content-Type", "value": "image/svg+xml" }, { "name": "ETag", "value": "W/a939d4afcc8aef47f701d6cde27ca4d0036f7bd6" }, { "name": "Date", "value": "Wed, 29 Jun 2022 22:29:39 GMT" }, { "name": "Content-Encoding", "value": "gzip" }, { "name": "Cache-Control", "value": "public, max-age=31536000, immutable" }, { "name": "Vary", "value": "Accept-Encoding, If-None-Match" }, { "name": "Server", "value": "deno/europe-southwest1-a" } ], "content": { "size": 0, "compression": 0, "mimeType": "image/svg+xml" }, "redirectURL": "", "headersSize": -1, "bodySize": -1 }, "cache": {}, "timings": { "blocked": 0, "dns": -1, "connect": -1, "ssl": -1, "send": 0, "wait": 0.02541666617617011, "receive": 0.01783334300853312 }, "_fetchType": "Memory Cache" }, { "pageref": "page_0", "startedDateTime": "2022-06-29T22:32:05.323Z", "time": 0.03795835073105991, "request": { "method": "GET", "url": "https://cdn.jsdelivr.net/npm/@docsearch/js@3", "httpVersion": "", "cookies": [], "headers": [], "queryString": [], "headersSize": -1, "bodySize": -1 }, "response": { "status": 200, "statusText": "", "httpVersion": "", "cookies": [], "headers": [ { "name": "Content-Encoding", "value": "gzip" }, { "name": "Timing-Allow-Origin", "value": "*" }, { "name": "Cache-Control", "value": "public, max-age=604800, s-maxage=43200" }, { "name": "Accept-Ranges", "value": "bytes" }, { "name": "Access-Control-Allow-Origin", "value": "*" }, { "name": "Cross-Origin-Resource-Policy", "value": "cross-origin" }, { "name": "Content-Length", "value": "28973" }, { "name": "Vary", "value": "Accept-Encoding" }, { "name": "Date", "value": "Wed, 29 Jun 2022 22:29:40 GMT" }, { "name": "Access-Control-Expose-Headers", "value": "*" }, { "name": "Age", "value": "42485" }, { "name": "Content-Type", "value": "application/javascript; charset=utf-8" }, { "name": "ETag", "value": "W/\"1a1b7-JNEy47ZpSL/cfS+cpVESCY5adjA\"" }, { "name": "X-Content-Type-Options", "value": "nosniff" } ], "content": { "size": 0, "compression": 0, "mimeType": "application/javascript" }, "redirectURL": "", "headersSize": -1, "bodySize": -1 }, "cache": {}, "timings": { "blocked": 0, "dns": -1, "connect": -1, "ssl": -1, "send": 0, "wait": 0.017375015886500478, "receive": 0.02058333484455943 }, "_fetchType": "Memory Cache" }, { "pageref": "page_0", "startedDateTime": "2022-06-29T22:32:05.408Z", "time": 49.75235110032372, "request": { "method": "GET", "url": "https://denostatus.com/embed-status/light-sm", "httpVersion": "HTTP/2", "cookies": [], "headers": [ { "name": "Accept", "value": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" }, { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, { "name": "If-None-Match", "value": "W/\"50c-T8Muf0BfUvAM8EE8jHd6YL2syQQ\"" }, { "name": "Host", "value": "denostatus.com" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Safari/605.1.15" }, { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, { "name": "Referer", "value": "https://deno.land/" }, { "name": "Connection", "value": "keep-alive" } ], "queryString": [], "headersSize": 72, "bodySize": 0 }, "response": { "status": 304, "statusText": "", "httpVersion": "HTTP/2", "cookies": [], "headers": [ { "name": "Date", "value": "Wed, 29 Jun 2022 22:22:00 GMT" }, { "name": "ETag", "value": "\"50c-T8Muf0BfUvAM8EE8jHd6YL2syQQ\"" }, { "name": "Cache-Control", "value": "public, max-age=0, must-revalidate" }, { "name": "x-vercel-cache", "value": "STALE" }, { "name": "x-vercel-id", "value": "cdg1::cle1::p22sn-1656541925549-3e2f0f75e431" }, { "name": "Server", "value": "Vercel" } ], "content": { "size": 0, "compression": 0, "mimeType": "text/plain", "text": "" }, "redirectURL": "", "headersSize": 57, "bodySize": 0, "_transferSize": 57 }, "cache": {}, "timings": { "blocked": 0.9574613650329411, "dns": -1, "connect": -1, "ssl": -1, "send": 0, "wait": 48.717063618823886, "receive": 0.07782611646689475 }, "serverIPAddress": "76.76.21.21", "_serverPort": 443, "connection": "3", "_fetchType": "Memory Cache", "_priority": "high" }, { "pageref": "page_0", "startedDateTime": "2022-06-29T22:32:05.408Z", "time": 49.75235110032372, "request": { "method": "GET", "url": "https://denostatus.com/embed-status/light-sm", "httpVersion": "HTTP/2", "cookies": [], "headers": [ { "name": "Accept", "value": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" }, { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, { "name": "If-None-Match", "value": "W/\"50c-T8Muf0BfUvAM8EE8jHd6YL2syQQ\"" }, { "name": "Host", "value": "denostatus.com" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Safari/605.1.15" }, { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, { "name": "Referer", "value": "https://deno.land/" }, { "name": "Connection", "value": "keep-alive" } ], "queryString": [], "headersSize": 72, "bodySize": 0 }, "response": { "status": 304, "statusText": "", "httpVersion": "HTTP/2", "cookies": [], "headers": [ { "name": "Date", "value": "Wed, 29 Jun 2022 22:22:00 GMT" }, { "name": "ETag", "value": "\"50c-T8Muf0BfUvAM8EE8jHd6YL2syQQ\"" }, { "name": "Cache-Control", "value": "public, max-age=0, must-revalidate" }, { "name": "x-vercel-cache", "value": "STALE" }, { "name": "x-vercel-id", "value": "cdg1::cle1::p22sn-1656541925549-3e2f0f75e431" }, { "name": "Server", "value": "Vercel" } ], "content": { "size": 0, "compression": 0, "mimeType": "text/plain", "text": "" }, "redirectURL": "", "headersSize": 57, "bodySize": 0, "_transferSize": 57 }, "cache": {}, "timings": { "blocked": 0.9574613650329411, "dns": -1, "connect": -1, "ssl": -1, "send": 0, "wait": 48.717063618823886, "receive": 0.07782611646689475 }, "serverIPAddress": "76.76.21.21", "_serverPort": 443, "connection": "3", "_fetchType": "Memory Cache", "_priority": "high" }, { "pageref": "page_0", "startedDateTime": "2022-06-29T22:32:05.472Z", "time": 0.045249995309859514, "request": { "method": "GET", "url": "https://denostatus.com/_next/static/css/701f7d076a5db546.css", "httpVersion": "", "cookies": [], "headers": [], "queryString": [], "headersSize": -1, "bodySize": -1 }, "response": { "status": 200, "statusText": "", "httpVersion": "", "cookies": [], "headers": [ { "name": "Access-Control-Allow-Origin", "value": "*" }, { "name": "Content-Type", "value": "text/css; charset=utf-8" }, { "name": "Content-Disposition", "value": "inline; filename=\"701f7d076a5db546.css\"" }, { "name": "Age", "value": "0" }, { "name": "Content-Encoding", "value": "br" }, { "name": "Cache-Control", "value": "public,max-age=31536000,immutable" }, { "name": "Date", "value": "Wed, 29 Jun 2022 22:29:40 GMT" }, { "name": "ETag", "value": "W/\"b55811aeba4decb16a0d8763a5c81600\"" }, { "name": "x-vercel-cache", "value": "MISS" }, { "name": "x-matched-path", "value": "/_next/static/css/701f7d076a5db546.css" }, { "name": "Server", "value": "Vercel" }, { "name": "x-vercel-id", "value": "cdg1:cdg1::p22sn-1656541780447-7d19314f6c72" }, { "name": "Strict-Transport-Security", "value": "max-age=63072000" } ], "content": { "size": 0, "compression": 0, "mimeType": "text/css" }, "redirectURL": "", "headersSize": -1, "bodySize": -1 }, "cache": {}, "timings": { "blocked": 0, "dns": -1, "connect": -1, "ssl": -1, "send": 0, "wait": 0.023500004317611456, "receive": 0.02174999099224806 }, "_fetchType": "Memory Cache" } ] } } ```
crowlKats commented 2 years ago

Speed issues have been fixed, so this shouldnt be a problem anymore

mohsen1 commented 2 years ago

@crowlKats I don't think this is fast enough.

2 seconds to the first pixel Screen Shot 2022-08-25 at 12 00 51 PM
Again, compare to the JS asset to CDN. Screen Shot 2022-08-25 at 12 01 05 PM
Compare to npm for instance Screen Shot 2022-08-25 at 12 02 54 PM
kitsonk commented 2 years ago

There are a few things going on here:

We will continue to try to improve things, and I will take a specific look at the page you are pointing out to see if we are not caching as expected, but we closed this issue as it was posted before we specifically implemented improvements to the caching in the API layer.

mohsen1 commented 2 years ago

Thank you for explaining! Hope my positive intent is obvious. I want Deno land to be fast because I love Deno!

Since there is a finite number of files on denoland, wouldn't it make sense to warm the cache beforehand? Maybe not for all files but partially based on historic view patterns?

kitsonk commented 2 years ago

Of course you positive intent is obvious.

We currently have 3.6 million symbols in modules index and about 2 million modules that can be doc'ed, and already have lazily cached 190k pages. So there is a finite number of files, but not small finite number.

We are working on a caching layer for Deploy that will give us the ability to persist some of "hot" pages in a LRU cache that is globally distributed and shared between deployments. That will help in part.

The only thing that is realistic in the near term though, thinking about what you mentioned, is that when an author publishes a new version, we clear down all the cached pages and other data for all the previous versions, as that data references the "latest" version. We can and should rebuild those pages for the index and default root modules for that module, as that is the most time consuming part we have control over.