В JavaScript браузеры, особенно браузеры на мобильных устройствах, выделяют очень ограниченную память, и то, как сохранить память, стало очень значимой вещью. Эффективный способ сохранить память - уменьшить количество объектов.
Режим вылета (выпускной вес) запускает технологию совместного использования для эффективной поддержки большого количества мелкозернистых объектов, избегая накладных расходов большого количества небольших классов с тем же контентом (например, потребление памяти) и позволяя каждому делиться классом (MetaClass).
Схема энциклопедии может избежать большого количества накладных расходов очень похожих классов. При программировании иногда необходимо создать большое количество мелкозернистых экземпляров класса для представления данных. Если вы можете обнаружить, что эти экземпляры имеют в основном одинаковые накладные расходы, за исключением нескольких параметров, вы можете значительно уменьшить количество классов, которые необходимо создать. Если эти параметры могут быть перемещены за пределы экземпляра класса и передавать их при вызове метода, количество отдельных экземпляров может быть значительно уменьшено путем обмена.
Есть два способа применения режима энциклопедии в JavaScript. Во -первых, применить его на уровне данных, в основном к большому количеству аналогичных объектов в памяти; Второе - применить его на уровне DOM, энциклопедия может использоваться в центральном менеджере событий, чтобы избежать добавления ручек событий в каждый дочерний элемент в родительском контейнере.
Существует две важные понятия во внутреннем и внешнем состоянии внутреннего состояния. Внутреннее состояние управляется внутренними методами в объекте, а внешняя информация может быть удалена или сохранена снаружи.
Говоря о том, чтобы сначала ущипнуть оригинальную модель, а затем создать конкретные модели с различными характеристиками в зависимости от различных случаев и сред. Очевидно, что здесь необходимо генерировать разные новые объекты, поэтому в режиме полусреднего веса часто появляется заводский режим. Внутреннее состояние вылета используется для обмена. Фабрика в полусреднем весе отвечает за поддержание бассейна в полусреднем весе (пул режима) для хранения объектов с внутренним состоянием.
Мы можем заменить все объекты одним и тем же внутренним состоянием одним и тем же общим объектом, и для создания такого общего объекта требуется синглтонский фабричный метод вместо нормального конструктора. Это может отслеживать отдельные объекты, которые были созданы созданы, так что новый объект создается только в том случае, если внутреннее состояние требуемого объекта отличается от существующего объекта. Внешнее состояние объекта сохраняется в объекте менеджера. При вызове метода объекта менеджер передаст эти внешние состояния в качестве параметров.
Сохраните данные объекта в двух разных объектах (общий объект, объект менеджера)
1. Общий объект (наслаждайтесь исходным объектом)
2. Метод завода Singleton (создать общий объект)
3. объект менеджера (управление внешним состоянием)
Например, книга в библиотеке может быть представлена объектом, который имеет много атрибутов.
var book = function (id, заголовок, автор, жанр, pagecount, publisherid, isbn, cakeoutdate, cakeoutmember, duereturndate, gaving) {... // код инициализации} book.prototype = {getTitle: function () {return.title; }, ... // Обновление метода статуса кредитования UpdateCheckoutStatus: function (bookId, newStatus, cakeOutdate, cakeoutmember, newReturndate) {...}, // rew extendcheckoutperiod: function (bookid, newreturndate) {...}, // Будь то истекает ispastdue: function (bookid)}}}Программа может быть в порядке в начале, но со временем книги могут увеличиваться в больших количествах, и каждый тип книги имеет разные версии и количества, вы обнаружите, что система становится медленнее и медленнее. Тысячи книжных объектов можно представить в памяти, и нам нужно использовать режим энциклопедии для оптимизации.
Мы можем разделить данные на два типа данных. В той же книге данные, связанные с объектами книги (заголовок, автора и т. Д.), Можно отнести к внутренним свойствам, в то время как (Checkoutmember, Duereturndate и т. Д.) могут быть связаны с внешними свойствами. Таким образом, следующий код может поделиться одним и тем же объектом в одной и той же книге, потому что независимо от того, кто заимствует книгу, если книга такая же книга, основная информация такая же: такая же: такая же:
// Общий объект var book = function (заголовок, автор, жанр, pagecount, publisherid, isbn) {this.title = title; this.author = автор; this.genre = жанр; this.pagecount = pagecount; this.publisherid = publisherid; this.isbn = isbn;};Давайте определим основную фабрику, чтобы проверить, был ли объект книги создан ранее, вернемся, если есть, и воссоздать и хранить ее, чтобы он мог продолжать доступ позже, что гарантирует, что мы создаем только один объект для каждой книги:
/* Book Factory Singleton*/var bookfactory = (function () {var exactingbooks = {}; return {createbook: function (заголовок, автор, жанр, pagecount, publisherid, isbn) {/* Найти, создавать ли это*/var eastiangbook = существующий книг [isbn]; = новая книга (заголовок, автор, жанр, Pagecount, Publisherid, ISBN);Внешнее состояние относительно простое. За исключением книги, которую мы инкапсулировали, здесь нужно управлять всем остальным:
/*BookRecordmanager singleton для управления заимствованием*/var bookRecordmanager = (function () {var bookRecorddatabase = {}; return {/*Добавить запись заимствования*/addBookRecord: функция (id, название, автор, жанр, pagecount, varistise) BookFactory.CreateBook (название, автор, жанр, PageCount, Publisherid, ISBN); CheckOutdate, CheckOutmember, NewReturnDate) BookRecordDatabase [bookId] .duereturndate = newreturndate;Таким образом, мы сохранили ту же информацию одной и той же книги в объекте Bookmanager и сохранили только одну копию; По сравнению с предыдущим кодом, мы можем обнаружить, что он сохраняет много памяти.
Объектный пул
Пул объектов является еще одним решением для оптимизации производительности, которое имеет некоторые сходства с режимом Xiangyuan, но не разделяет внутреннее состояние и внешнее состояние.
Общая реализация пула объектов:
var objectPoolFactory = function (createObjfn) {var objectPool = []; // Пул объектов return {create: function () {// retive var obj = objectPool.length === 0? createObjfn.apply (this, аргументы): objectpool.shift (); вернуть OBJ; }, восстановить: function (obj) {// retive objectpool.push (obj); }}};Теперь используйте ObjectPoolFactory, чтобы создать пул объектов, который загружает некоторые iframes:
var iframefactory = objectPoolFactory (function () {var iframe = document.createElement ('iframe'); document.body.appendchild (iframe); iframe.onload = function () {iframe.onload = null; // Предотвращение ошибок iframe загрузки iframefactory.recover (iframe); вернуть iframe;}); // вызовать var iframe1 = iframefactory.create (); iframe1.src = 'http://www.qq.com';Список литературы: «Паттерн JavaScript» «Образец проектирования и разработки JavaScript»
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.