Постоянный запрос используется для улучшения производительности сети GraphQL за счет уменьшения размера запроса.
Вместо того, чтобы отправлять полный запрос, который может быть очень длинным, вы отправляете хеш на сервер GraphQL, который будет извлекать полный запрос из хранилища значения ключа, используя хеш в качестве ключа.
Хранилище значений ключей может быть memcached
, redis
и т. Д.
Сервер Apollo поставляется с автоматическими постоянными запросами из коробки. Я рекомендовал дает попробовать. Они опубликовали блог об этом. https://blog.apollographql.com/automatic-persisted-queries-and-cdn-caching-with-apollo-server-2-0-bf42b3a313de
Если вы хотите построить ваше собственное решение, вы можете использовать этот пакет для хеширования самостоятельно https://www.npmjs.com/package/hash.js
В целом да код C считают кодом C++.
Но C не является собственным подмножеством в строгом смысле. Существует несколько исключений.
Вот некоторые допустимые вещи в C, которые не допустимы в C++:
int *new;//<-- new is not a keyword in C
char *p = malloc(1024); //void * to char* without cast
Также существует больше примеров, но Вы получаете идею.
Я ранее записал более обширный ответ в подобном вопросе здесь.
Также обратите внимание, что C99 добавляет несколько опций, которые не разрешены в C++ (или только поддерживаются с помощью расширений поставщика), такой как встроенный _Complex
и _Imaginary
типы данных, массивы переменной длины (массивы измерили в а не время компиляции во время выполнения), участники массива с переменными границами (массивы, объявленные как последний член структуры, которая может содержать неуказанное число элементов), и т.д.
Для исчерпывающего списка несовместимостей между C и C++, включая изменения с C99, см. http://david.tribble.com/text/cdiffs.htm.
Еще много:
C позволяет рекурсивные вызовы основного, C++ не делает
char foo[3] = "abc"
легальный C, не C++
sizeof('A') == sizeof(int)
верно в C и лжи в C++
Существует еще больше изменений с C99
Править: Я нашел сообщение, которое перечисляет большинство различий. http://c-faq.com/misc/cplusplus.nr.html
Сводка того, почему C не является собственным подмножеством C++:
void *
к любому объектному/неполному типуstruct
s становление ограниченным по объемуstruct
становление тегов typedef
sint
правилаmain
//
комментарииchar
и нет int
и т.д. Одной вещью, которая отделяет два и подходит в повседневной разработке, является искажение имени функции и связь. Функция C, скомпилированная с компилятором C, не доступна для C++, если прототип не повышен с extern "C"
.
Я думаю, что это может быть более корректно, чтобы сказать, что ANSI C является подмножеством C++. Не K&R C.
Несколько других вещей, которые являются допустимым C, но не C++:
int func();
func(0,0); //Error in C++, but not in C
Также не недооценивайте влияние C++, имеющего больше ключевых слов:
int new; //Obviously an error in C++
См. также это верный, что нет никакой потребности изучить C, потому что C++ содержит все. Существует большое общее подмножество C и C++; существует много расширений в C++, которые не находятся в C; существуют некоторые биты в C, которые не находятся в C++ (главным образом биты, которые Вы не хотите использовать); и существуют некоторые биты, которые находятся в C и C++, но отличаются.
typedef struct {
int a, b, c;
} st;
st s = {
.a = 1,
.b = 2,
};
Это - действительный код C, который не компилирует в большинстве компиляторов C++. Это не часть спецификации C++ насколько я знаю. Однако некоторые компиляторы C++ "либеральны" с определенными частями языка и позволяют вещи, они не были должны, так же, как много пропускают несколько нюансов, которые находятся в спецификации, но почти никогда не используются.