Jinja: κ°€μ Έμ˜¨ ν…œν”Œλ¦Ώμ΄ λ„ˆλ¬΄ μ˜€λž«λ™μ•ˆ μΊμ‹œλ˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

에 λ§Œλ“  2013λ…„ 07μ›” 16일  Β·  4μ½”λ©˜νŠΈ  Β·  좜처: pallets/jinja

main.htmlμ΄λΌλŠ” ν…œν”Œλ¦Ώμ΄ μžˆμŠ΅λ‹ˆλ‹€. 이것은 (μ»¨ν…μŠ€νŠΈ 없이) module_aλΌλŠ” λͺ¨λ“ˆμ„ {% imports %} ν•©λ‹ˆλ‹€. module_a {%λŠ” %} module_bλ₯Ό 같은 λ°©μ‹μœΌλ‘œ κ°€μ Έμ˜΅λ‹ˆλ‹€.

module_aλ₯Ό λ³€κ²½ν•˜λ©΄ ν…œν”Œλ¦Ώ λ‘œλ”κ°€ 이λ₯Ό μΈμ‹ν•˜κ³  λ‹€μ‹œ λ‘œλ“œν•©λ‹ˆλ‹€.

module_bλ₯Ό λ³€κ²½ν•˜λ©΄ ν…œν”Œλ¦Ώ λ‘œλ”κ°€ μΈμ‹ν•˜μ§€ λͺ»ν•©λ‹ˆλ‹€. ν”„λ‘œμ„ΈμŠ€λ₯Ό λ‹€μ‹œ μ‹œμž‘ν•΄μ•Ό ν•©λ‹ˆλ‹€.

이것은 module_a에 λŒ€ν•΄ μƒμ„±λœ μ½”λ“œκ°€ root() ν•¨μˆ˜μ—μ„œ κ°€μ Έμ˜€κΈ°λ₯Ό μˆ˜ν–‰ν•˜κΈ° λ•Œλ¬Έμ΄λΌκ³  μƒκ°ν•©λ‹ˆλ‹€. get_template은 module_aκ°€ μ΅œμ‹  μƒνƒœμž„μ„ ν™•μΈν•˜λ―€λ‘œ λ‹€μ‹œ λ‘œλ“œν•˜μ§€ μ•ŠμœΌλ―€λ‘œ root() ν•¨μˆ˜λ₯Ό λ‹€μ‹œ μ‹€ν–‰ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

이 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 방법을 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. λΆ„λͺ…νžˆ get_template에 λŒ€ν•œ 각 ν˜ΈμΆœμ—μ„œ root()λ₯Ό ν˜ΈμΆœν•˜λŠ” 것은 쒋지 μ•ŠμŠ΅λ‹ˆλ‹€. κ°€μž₯ μ™„μ „ν•œ μ†”λ£¨μ…˜μ€ 각 ν…œν”Œλ¦Ώμ˜ 쒅속성을 μΆ”μ ν•˜λŠ” κ²ƒμ΄μ§€λ§Œ λ§Žμ€ μž‘μ—…μ΄ ν•„μš”ν•©λ‹ˆλ‹€.

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

λ¬Έμ œλŠ” κ°€μ Έμ˜€κΈ°κ°€ μΊμ‹œλ˜μ§€λ§Œ μΆ”μ λ˜μ§€ μ•ŠλŠ”λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. 이 문제λ₯Ό μ²˜λ¦¬ν•˜λŠ” κ°€μž₯ 쒋은 방법이 무엇인지 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€.

λͺ¨λ“  4 λŒ“κΈ€

μš°λ¦¬λ„ 이 λ¬Έμ œμ— 직면해 μžˆμŠ΅λ‹ˆλ‹€. ( auto_reload λΌλŠ” μš©μ–΄λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμ— 이 버그λ₯Ό 거의 찾지 λͺ»ν–ˆμŠ΅λ‹ˆλ‹€. 이것은 auto_reload=True λ•Œλ§Œ 관련이 μžˆμŠ΅λ‹ˆλ‹€.)

이것은 μˆ˜μ •ν•˜κΈ°κ°€ μƒλ‹Ήνžˆ κΉŒλ‹€λ‘œμšΈ 것 κ°™μŠ΅λ‹ˆλ‹€. μ΄μƒμ μœΌλ‘œλŠ” get_source uptodate λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ†ŒμŠ€ 파일 자체뿐만 μ•„λ‹ˆλΌ κ°€μ Έμ˜€κ±°λ‚˜ ν™•μž₯ν•˜κ±°λ‚˜ ν¬ν•¨ν•˜λŠ” λͺ¨λ“  μ†ŒμŠ€ νŒŒμΌλ„ 확인해야 ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ uptodate κ°€ μ •μ˜λœ μ‹œμ μ—μ„œλŠ” ꡬ문 λΆ„μ„λ˜μ§€ μ•Šμ€ μ›μ‹œ μ†ŒμŠ€λ§Œ μžˆμœΌλ―€λ‘œ ν•΄λ‹Ή 정보λ₯Ό μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

