All streams
Search
Write a publication
Pull to refresh
4
0

User

Send message
Вы правы. На php в таком виде решение выглядит нелепо.
Можно переконфигурировать так, чтобы nginx смотрел сначала есть ли файл в кэше, а уж потом при отсутствии оного вызывал какой-нибудь icon.php, который бы в свою очередь сгенерировал иконку и сохранил результат в кэш:

<img src=”/icon/star-red-00ff000--green.svg”>

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

На node.js решение выглядело бы интереснее. Держа шаблон svg-икноки в оперативной памяти, node выстреливала бы готовые файлы быстрее nginx, который каждый раз читает статику с диска; и плюс не нужно сохранять кэш, а в процессе разработки шаблона сайта (например, подборе цветов иконок, их толщин линий) кэш вообще не нужен. Оформить это как подключаемый middleware. Было бы интересно!
Если не трудно, опишите в чем проявляется колбас jQuery? В последний раз (уже довольно давно) на nw делал десктопное приложение. Клиентского js, как такового, я не писал. Но был подключен jQuery и Bootstrap. И, вроде бы, все bootstrap-овское работало как часы без костылей.
А я использовал mysql и mongoose как в мелких, так и в крупных проектах. И бед не знал. И мне всегда было глубоко пофигу неважно что на кросс-sql-ность (sqlite, mysql, pgsql, ...), что на кросс-nosql-ность (mongo, couchdb, redis, ...). В некоторых проектах даже использовал для разных данных оба модуля mysql и mongoose одновременно.
Собственно, простота реализации, модернизации и оптимизации!
Еще добавлю, что backbone можно подключать через require(), но jQuery я бы подключал через тэг <script src=""></script>.

Кстати, разницы в поведении require() в main.js и index.html нет, если они находятся в одной папке.
Насчет глобального объекта — не уверен, сработает ли такой фокус. Разве если в main.js добавить свойство в тот же process, оно будет доступно в «клиентской» части? Если да — спасибо, пригодится.

На самом деле, и main.js и index.html выполняются node. Но, main.js и index.html для node — это разные модули. Совершенно справедливо, что переменные одного модуля не видны в других модулях. Иначе, подключив все нужные модули npm, мы бы получали кашу из переменных, и могли бы сломать работу, если переменные определены в разных модулях дважды.

Передавать переменные в index.html лучше через свойство global чем через свойство process. Так и логичнее, и доступ к переменной будет короче на длину "process.".

Переменная, определенная как свойство global будет доступна для всех модулей, выполняющихся после определения. Но, не стоит бояться "перегрузки" глобальных имен локальными в других модулях. Например, такое использование будет работать в штатном режиме:

// module1.js
global.a = "hello";

// module2.js
console.log(a);  // => hello

// module3.js
var a = 0;
console.log(a);  // => 0
Кстати, справились с той проблемой так: вместо передачи массивов как аргументов, стали объявлять эти массивы как property у объектов-контроллеров, и доступ к ним в методах осуществлялся через this. Это давало значительный прирост производительности в ходе работы с приложением.
Отвечу на один вопрос, заданный несколько раз выше, здесь.
Не помню точно, как дошел до этой практики. Уже тоже пруф найти не могу. Помню, дело было за долго до nodejs. Делали web-интерфейс на ExtJS для несложной но ёмкой БД. При активной передаче некоторых массивов описанным выше способом вешался весь браузер.
Сейчас похожее поведение может проявляться при вызовах из JS функций с кодом, например, написанных на Си.
Подробнее здесь https://habrahabr.ru/company/plarium/blog/277129/

По поводу аргументов — у меня речь шла именно про большИе массивы. Разумеется, никто не запрещает передавать небольшие объекты/массивы, например, в качестве конфига. Дело в том, что в некоторых случаях использования массивов в качестве аргументов вызова функции, доступ к данным массива осуществляется не как через ссылку на исходный массив-объект, а происходит копирование массива и доступ к данным осуществляется уже к копии массива.
Зашел на страницу статьи из-за горячего заголовка. Ожидал новую тру-практику. На деле же — просто разбор собственных полетов.

Во-первых, js-движку по барабану динамическая ли функция или не динамическая. По состоянию, важному для производительности, можно выделить откомпилированные функции и неоткомпилированные. Обычно функции компилируются при первом выполнении. Существуют и способы определения откомпилированных функций и без выполнения функции. Например, через new Function(..).

По поводу массивов. Вы правильно заметили, создание массива съедает немного производительности. Вы забыли учесть, что имеет место быть не менее трудоемкая задача — утилизация массива. В вашем же примере основная производительность тратится на постоянное изменение размера массива. По уму, размер массива надо задавать при создании. И, по возможности, следует пользоваться типизированными массивами.

Стоит также отметить, что ни в коем случае нельзя пользоваться большими массивами через замыкания или параметры вызова функций. Это переполняет стек процесса и создает немалую нагрузку на процессор.
В целом, вы правы, но мне все же интересно вычислить реальные цифры. Статье больше трех лет, по меркам nodejs — это целое поколение в эволюции скриптов node :-) Думаю, когда встанет в очередной раз этот вопрос, запилю бэнчмарки самостоятельно, может даже, напишу об этом статью на Хабр.
зачем? там без help-а и разбора параметров легко уложишься в 100 байт. А то и в 50!
Вот я и говорю, переписывали содержание «format.com» на бумажку, и по бумажке набирали содержание «format.com» через hex-редактор.

В те времена, в школе дисководы были отключены, а дома даже принтер — это уже роскошь!
Приходилось переносить .com-файлы ручками через бумажку.
Зачем Turbo Pascal?

Тут нужен всего-лишь hex-редактор. Программу набирали вручную, списывая код с листочка (так как дисководы были отключены).
Понимаю, что .NET устарел. На тот момент, .NET был в самый раз.
Не уверен, но скорее всего, Delphi тоже идет в ногу со временем.

Delphi.NET — это обертка над .NET. Это не полноценная реализация .NET, а лишь провайдер, соединяющий Delphi с .NET. Это сделано для того, чтобы компоненты могли вытаскиваться на форму. В противном случае, .NET компонентами можно было пользоваться хоть на Delphi 7. Только, приходилось бы их создавать и манипулировать непосредственно из кода программы.
Давно это было, когда учился еще в школе. Вспоминаю.
По всей видимости, речь шла не о самой format.com, а о том, что можно набрать в .com-файле, что бы выполнилось что-то вроде format.com c: /q. Из рабочих инструментов Norton Commander и Turbo Pascal. А сам DOS был урезан на вредные утилиты типа format.com.
На чистом ассемблере без help-а и парсинга параметров вполне могла уместиться в килобайт.
Точно, ошибался. Стало интересно, скачал DOS 6.22, там format.com занимал 23кб.
Могу ошибаться, но реализация format.com в MSDOS, как раз, занимала около 30 байт.
Не уверен, что это решило проблему, но отмечу, что с Delphi 2006 (он же BDS 4.0) есть поддержка .NET-компонентов.

Information

Rating
Does not participate
Registered
Activity