2013-09-09 1 views
5

Я попробовал fay-jquery, а прилагаемый образец файла test.hs дал команду whooping 150 kb js-файла. Даже с закрытием компиляции он по-прежнему 20 kb.Размер файла, сгенерированного сгенерированным файлом

Я понимаю, что он должен носить с собой исполняемые файлы, stdlib и jquery.

Я могу сказать fay не генерировать stdlib (--no-stdlib и --no-builtins flags). Но я не знаю, как сказать, чтобы не включать код jquery.

Итак, мой вопрос: как я могу разделить эти статические части на отдельный файл js и генерировать только код модуля?

Таким образом, большая часть кода будет загружена только один раз (и кэширована), и я могу создать много меньших js-файлов для отдельных веб-страниц.

ответ

1

Да, безопасно разделять модули вверх, начиная с Fay 0.16, все модули могут существовать автономно (до этого вы все равно можете разделить время исполнения и фаи-базы). Для этого есть несколько флагов, --print-runtime и --no-stdlib. Компиляция с оптимизацией (-O, это увеличивает выходной размер, но закрытие будет в состоянии свести его еще лучше).

Также помните, что веб-сервер должен gzip это. Это приносит размер кода до 4.5kiB. Это довольно прилично, не так ли?

Возможно, вы захотите рассмотреть возможность размещения всего вашего javascript в одном файле, что означает более медленную начальную загрузку, но затем пользователи будут кэшироваться для будущих загрузок страниц.

Причина, по которой размер файла настолько велик, что fay-jquery имеет множество привязок FFI, которые производят много информации о перекодировке. Я думаю, что fay-jquery можно было бы оптимизировать здесь, чтобы, например, использовать Ptr JQuery, а не только JQuery в типах, или выяснив, что во время компиляции это не нужно, или абстрагирование конверсий больше в выводе компилятора.

Еще одна возможная проблема, которую я понял пару дней назад, заключается в том, что вывод теперь находится в глобальной области действия, а не в закрытии, что может означать, что закрытие google не может удалить избыточный код, а также ранее (не успел исследовать это еще). Возможно, необходимо сформировать модули для создания замыкания для каждого модуля.

См. Также Reducing output size на wiki.

+0

Я знаю, что могу редактировать файлы js вручную и разделить их и загрузить их отдельно. Возможно, мой вопрос был неясен. Я спрашиваю, как предотвратить fay генерирование всего этого кода, как только я сохранил его в отдельный файл? Я попробовал все упомянутые вами флаги. И в файле результатов по-прежнему много материала. Я хочу, чтобы он генерировал только код самого модуля, не включая какие-либо из stdlib и jquery. –