Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   DHTML/JS/CSS (http://www.flasher.ru/forum/forumdisplay.php?f=24)
-   -   Как оптимизировать JavaScript? (http://www.flasher.ru/forum/showthread.php?t=52199)

Andyfor 02.12.2003 12:17

Как оптимизировать JavaScript?
 
Приветствую, уважаемые!
Вопрос следущий:
имею меню, небезызвестное [url=http://www.webreference.com/HierMenus[/URL] (4) .
Все хорошо - и в IE кажется, и в NN, и в Мозилле.

НО! Тормоза при загрузке в IE.
Просто подвисает минуты на полторы (!), подозрение на то, что начинает компилить код (файл, идущий в пакете, кило под 40-50 тянет - многовато) - винт работает вовсю.

Это конечно бесит.
Вопрос: можно ли какими либо программными средствами оптимизировать сам код за счет того, что убрать всевозможные варианты настройки, и подставить конкретные параметры там, где надо?

Может Вы сталкивались с подобной проблемой, или у вас есть мысли? Поделитесь!
Заранее благодарен.
С уважением,
Андрей Ч.

mike_sobolev 10.12.2003 00:47

Браузер код не компилирует, а интерпритирует. Это, как говоритца, две большие разницы.
А почему так долго (как ты описал) работает и винт хрипит - х.з. Ссылка мёртвая.

Crazy 10.12.2003 02:09

Цитата:

Оригинал написал(а) mike_sobolev
Браузер код не компилирует, а интерпритирует. Это, как говоритца, две большие разницы.
Любопытно: а как мсье выяснил, что браузер перед исполнением не компилирует скрипты? Каким-то логическим путем или просто прозрением? :) На MSDN'е об этом ни слова. Мозилла, если мне память не изменяет, таки компилирует скрипты в байткод, за IE не скажу.

Цитата:

А почему так долго (как ты описал) работает и винт хрипит - х.з. Ссылка мёртвая.
http://www.webreference.com/dhtml/hiermenus/

mike_sobolev 10.12.2003 10:27

Да потому что, мусье(?), скриптовые языки впринципе не компилируются.
Это интерпритируемый язык по определению.
Раскиньте извилиной и прикиньте как быстро работал бы ваш браузер при компиляции 20-30 вставок JS в хтмл код...
Да и отладчик тогда бы работал несколько по-иному.
И вообще, по-моему в данном вопросе (по поводу js) сомнений вообще возникать не должно.

ps
А html тоже компилируется? :-)

Crazy 10.12.2003 11:36

Цитата:

Оригинал написал(а) mike_sobolev
Да потому что, мусье(?), скриптовые языки впринципе не компилируются.
Друг мой, ты опять бредишь. Простой пример: python. Для него отчетливо видно, что компиляция есть -- результат даже пишется в отдельные файлы.

Все нормальные реализации принципиально скриптового TCL -- с компиляцией в байткод.

Цитата:

Это интерпритируемый язык по определению.
По какому определению? Которое ты сейчас выдумал для обоснования бреда? :)

Цитата:

Раскиньте извилиной и прикиньте как быстро работал бы ваш браузер при компиляции 20-30 вставок JS в хтмл код...
Прекрасно работал бы. Куда лучше, чем исполнение цикла из 1000 итераций, в котором тупой интерпретатор заново 1000 раз парсит тело цикла.

Цитата:

Да и отладчик тогда бы работал несколько по-иному.
И как бы он работал? :D

Цитата:

И вообще, по-моему в данном вопросе (по поводу js) сомнений вообще возникать не должно.
Не должно кому? :)

Цитата:

А html тоже компилируется? :-)
Слово "компилируется" не может быть строго применено к сущности, которая не является языком программирования. Если брать несколько расширенное понимание, то да. В виденных мной исходниках аналогичная фаза присутствует.

Crazy 10.12.2003 14:30

В целях экономии времени на бессмысленный спор:

1. Берем Rhino (реализация Javascript).
2. Открываем исходники класса Codegen в пакете org.mozilla.javascript.optimizer.
3. Читаем, как реализован метод compile().

Если после этого останется желание рассуждать на тему "в Javascript нет и не может быть компиляции", то это уже клиника и амбулаторно не лечится.

mike_sobolev 10.12.2003 19:23

Crazy, чтоб у тебя извилина так же работала, как язык подвешан.
П по поводу интерпритируемости js - спроси у какого-нибудь умного дяди, если сам настолько Crazy, что понять не можешь.
По-моему, тема исчерпана.
Но ты можешь ещё что-нибудь написать.

Crazy 10.12.2003 19:49

Цитата:

Оригинал написал(а) mike_sobolev
Crazy, чтоб у тебя извилина так же работала, как язык подвешан.
Спасибо. Твоими молитвами.

Цитата:

П по поводу интерпритируемости js - спроси у какого-нибудь умного дяди, если сам настолько Crazy, что понять не можешь.
Полагаю, разработчики Мозиллы достаточно умные дяди. Вот у них и спросим. И вот, что они нам отвечают:

Цитата:

The JS engine supports JS 1.0 through JS 1.4. JS 1.3 and greater conform to the ECMAScript-262 specification. At its simplest, the JS engine parses, compiles, and executes scripts containing JS statements and functions. The engine handles memory allocation for the JS data types and objects needed to execute scripts, and it cleans up--garbage collects--the data types and objects in memory that it no longer needs.

[поскипано]

Embed the appropriate JS engine call(s) in your application to compile and execute the script. You have two choices: 1.) compile and execute a script with a single call to JS_EvaluateScript, JS_EvaluateUCScript or 2.) compile the script once with a call to JS_CompileScript or JS_CompileUCScript, and then execute it repeatedly with individual calls to JS_ExecuteScript.
Ну что теперь? Объявишь, что разработчики Мозиллы тоже совсем крэйзи и, в отличие от тебя, нихрена в Javascript'е не секут? :D

Цитата:

По-моему, тема исчерпана.
Разумеется, исчерпана. Я тебе указал на конкретное место в исходниках реализации Javascript, в котором находится код компилятора. Ответить на это, как я вижу, тебе абсолютно нечего -- кроме "спроси умного дядю" и тому подобной интеллектуальной мастурбации.

Цитата:

Но ты можешь ещё что-нибудь написать.
Ну хоть одна правильная догадка во всем треде. Молодец.

sts 11.12.2003 21:13

ответ
 
и скрипт, и массив хранятся в кэше и на скорость загрузки никак не влияют (только в первый раз и то немного). тормоза появляются при обработке массивов

я гружу их постепенно:

HM_GL_CreateChildrenJIT = true;
HM_GL_CreateMenusOnLoad = false;

Удачи

Crazy 12.12.2003 14:29

sts, меня смущает "винт работает вовсю". Как ни старался -- не могу от этого пакета такого добиться...


Часовой пояс GMT +4, время: 01:30.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.