Improve serverless type check performance (#641)

Change loop for checking tile type extension to object lookup
This commit is contained in:
zstadler
2026-02-17 19:47:24 +02:00
committed by GitHub
parent 36bb8046b5
commit 4d19110bee
2 changed files with 45 additions and 37 deletions

View File

@@ -11,6 +11,7 @@ import {
ResolvedValueCache, ResolvedValueCache,
Source, Source,
TileType, TileType,
tileTypeExt,
} from "pmtiles"; } from "pmtiles";
import { pmtiles_path, tile_path } from "../../shared/index"; import { pmtiles_path, tile_path } from "../../shared/index";
@@ -191,25 +192,28 @@ export const handlerRaw = async (
return apiResp(404, "", false, headers); return apiResp(404, "", false, headers);
} }
for (const pair of [ const extToType: Record<string, TileType> = {
[TileType.Mvt, "mvt"], mvt: TileType.Mvt,
[TileType.Png, "png"], pbf: TileType.Mvt, // allow this for now. Eventually we will delete this in favor of .mvt
[TileType.Jpeg, "jpg"], png: TileType.Png,
[TileType.Webp, "webp"], jpg: TileType.Jpeg,
[TileType.Avif, "avif"], webp: TileType.Webp,
]) { avif: TileType.Avif,
if (header.tileType === pair[0] && ext !== pair[1]) { };
if (header.tileType === TileType.Mvt && ext === "pbf") {
// allow this for now. Eventually we will delete this in favor of .mvt const expectedType = extToType[ext];
continue; if (
} header.tileType !== expectedType &&
return apiResp( tileTypeExt(header.tileType) !== ""
400, ) {
`Bad request: requested .${ext} but archive has type .${pair[1]}`, return apiResp(
false, 400,
headers `Bad request: requested .${ext} but archive has type ${tileTypeExt(
); header.tileType
} )}`,
false,
headers
);
} }
const tileResult = await p.getZxy(tile[0], tile[1], tile[2]); const tileResult = await p.getZxy(tile[0], tile[1], tile[2]);

View File

@@ -6,6 +6,7 @@ import {
ResolvedValueCache, ResolvedValueCache,
Source, Source,
TileType, TileType,
tileTypeExt,
} from "pmtiles"; } from "pmtiles";
import { pmtiles_path, tile_path } from "../../shared/index"; import { pmtiles_path, tile_path } from "../../shared/index";
@@ -169,24 +170,27 @@ export default {
return cacheableResponse(undefined, cacheableHeaders, 404); return cacheableResponse(undefined, cacheableHeaders, 404);
} }
for (const pair of [ const extToType: Record<string, TileType> = {
[TileType.Mvt, "mvt"], mvt: TileType.Mvt,
[TileType.Png, "png"], pbf: TileType.Mvt, // allow this for now. Eventually we will delete this in favor of .mvt
[TileType.Jpeg, "jpg"], png: TileType.Png,
[TileType.Webp, "webp"], jpg: TileType.Jpeg,
[TileType.Avif, "avif"], webp: TileType.Webp,
]) { avif: TileType.Avif,
if (pHeader.tileType === pair[0] && ext !== pair[1]) { };
if (pHeader.tileType === TileType.Mvt && ext === "pbf") {
// allow this for now. Eventually we will delete this in favor of .mvt const expectedType = extToType[ext];
continue; if (
} pHeader.tileType !== expectedType &&
return cacheableResponse( tileTypeExt(pHeader.tileType) !== ""
`Bad request: requested .${ext} but archive has type .${pair[1]}`, ) {
cacheableHeaders, return cacheableResponse(
400 `Bad request: requested .${ext} but archive has type ${tileTypeExt(
); pHeader.tileType
} )}`,
cacheableHeaders,
400
);
} }
const tiledata = await p.getZxy(tile[0], tile[1], tile[2]); const tiledata = await p.getZxy(tile[0], tile[1], tile[2]);