더 높은 μˆ˜μ€€(예: Template.is_up_to_date )μ—μ„œ κ΅¬ν˜„ν•  수 μžˆμ§€λ§Œ μ»΄νŒŒμΌλŸ¬μ—μ„œ 쒅속성 정보λ₯Ό λ‹€μ‹œ κ°€μ Έμ˜€λ €λ©΄ μƒλ‹Ήν•œ 수술이 ν•„μš”ν•œ κ²ƒμ²˜λŸΌ λ³΄μž…λ‹ˆλ‹€.

λ‚˜λ„ 방금 이것에 λΆ€λ”ͺμ³€λ‹€. 이것은 cache_size λ₯Ό 0으둜 μ„€μ •ν•΄μ•Ό ν•œλ‹€λŠ” 것을 μ˜λ―Έν•˜κΈ° λ•Œλ¬Έμ— κ°œλ°œμ—μ„œ κ½€ μ„±κ°€μ‹  μΌμž…λ‹ˆλ‹€.

λ‚΄λΆ€λ₯Ό νŒŒν—€μ³λ³΄κ³  λ­”κ°€κ°€ λ– μ˜€λ₯΄μ§€ μ•ŠλŠ”μ§€ ν™•μΈν•˜λ €κ³  ν•©λ‹ˆλ‹€. κ·Έ λ™μ•ˆ 더 λ§Žμ€ κ²½ν—˜μ„ 가진 λˆ„κ΅°κ°€κ°€ μ†”λ£¨μ…˜μ΄λ‚˜ λ°©ν–₯을 μ œμ•ˆν•  수 μžˆλ‹€λ©΄ 정말 쒋을 κ²ƒμž…λ‹ˆλ‹€!

λ¬Έμ œλŠ” κ°€μ Έμ˜€κΈ°κ°€ μΊμ‹œλ˜μ§€λ§Œ μΆ”μ λ˜μ§€ μ•ŠλŠ”λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. 이 문제λ₯Ό μ²˜λ¦¬ν•˜λŠ” κ°€μž₯ 쒋은 방법이 무엇인지 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€.

자, μ—¬κΈ°μ„œ λ¬Έμ œλŠ” ν…œν”Œλ¦Ώμ˜ 캐싱이 μ•„λ‹ˆλΌ κ°€μ Έμ˜¨ λ§€ν¬λ‘œμ— μ „λ‹¬λœ λ³€μˆ˜μ˜ 캐싱에 μžˆμŠ΅λ‹ˆλ‹€.
(적어도 λ‚΄ κ²½μš°μ—λŠ”)

λ‚΄ ν•΄κ²° 방법은 λ Œλ”λ§ν•  μ—…λ°μ΄νŠΈλœ μ»¨ν…μŠ€νŠΈ 값을 λ°˜ν™˜ν•˜λŠ” λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμ΄μ—ˆμŠ΅λ‹ˆλ‹€.

λ‚΄ μ‹œλ‚˜λ¦¬μ˜€μ—μ„œλŠ” νŽ˜μ΄μ§€ 맀김을 μœ„ν•œ 맀크둜λ₯Ό λ§Œλ“€κ³  μžˆμ—ˆμŠ΅λ‹ˆλ‹€. λ§€ν¬λ‘œμ—λŠ” μš”μ²­ κ°œμ²΄κ°€ ν•„μš”ν–ˆμŠ΅λ‹ˆλ‹€.

맀크둜 λ‚΄ 초기 μ ‘κ·Ό
{% set pagenum, limit = request.args.pg , request.args.limit %}
이것은 μ²˜μŒμ—λŠ” μž‘λ™ν•˜μ§€λ§Œ 후속 μš”μ²­μ—μ„œ 맀크둜 μ»¨ν…μŠ€νŠΈ 값은 μ„œλ²„κ°€ μž¬λΆ€νŒ…λ˜μ§€ μ•ŠλŠ” ν•œ μ˜μ›νžˆ μΊμ‹œλ©λ‹ˆλ‹€.

맀크둜 λ‚΄ μž‘μ—… 방식
{% set pagenum, limit = request.get_params() %}
이제 맀크둜 캐싱을 ν¬μƒν•˜μ§€ μ•Šκ³  λͺ¨λ“  ν˜ΈμΆœμ—μ„œ μ—…λ°μ΄νŠΈλœ μš”μ²­ λ§€κ°œλ³€μˆ˜λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

λ˜ν•œ 맀크둜λ₯Ό μΊμ‹±ν•˜λ©΄ 응닡 μ‹œκ°„μ΄ ~2.5λ°° λΉ¨λΌμ§„λ‹€λŠ” 사싀도 μ•Œκ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
캐싱 없이 ~= 450ms
캐싱 포함 ~= 150ms

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