Dans mon site Web, www.trailbehind.com, nous avons un ensemble de fichiers javascript qui appartiennent à toutes les pages. Et puis certaines pages incluent des bibliothèques supplémentaires.
Pour les fichiers JS que toutes les pages utilisent (il y a quelques dizaines de fichiers), nous les concaténons et les minimisons lors de la construction.
Il existe un indicateur dans notre fichier de paramètres indiquant s'il faut utiliser le javascript concaténé ou les fichiers séparés sur build. Ceci est critique afin que vous puissiez déboguer le javascript sur le développement, mais utilisez le petit javascript sur un seul fichier en production.
Voici notre code python pour combiner et rapetisser:
import os
import thetrailbehind.lib.jsmin as jsmin
JS_FILES = [ 'lib/json2.js',
'lib/markermanager.js',
'lib/labeledmarker.js',
'lib/rsh/rsh.js',
'lib/showdown.js',
'lib/yui.js',
'lib/dragzoom.js',
'gen/attribute_data.js',
'gen/national-parks.js',
'Widgets/CommentsWidget.js',
'Widgets/Search.js',
'Widgets/MenuWidget.js',
'Widgets/PhotoWidget.js',
'Widgets/ReportList.js',
'Widgets/help.js',
'attributes.js',
'rsh.js',
'map.js',
'mapcontrols.js',
'markers.js',
'amazon.js',
'plan_trip.js',
'init.js',]
def concat(files, base_path, all_file, all_file_min):
if os.path.exists(base_path + all_file):
lasttime = os.path.getmtime(base_path + all_file)
else:
lasttime = 0
out_of_date = False
for file in files:
if os.path.getmtime(base_path + file) > lasttime:
out_of_date = True
break
if out_of_date:
outfile = open(base_path + all_file, 'w')
for file in files:
outfile.write(open(base_path + file).read())
outfile.write("\n")
outfile.close()
alljs = open(base_path + all_file)
allminjs = open(base_path + all_file_min, "w+")
jsmin.JavascriptMinify().minify(alljs, allminjs)
alljs.close()
allminjs.close()
def main():
concat(JS_FILES, '/home/wibge/thetrailbehind/media/javascript/', 'gen/all.js', 'gen/all.min.js')
if __name__ == "__main__":
main()
Et voici le modèle Django/HTML où nous allumons:
{% if use_all_js %}
script type=text/javascript src=/site_media/javascript/gen/all.min.js>
{% else %}
script type="text/javascript" src="/site_media/javascript/rsh.js">
script type="text/javascript" src="/site_media/javascript/amazon.js">
script type="text/javascript" src="/site_media/javascript/map.js">
A BUNCH OF SEPARATE INCLUDES...etc
{% endif %}
Je les ai mis là-dedans parce que je seulement en utilisant le partiel une fois. Si je l'utilisais deux fois, je le déplacerais. Pas besoin de construire pour un usage multiple si je ne l'utilise pas plusieurs fois. –
@Scott, où les déplaceriez-vous? Je suppose que c'est vraiment la question ici. Si vous n'en avez pas besoin sur toutes les pages d'affichage, il semble inutile de les inclure sur la page maître. –