Размер файла, созданного Fay

Я попробовал fay-jquery, и включенный пример файла test.hs привел к тому, что файл js за 150 килобайт. Даже с компиляцией замыкания это все еще 20 кб.

Я понимаю, что он должен нести оболочки времени выполнения, stdlib и jquery.

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

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

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

1 ответ

Решение

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

Также помните, что веб-сервер должен gzip это. Это уменьшает размер кода до 4,5 КБ. Это довольно прилично, правда?

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

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

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

Также см. Уменьшение размера вывода в вики.

Другие вопросы по тегам