Skip to content

Commit 8391a8a

Browse files
committed
wip: large payload performance improvements
1 parent 53f8658 commit 8391a8a

File tree

12 files changed

+80
-28
lines changed

12 files changed

+80
-28
lines changed

packages/graphql-playground-react/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@
119119
"apollo-link-ws": "1.0.4",
120120
"calculate-size": "^1.1.1",
121121
"classnames": "^2.2.5",
122-
"codemirror": "^5.36.0",
122+
"codemirror": "^5.38.0",
123123
"codemirror-graphql": "timsuchanek/codemirror-graphql#details-fix",
124124
"copy-to-clipboard": "^3.0.8",
125125
"cuid": "^1.3.8",

packages/graphql-playground-react/src/components/CodeGenerationPopup/CodeGenerationPopupCode.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ class CodeGenerationPopupCode extends React.Component<
5858
options={{
5959
height: 'auto',
6060
mode: 'shell',
61-
viewportMargin: Infinity,
6261
theme: codeTheme,
6362
}}
6463
/>
@@ -70,7 +69,6 @@ class CodeGenerationPopupCode extends React.Component<
7069
value={code}
7170
options={{
7271
height: 'auto',
73-
viewportMargin: Infinity,
7472
mode,
7573
theme: codeTheme,
7674
}}

packages/graphql-playground-react/src/components/Playground.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ export class Playground extends React.PureComponent<Props & ReduxProps, State> {
154154
})
155155
this.backoff.start()
156156
},
157-
300,
157+
600,
158158
{ trailing: true }, // important to not miss the last call
159159
) as any
160160

packages/graphql-playground-react/src/components/Playground/ResultViewer.tsx

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@ export class ResultViewer extends React.Component<Props, {}> {
2828
private viewer: any
2929

3030
componentDidMount() {
31-
// Lazily require to ensure requiring GraphiQL outside of a Browser context
32-
// does not produce an error.
3331
const CodeMirror = require('codemirror')
3432
require('codemirror/addon/fold/foldgutter')
3533
require('codemirror/addon/fold/brace-fold')
@@ -96,7 +94,6 @@ export class ResultViewer extends React.Component<Props, {}> {
9694
.result-codemirror :global(.CodeMirror) {
9795
@p: .bbox, .pl38;
9896
background: none;
99-
position: relative !important;
10097
}
10198
`}</style>
10299
</div>

packages/graphql-playground-react/src/components/Playground/Results.tsx

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,14 @@ export interface ReduxProps {
1717
responses: List<ResponseRecord>
1818
}
1919

20+
const defaultResponseRecord = new ResponseRecord({
21+
date: '',
22+
time: new Date(),
23+
resultID: 'default-id',
24+
})
25+
2026
const Results: React.SFC<Props & ReduxProps> = ({ setRef, responses }) => {
27+
const response1 = responses.get(0) || defaultResponseRecord
2128
return (
2229
<div
2330
className={cn('result-window', {
@@ -61,27 +68,37 @@ const Results: React.SFC<Props & ReduxProps> = ({ setRef, responses }) => {
6168
position: relative;
6269
}
6370
`}</style>
64-
{responses.map(response => (
65-
<Response
66-
key={
67-
responses.size === 1
68-
? 'first'
69-
: response.resultID || String(response.time)
70-
}
71-
>
71+
{responses.size <= 1 ? (
72+
<Response key={'first'}>
7273
{responses.size > 1 &&
73-
response.time && (
74+
response1.time && (
7475
<div className="subscription-time">
7576
<div className="subscription-time-text">
76-
{ageOfDate(response.time)}
77+
{ageOfDate(response1.time)}
7778
</div>
7879
</div>
7980
)}
8081
<div className="result-viewer-wrapper">
81-
<ResultViewer value={response.date} />
82+
<ResultViewer value={response1.date} />
8283
</div>
8384
</Response>
84-
))}
85+
) : (
86+
responses.map(response => (
87+
<Response key={response.resultID || String(response.time)}>
88+
{responses.size > 1 &&
89+
response.time && (
90+
<div className="subscription-time">
91+
<div className="subscription-time-text">
92+
{ageOfDate(response.time)}
93+
</div>
94+
</div>
95+
)}
96+
<div className="result-viewer-wrapper">
97+
<ResultViewer value={response.date} />
98+
</div>
99+
</Response>
100+
))
101+
)}
85102
</div>
86103
)
87104
}

packages/graphql-playground-react/src/state/history/reducers.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { OrderedMap } from 'immutable'
1+
import { OrderedMap, List } from 'immutable'
22
import { handleActions } from 'redux-actions'
33
import * as cuid from 'cuid'
44
import { SessionStateProps } from '../sessions/reducers'
@@ -13,11 +13,12 @@ export default handleActions(
1313
state.setIn([sessionId, 'starred'], !state.getIn([sessionId, 'starred'])),
1414
ADD_HISTORY_ITEM: (state, { payload: { session } }) => {
1515
const id = cuid()
16-
return state.set(
16+
return state.slice(-40).set(
1717
id,
1818
session.merge({
1919
id,
2020
date: new Date(),
21+
responses: List(),
2122
}),
2223
)
2324
},

packages/graphql-playground-react/src/state/localStorage.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ export function serializeState(store) {
99
localStorage.setItem('graphql-playground', JSON.stringify(state))
1010
}
1111
},
12-
300,
12+
1000,
1313
{ trailing: true },
1414
) as any
1515
}

