قضبان الأصول تتخلف عن التخزين المؤقت أول أحمال الصفحة القليلة

StackOverflow https://stackoverflow.com/questions/2769547

  •  03-10-2019
  •  | 
  •  

سؤال

نحن نستخدم التخزين المؤقت لأصول القضبان لـ JS و CSS مثل هذا:

<%= stylesheet_link_tag 'reset','global','admins','autocomplete', 'date_input', 'tablesorter', 'partners', 'jqmodal', :media => 'screen', :cache => set_asset_cache(:admins) %>
<%= javascript_include_tag :defaults, 'autocomplete', 'searchbox', 'jqmodal', :cache => set_asset_cache(:admins) %>

في نشرنا نسميه rake tmp:assets:clear كل مرة. تكمن المشكلة في أن الصفحة القليلة الأولى يتم تحميلها بعد نشرها بدون CSS أو JS على الصفحة. أعتقد أنه حتى تم تجديد all.js المخزنة مؤقتًا وجميعها.

ننشر عدة مرات في اليوم ، وهذا أمر مخيف لأي مستخدمين يصادفون صفحة تم ضبطها.

هل وجد الناس أي طريقة لجعل هذا أكثر سلاسة ، لذا فإن الأصول المخزنة مؤقتًا مضمونة لتكون هناك في أول تحميل الصفحة الجديدة؟

هل كانت مفيدة؟

المحلول

ال assethat جوهرة تتناول هذه المشكلة بالضبط. بدلاً من تسلسل الأصول في المرة الأولى التي يتم فيها تحميل الصفحة (مما يزيد من وقت تحميل هذه الصفحة) ، فإنه يسلط الأصول عند النشر بدلاً من ذلك. كمكافأة ، فإن الجوهرة تعمل أيضًا على تقدير CSS و JS ، مما يوفر بايتات ثمينة.

بعد الإعداد ، يكون الاستخدام بسيطًا جدًا:

  • يستخدم include_css :bundle => 'admins' و include_js :bundle => 'admins' في تخطيطك. (يتم تعيين محتويات الحزمة في ملف التكوين للحفاظ على تخطيطك خفيف الوزن.)
  • يضيف rake asset_hat:minify إلى البرنامج النصي الخاص بك. كانت شركتي تستخدمها في الإنتاج مع Capistrano لمدة عام تقريبًا.

هناك المزيد من المعلومات في ReadMe و مستندات, ، وسأكون سعيدًا لسماع أي أسئلة/أفكار!

نصائح أخرى

يمكنك محاولة تسخين ذاكرة التخزين المؤقت أثناء النشر باستخدام WGT ، كمثال (إعادة نشرها بلا خجل):

wget -r -nd --delete-after http://whatever.com/~popular/page/

ومع ذلك ، يجب تنفيذ هذا بعد تبديل Symlink إلى نشرك الجديد. قد يكون الحل الأكثر أناقة هو استدعاء أساليب التخزين المؤقت للأصول يدويًا في النشر ، على الرغم من أنني لست متأكدًا من مدى جدوى ذلك. هنا حيث يتم تنفيذ التخزين المؤقت في القضبان:

# File vendor/rails/actionpack/lib/action_view/helpers/asset_tag_helper.rb, line       273
273:       def javascript_include_tag(*sources)
274:         options = sources.extract_options!.stringify_keys
275:         concat  = options.delete("concat")
276:         cache   = concat || options.delete("cache")
277:         recursive = options.delete("recursive")
278: 
279:         if concat || (ActionController::Base.perform_caching && cache)
280:           joined_javascript_name = (cache == true ? "all" : cache) + ".js"
281:           joined_javascript_path = File.join(joined_javascript_name[/^#{File::SEPARATOR}/] ? ASSETS_DIR : JAVASCRIPTS_DIR, joined_javascript_name)
282: 
283:           unless ActionController::Base.perform_caching && File.exists?(joined_javascript_path)
284:             write_asset_file_contents(joined_javascript_path, compute_javascript_paths(sources, recursive))
285:           end
286:           javascript_src_tag(joined_javascript_name, options)
287:         else
288:           expand_javascript_sources(sources, recursive).collect { |source| javascript_src_tag(source, options) }.join("\n")
289:         end
290:       end

قد تكون قادرًا على تعديل رمز التخزين المؤقت وتشغيله يدويًا عند النشر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top