Pull to refresh

Практический JS: избавляемся от утечек памяти в IE

Client optimization *
Translation
Примечание: ниже находится перевод статьи Understanding and Solving Internet Explorer Leak Patterns", в которой автор рассматривает некоторые характерные случаи утечек памяти в IE и предлагает методы для их избежания и устранения. Рассмотренные проблемы не являются чем-то новым или революционным, однако, знать об их существовании должен любой уважающий себя программист клиентских интерфейсов. Мои комментарии далее курсивом.

Опубликована: июнь 2005

Развитие веб-разработок



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

Современные веб-приложения должны разрабатываться с учетом более высоких стандартов. Страница может выполняться в течение часов без дополнительных переходов по сайту, при этом она будет сама динамически запрашивать новую информацию через веб-сервисы. Языковой движок испытывают на прочность сложными схемами отработки событий, объектно-ориентированным JScript и замыканиями (closures), производя на свет все более мощными и продвинутые приложения. При все при этом, учитывая некоторые другие особенности, знание характерных шаблонов утечек памяти становится все более необходимым, даже если они были раньше спрятаны за механизмом навигации по сайту.

Большим плюсом в данной ситуации будет то, что шаблоны утечек памяти могут быть легко обнаружены, если вы знаете, где их искать. Наиболее тяжелые из них, с которыми, возможно, вам довелось столкнуться, имеют подробно описанные методы устранения, которые, скорее всего, в вашем случае потребуют лишь небольшого количества дополнительной работы. Хотя некоторые страницы могут по-прежнему «падать» из-за небольших утечек, самые значительные могут быть легко удалены.

читать дальше на webo.in →
Total votes 34: ↑32 and ↓2 +30
Views 1.1K
Comments 13

Замыкания в C#

.NET *
Перед прочтением статьи, ответьте на следующий вопрос — что будет напечатано, после исполнения следующего кода?

P p = Console.WriteLine; // P объявлен как delegate void P();
foreach (var i in new [] { 1, 2, 3, 4 }) {
  p += () => Console.Write(i);
}
p();
Элементарно?
Total votes 65: ↑53 and ↓12 +41
Views 56K
Comments 43

Программирование в PHP 5.3

Lumber room
Вы наверно слышали о новых особенностях, которые ожидают нас в PHP 5.3, но кто знает где можно их использовать в реальном программировании? Я потратил немного времени чтобы изучить их и решил привести несколько примеров.
Читать дальше →
Total votes 33: ↑28 and ↓5 +23
Views 317
Comments 26

C#-like cобытия для PHP. Reflection, closures…

PHP *
Задача — сделать на PHP эвенты а-ля C# т.е. произвольный объект может генерировать события. Другие объекты могут на эти события подписываться непосредственно у экземпляра генерирующего объекта.

Основное отличие от того что видел ранее — строгая проверка навешиваемого хука. Проверяется наличие метода, количество его аргументов, etc…
Читать дальше →
Total votes 19: ↑10 and ↓9 +1
Views 1.1K
Comments 17

Оптимизация с помощью замыканий

JavaScript *
Дано — раз в секунду дергается AJAX'ом скрипт, в нем несколько вызовов одной функции (назовем ее updater) с разными аргументами. Функция в соответствии с аргументами апдейтит некоторый набор DOM-элементов (меняет контент, скрывает, показывает) на текущей странице. Используется jQuery, визэффекты и т.п. Т.е. на клиента приходит примерно такой код…
updater('id1', 10, 20);
updater('id33', 11, 22);
updater('id181', 102, 27);


* This source code was highlighted with Source Code Highlighter.

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

Требуется по-возможности быстро и безболезненно, не меняя верстку и не отказываясь от jQuery оптимизировать процесс.
Далее...
Total votes 11: ↑7 and ↓4 +3
Views 1.5K
Comments 10

Марк Райнхольд о JDK 7, замыканиях, JRockit и HotSpot

Java *
Translation
Oracle TechCasts возобновились. Сегодня [т.е. 16-го февраля] Марк Райнхольд рассказывал о JDK 7 и отвечал на вопросы зрителей. Райнхольд обсуждал самое существенное, над чем он работает в проекте OpenJDK, и раскрыл некоторые предварительные наметки, направленные на объединение кода JRockit и HotSpot. Project Lambda, о котором обычно говорят, как о «замыканиях для Java», также был темой обсуждения.
Читать дальше →
Total votes 56: ↑49 and ↓7 +42
Views 1.6K
Comments 33

Замыкания в php