packages/graphql-playground-react/src/state/sessions/fetchingSagas.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ function* runQuerySaga(action) {
130130
yield put(setSubscriptionActive(isSubscription(operation)))
131131
yield put(startQuery())
132132
let headers = parseHeaders(session.headers)
133-
if (session.tracingSupported) {
133+
if (session.tracingSupported && session.responseTracingOpen) {
134134
headers = set(headers, 'X-Apollo-Tracing', '1')
135135
}
136136
const { link, subscriptionClient } = linkCreator({

packages/graphql-playground-react/src/state/sessions/reducers.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,12 +95,13 @@ export class Session extends Record(getDefaultSession('')) {
9595
const override: any = {
9696
queryRunning: false,
9797
subscriptionActive: false,
98+
responseExtensions: {},
9899
}
99100
// dont serialize very big responses as the localStorage size is limited
100101
if (
101102
obj.responses &&
102103
obj.responses.size > 0 &&
103-
(obj.responses.size > 20 || obj.responses.get(0).date.length > 20000)
104+
(obj.responses.size > 20 || obj.responses.get(0).date.length > 2000)
104105
) {
105106
override.responses = List()
106107
}
@@ -195,7 +196,6 @@ const reducer = handleActions(
195196
START_QUERY: state => {
196197
return state
197198
.setIn(['sessions', getSelectedSessionId(state), 'queryRunning'], true)
198-
.setIn(['sessions', getSelectedSessionId(state), 'responses'], List())
199199
.setIn(
200200
['sessions', getSelectedSessionId(state), 'responseExtensions'],
201201
undefined,

packages/graphql-playground-react/src/styles/graphiql_dark.css

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1458,3 +1458,29 @@ li.CodeMirror-hint-active {
14581458
max-width: 50vw;
14591459
margin-right: 10px;
14601460
}
1461+
1462+
/** NEW STYLES - @huv1k please merge into the dynamic styles branch **/
1463+
1464+
.graphiql-container .resultWrap .result-window {
1465+
overflow: visible;
1466+
max-height: none !important;
1467+
}
1468+
1469+
.graphiql-container .resultWrap .result-window > div {
1470+
display: flex;
1471+
flex: 1;
1472+
height: 100%;
1473+
}
1474+
1475+
.graphiql-container .resultWrap .result-viewer-wrapper,
1476+
.graphiql-container .resultWrap .result-viewer-wrapper .result-codemirror {
1477+
position: relative;
1478+
display: flex;
1479+
flex: 1;
1480+
height: 100%;
1481+
}
1482+
1483+
.graphiql-container .resultWrap .CodeMirror {
1484+
height: 100%;
1485+
position: absolute !important;
1486+
}

0 commit comments

Comments
 (0)