Piszę funkcję porównywania ciągów stałych (dla node.js) i chciałbym wyłączyć kompilator optymalizujący V8 dla tej pojedynczej funkcji; używanie flag linii poleceń nie wchodzi w grę.Jak wyłączyć kompilator optymalizujący V8
wiem, że przy użyciu with{}
(lub try/catch) blok będzie wyłączyć kompilatora teraz, ale obawiam się, że to „funkcja” (błąd) zostanie rozwiązany w przyszłych wersjach.
Czy istnieje niezmienny (i udokumentowany) sposób wyłączenia kompilatora optymalizacji V8?
przykład funkcja:
function constantTimeStringCompare(a, b) {
// By adding a `with` block here, we disable v8's optimizing compiler.
// Using Object.create(null) ensures we don't have any object prototype properties getting in our way.our way.
with (Object.create(null)){
var valid = true,
length = Math.max(a.length, b.length);
while (length--) {
valid &= a.charCodeAt(length) === b.charCodeAt(length);
}
// returns true if valid == 1, false if valid == 0
return !!valid;
}
}
I perf test tylko dla zabawy.
Porównanie czasu stałego z pętlą 'while' w nim ... ಠ_ಠ (może to nie jest prawdziwe podejście?) – Pointy
... także jak" poprawny "byłby kiedykolwiek czymś innym niż boolowskim? Być może zwracam zbyt dużą uwagę na kod :) – Pointy
Część "stała" odnosi się do długości łańcuchów wejściowych. Być może powinienem po prostu zwrócić false, jeśli długości nie pasują. Nie widzę problemu z pętlą 'while'. –