VK corporate blog
Не секрет, что в PHP 5.3 был введен ряд интересных новшеств. Разной степени полезности и скандальности. Возможно даже, что выпуск PHP 5.3 — хорошо спланированный PR-ход: самый большой список изменений за последние пять лет, оператор goto (sic!), пространства имен (namespaces) с синтаксисом «не как у всех», позднее статическое связывание (late static binding), более-менее честные анонимные (лямбда) функции (lambda functions), замыкания (closures).
Читать дальше →
Total votes 142: ↑109 and ↓33 +76
Views 46K
Comments 69

Модульный подход в JavaScript

JavaScript *
Translation
Модульный подход довольно распространённая техника программирования в JavaScript. Обычно его понимают довольно хорошо, но продвинутые техники описаны недостаточно. В этой статье я рассмотрю основы и затрону некоторые сложные приёмы, включая один, по моему мнению, оригинальный.

Основы



Мы начнём с несложного обзора модульного подхода, хорошо известного с тех пор, как Эрик Миралья (Eric Miraglia) из YUI впервые об этом написал. Если вам уже знаком модульный подход, переходите сразу к «Продвинутым техникам».

Анонимные замыкания


Читать дальше →
Total votes 133: ↑121 and ↓12 +109
Views 46K
Comments 32

Декораторы в JavaScript

JavaScript *
Sandbox
С давних времён использую декораторы в JavaScript. Недавно увидел хабротопик про примеси, который натолкнул меня на мысль поделиться собственным опытом, ибо технологии немного похожие.

Что меня не устраивает в известных реализациях?


Реализации, предлагаемые по первым ссылкам в Google, работают не тем образом, как это работает в Python. Во многих статьях предлагается создать объект, заполнить его поля функциями и осуществлять вызовы отдекорированных через эти поля.
На первой странице есть несколько ссылок, где используются методы, сходные с моими,
Есть ещё много реализаций, но они мне неинтересны.
Расскажу наиболее правильную с моей точки зрения.

Нормальный декоратор


Итак, что такое декоратор?
Декоратор, это функция, которая добавляет функции-аргументу функционала.
Читать дальше →
Total votes 31: ↑28 and ↓3 +25
Views 9K
Comments 16

Попытка просто объяснить сложные, для новичков, вещи в javascript

JavaScript *
Sandbox
Я попытаюсь просто объяснить, как работают замыкания в Javascript, как работает this, как создавать конструкторы для своих классов и чем различаются различные подходы к их созданию.
Статья не претендует на новаторство, но достаточно доступные объяснения how it works для новичков я не видел, и на мой взгляд — это три самых узких места в Javascript (не привязанному к какому либо контексту, серверу или браузеру, например).
Читать дальше →
Total votes 82: ↑73 and ↓9 +64
Views 22K
Comments 34

Шаблонизация в PHP при помощи лямбда-функций и замыканий

PHP *
Sandbox
Начиная с php 5.3, мы получили замечательную возможность использовать замыкания и анонимные функции. Они, вместе с альтернативным синтаксисом, очень удобны для использования при шаблонизации (конечно, за исключением случаев, когда верстальщику не надо давать доступ к php), а шаблоны на их основе быстры, легко переводятся в байткод акселератором, могут поддерживать блочное наследование, не требуют компиляции и кеширования, поддерживают скины и очень удобны в разработке.
Предполагается, что читатель имеет опыт работы с шаблонизаторами, например twig. Подробности под катом.
Читать дальше →
Total votes 17: ↑11 and ↓6 +5
Views 4K
Comments 19

Извлечение ссылки на объект из замыкания

JavaScript *
var  singleton = (function () {
	var data, method_args;

	data = [];
	method_args = [];

	function add (items) {
		var i;

		data.push(items);
		method_args.push(arguments);
	}

	function remove () {
		data.pop();
		method_args.push(arguments);
	}

	return {
		add : add,
		remove : remove
	}
}());

Есть доступ к объекту singleton.
Про то как получить ссылку на data
Total votes 22: ↑13 and ↓9 +4
Views 1.5K
Comments 19

Javascript: ООП, прототипы, замыкания, «класс» Timer.js

JavaScript *Programming *ООP *
Здравствуйте программисты начинающие, законченные, а также все сочувствующие. Как известно, ничто не познается так хорошо, как на собственном опыте. Главное, чтобы опыт был полезный. И в продолжении этой простой мысли я хочу предложить заняться несколькими полезными делами сразу:
  • Побеседовать на тему «ООП с человеческим лицом».
  • Разобраться с прототипами в javascript, коротко и сердито!
  • Вспомнить, что «замыкание» это не только ценный мех… удар током.
  • Написать на javascript класс Timer — этакий планировщик событий для запуска анимаций, событий, любых функций.
  • Весело провести время!

