Skip to content

Commit da38f9b

Browse files
committed
optimization.
1 parent 8157c91 commit da38f9b

File tree

2 files changed

+30
-41
lines changed

2 files changed

+30
-41
lines changed

redirect.go

Lines changed: 26 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -121,43 +121,41 @@ func (r *Redirect) Route(name string, config ...RedirectConfig) error {
121121
}
122122

123123
// Flash messages
124-
if len(r.messages) > 0 {
124+
if len(r.messages) > 0 || len(r.oldInput) > 0 {
125125
messageText := bytebufferpool.Get()
126126
defer bytebufferpool.Put(messageText)
127127

128+
// flash messages
128129
i := 1
129130
for k, v := range r.messages {
130-
_, _ = messageText.WriteString("k:" + k + ":" + v)
131+
if i != 1 {
132+
_, _ = messageText.WriteString("k:")
133+
}
134+
135+
_, _ = messageText.WriteString(k + ":" + v)
131136
if len(r.messages) != i {
132137
_, _ = messageText.WriteString(",")
133138
}
134139
i++
135140
}
136141

137-
r.c.Cookie(&Cookie{
138-
Name: "fiber_flash",
139-
Value: r.c.app.getString(messageText.Bytes()),
140-
SessionOnly: true,
141-
})
142-
}
143-
144-
// Old input data
145-
if len(r.oldInput) > 0 {
146-
inputText := bytebufferpool.Get()
147-
defer bytebufferpool.Put(inputText)
148-
149-
i := 1
142+
// old input data
143+
i = 1
150144
for k, v := range r.oldInput {
151-
_, _ = inputText.WriteString("k:" + k + ":" + v)
145+
if i == 1 {
146+
_, _ = messageText.WriteString("k:")
147+
}
148+
149+
_, _ = messageText.WriteString("k:old_input_data_" + k + ":" + v)
152150
if len(r.oldInput) != i {
153-
_, _ = inputText.WriteString(",")
151+
_, _ = messageText.WriteString(",")
154152
}
155153
i++
156154
}
157155

158156
r.c.Cookie(&Cookie{
159-
Name: "fiber_flash_old_input",
160-
Value: r.c.app.getString(inputText.Bytes()),
157+
Name: "fiber_flash",
158+
Value: r.c.app.getString(messageText.Bytes()),
161159
SessionOnly: true,
162160
})
163161
}
@@ -198,28 +196,20 @@ func (r *Redirect) setFlash() {
198196
// parse flash messages
199197
if r.c.Cookies("fiber_flash") != "" {
200198
messages := strings.Split(r.c.Cookies("fiber_flash"), ",k:")
201-
r.c.flashMessages = make(map[string]string, len(messages))
202-
203-
for _, msg := range messages {
204-
msg = strings.Replace(msg, "k:", "", 1)
205-
splitMsg := strings.Split(msg, ":")
206-
207-
r.c.flashMessages[splitMsg[0]] = splitMsg[1]
208-
}
209-
}
210-
211-
// parse old input data
212-
if r.c.Cookies("fiber_flash_old_input") != "" {
213-
messages := strings.Split(r.c.Cookies("fiber_flash_old_input"), ",k:")
214-
r.c.oldInput = make(map[string]string, len(messages))
199+
r.c.flashMessages = make(map[string]string)
200+
r.c.oldInput = make(map[string]string)
215201

216202
for _, msg := range messages {
217-
msg = strings.Replace(msg, "k:", "", 1)
218203
splitMsg := strings.Split(msg, ":")
219204

220-
r.c.oldInput[splitMsg[0]] = splitMsg[1]
205+
// check old input data
206+
if strings.HasPrefix(msg, "old_input_data_") {
207+
r.c.oldInput[splitMsg[0][15:]] = splitMsg[1]
208+
} else {
209+
r.c.flashMessages[splitMsg[0]] = splitMsg[1]
210+
}
221211
}
222212
}
223213

224-
r.c.ClearCookie("fiber_flash", "fiber_flash_old_input")
214+
r.c.ClearCookie("fiber_flash")
225215
}

redirect_test.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -303,11 +303,11 @@ func Benchmark_Redirect_Route_WithFlashMessages(b *testing.B) {
303303
utils.AssertEqual(b, 302, c.Response().StatusCode())
304304
utils.AssertEqual(b, "/user", string(c.Response().Header.Peek(HeaderLocation)))
305305

306-
equal := string(c.Response().Header.Peek(HeaderSetCookie)) == "fiber_flash=k:success:1,k:message:test; path=/; SameSite=Lax" || string(c.Response().Header.Peek(HeaderSetCookie)) == "fiber_flash=k:message:test,k:success:1; path=/; SameSite=Lax"
306+
equal := string(c.Response().Header.Peek(HeaderSetCookie)) == "fiber_flash=success:1,k:message:test; path=/; SameSite=Lax" || string(c.Response().Header.Peek(HeaderSetCookie)) == "fiber_flash=message:test,k:success:1; path=/; SameSite=Lax"
307307
utils.AssertEqual(b, true, equal)
308308

309309
c.Redirect().setFlash()
310-
utils.AssertEqual(b, "fiber_flash=; expires=Tue, 10 Nov 2009 23:00:00 GMT; fiber_flash_old_input=; expires=Tue, 10 Nov 2009 23:00:00 GMT", string(c.Response().Header.Peek(HeaderSetCookie)))
310+
utils.AssertEqual(b, "fiber_flash=; expires=Tue, 10 Nov 2009 23:00:00 GMT", string(c.Response().Header.Peek(HeaderSetCookie)))
311311
}
312312

313313
// go test -v -run=^$ -bench=Benchmark_Redirect_Route_WithFlashMessages -benchmem -count=4
@@ -319,8 +319,7 @@ func Benchmark_Redirect_setFlash(b *testing.B) {
319319

320320
c := app.NewCtx(&fasthttp.RequestCtx{}).(*DefaultCtx)
321321

322-
c.Request().Header.Set(HeaderCookie, "fiber_flash_old_input=k:name:tom,k:id:1")
323-
c.Request().Header.Set(HeaderCookie, "fiber_flash=k:success:1,k:message:test")
322+
c.Request().Header.Set(HeaderCookie, "fiber_flash=success:1,k:message:test,k:old_input_data_name:tom,k:old_input_data_id:1")
324323

325324
b.ReportAllocs()
326325
b.ResetTimer()
@@ -329,7 +328,7 @@ func Benchmark_Redirect_setFlash(b *testing.B) {
329328
c.Redirect().setFlash()
330329
}
331330

332-
utils.AssertEqual(b, "fiber_flash=; expires=Tue, 10 Nov 2009 23:00:00 GMT; fiber_flash_old_input=; expires=Tue, 10 Nov 2009 23:00:00 GMT", string(c.Response().Header.Peek(HeaderSetCookie)))
331+
utils.AssertEqual(b, "fiber_flash=; expires=Tue, 10 Nov 2009 23:00:00 GMT", string(c.Response().Header.Peek(HeaderSetCookie)))
333332

334333
utils.AssertEqual(b, "1", c.Redirect().Message("success"))
335334
utils.AssertEqual(b, "test", c.Redirect().Message("message"))

0 commit comments

Comments
 (0)