Предупреждение! Если вы не ждете от статьи ничего веселого… то ошибаетесь. Людям с пониженным чувством юмора читать… еще более рекомендуется! Ну-с, приступим…
Читать дальше →
Total votes 101: ↑87 and ↓14 +73
Views 94K
Comments 51

Наглядный пример использования замыканий в PHP

PHP *
Sandbox
Начиная с версии 5.3, PHP позволяет создавать замыкания. К сожалению, пример их использования в официальной документации http://www.php.net/manual/en/functions.anonymous.php#example-163 (example 3) обладает редкой изощрённостью и надуманностью. Надеюсь, пример под катом поможет увидеть в замыканиях другое применение, кроме как с функциями типа array_map().
Читать дальше →
Total votes 60: ↑41 and ↓19 +22
Views 11K
Comments 40

Применение замыканий в PHP

PHP *
Введение в PHP 5.3 замыканий — одно из главных его новшеств и хотя после релиза прошло уже несколько лет, до сих пор не сложилось стандартной практики использования этой возможности языка. В этой статье я попробовал собрать все наиболее интересные возможности по применению замыканий в PHP.
Читать дальше →
Total votes 71: ↑68 and ↓3 +65
Views 151K
Comments 55

Связные списки в функциональном стиле

Abnormal programming *JavaScript *Functional Programming *
Рассмотрим вариант реализации связных списков через замыкания.

Для обозначения списков будем использовать нотацию, похожую на Haskell: x:xs, где x — начало списка (head), xs — продолжение (tail).



В качестве языка реализации я выбрал JavaScript.

Конструируем список

Читать дальше →
Total votes 44: ↑36 and ↓8 +28
Views 19K
Comments 24

Особенности работы или «За что я люблю JavaScript»: Замыкания, Прототипирование и Контекст

JavaScript *
Tutorial
Зародившись как скриптовый язык в помощь веб-разработчикам, с дальнейшим развитием JavaScript стал мощным инструментом разработки клиентской части, обеспечивающий удобство и интерактивность страницы прямо в браузере у пользователя.

Из-за специфичности среды и целей, JavaScript отличается от обычных языков программирования, и имеет множество особенностей, не понимая которые, довольно сложно написать хороший кроссбраузерный код.

Думаю, что большинство программистов, писавших код на JavaScript больше пары дней, сталкивались с этими особенностями. Цель данного топика не открыть что-то новое, а попытаться описать эти особенности «на пальцах» и «недостатки» сделать «преимуществами».

В данном топике будут рассматриваться:

  1. Замыкания
  2. Прототипирование
  3. Контекст выполнения

Читать дальше →
Total votes 112: ↑91 and ↓21 +70
Views 102K
Comments 85

Ещё один пример использования замыканий в PHP

Website development *PHP *
Sandbox
На Хабре уже было несколько статей с примерами использования замыканий в PHP. Некоторые из них были достаточно абстрактными, некоторые нет. Я приведу ещё один способ применения замыканий в реальных условиях.
Читать дальше →
Total votes 20: ↑11 and ↓9 +2
Views 7.9K
Comments 7

Лямбда-выражения в Java 8

Website development *Programming *Java *
В новой версии Java 8 наконец-то появились долгожданные лямбда-выражения. Возможно, это самая важная новая возможность последней версии; они позволяют писать быстрее и делают код более ясным, а также открывают дверь в мир функционального программирования. В этой статье я расскажу, как это работает.

Java задумывалась как объектно-ориентированный язык в 90-е годы, когда объектно-ориентированное программирование было главной парадигмой в разработке приложений. Задолго до этого было объектно-ориентированное программирование, были функциональные языки программирования, такие, как Lisp и Scheme, но их преимущества не были оценены за пределами академической среды. В последнее время функциональное программирование сильно выросло в значимости, потому что оно хорошо подходит для параллельного программирования и программирования, основанного на событиях («reactive»). Это не значит, что объектная ориентированность – плохо. Наоборот, вместо этого, выигрышная стратегия – смешивать объектно-ориентированное программирование и функциональное. Это имеет смысл, даже если вам не нужна параллельность. Например, библиотеки коллекций могут получить мощное API, если язык имеет удобный синтаксис для функциональных выражений.

Главным улучшением в Java 8 является добавление поддержки функциональных программных конструкций к его объектно-ориентированной основе.
Читать дальше →
Total votes 60: ↑51 and ↓9 +42
Views 436K
Comments 24