1. Что такое кеш?
Так называемый кэш функций предназначен для кэширования результатов операций функций.Этот подход является типичным способом обмена памяти на производительность и часто используется для кэширования результатов вычисления данных и кэширования объектов. Кэш — это просто временное хранилище данных, в котором хранятся данные, чтобы будущие запросы на эти данные могли обрабатываться быстрее.
2. Зачем нужно кэширование функций?
На странице внешнего интерфейса некоторые данные (например, данные в словаре данных) могут быть взяты и сохранены в объекте js при первом запросе, чтобы вам не нужно было запрашивать сервер каждый раз, когда он вам понадобится позже. . Для страниц, которые интенсивно используют словари данных для заполнения раскрывающихся списков, этот подход может значительно сократить доступ к серверу. Проще говоря, это должно обеспечить удобство и сократить количество запросов и затрачиваемое время.
3. Каков принцип реализации кэша функций?
- Закрытие
- Функции высшего порядка
Закрытие
Закрытие действий: Закрытие javascript представляет собой большую трудность, но также и его характеристики. Многие продвинутые приложения должны полагаться на достижение закрытия. Затворы можно использовать во многих местах. Это наиболее полезно для двоих, один может читать переменную внутри функции, а другой - чтобы значения этих переменных оставались в памяти и не очищались автоматически после вызова функции. Я думаю, что роль замыкания хорошо понятна: оба хотят повторно использовать переменные, они не хотят, чтобы глобальная переменная была загрязнена. Давайте рассмотрим небольшой пример:
var object = {
fn: function (){
let result = new Array()
for(var i =0; i < 10; i++) {
result[i] = function (num) {
return num;
}(i)
}
return result
}
}
console.log(object.fn());
//[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Принцип: поскольку for каждый раз выполняет анонимную функцию, каждое выполнение имеет свою собственную среду выполнения и свою область видимости.В JavaScript все функции могут обращаться к области видимости верхнего уровня. Поэтому определите дочернюю функцию в родительской функции, и дочерняя функция сможет получить доступ к переменным родительской функции. Подфункции эквивалентны замыканиям. Если счетчикiОпределяется в родительской функции, а затем вызывается счетчиком в дочерней функции.i, Затем подсчитываются подфункции, выполняемые вне родительской функции. Тогда счетчик только через доступ к вложенной функции, и каждый счетчик не будет сбрасываться (поскольку мы делаем это подфункции, счетчик будет сбрасываться только при выполнении родительской функции).
ES5 — это только функциональное поле и глобальный масштаб, который приносит много неразумных сцен. Например: переменные внутреннего уровня могут охватывать внешние переменные; переменные цикла, используемые для подсчета, являются глобальными переменными. Возможно, потребуется использовать замыкание. Тем не менее, ES6 добавляет ключевое слово Let const, существует уникальная область на уровне блоков, поэтому появление области на уровне блоков фактически делает выражение функции немедленного выполнения, которое получает широкое применение, больше не будет необходимо.
Функции высшего порядка
Функции JavaScript фактически указывают на переменную. Поскольку переменные могут указывать на функции, а параметры функций могут принимать переменные, то функция может принимать в качестве параметра другую функцию.Такой тип функции называется функцией высшего порядка. Другими словами, это функция, которая возвращает функцию.
Давайте рассмотрим небольшой пример объединения функций высшего порядка и замыканий:
var add = function() {
var num = 0
return function(a) {
return num = num + a
}
}
add()(1) // 1
add()(2) // 2
Примечание: две функции add()(1) и add()(2) здесь не будут влиять друг на друга. Можно понять, что каждый раз, когда функция добавления запускается, она возвращает другую анонимную функцию, которая является возвратом после каждого добавить run.Функции на самом деле разные, поэтому на результаты бега это не повлияет. В основном использование замыканий для сохранения области видимости.
Если написать по-другому, например:
var add = function() {
var num = 0
return function(a) {
return num = num + a
}
}
var adder = add()
adder(1); // 1
adder(2); // 3
В этом случае операция продолжится на основе результата предыдущей операции, что означает, что при работе двух сумматоров вызывается одно и то же число.
4. JS реализует кеширование функций
Здесь можно использовать идею функций высшего порядка для реализации простого кеша.Объект используется для хранения входных параметров внутри функции.Если вы в следующий раз вводите те же параметры, сравните свойства объекта и возьмите значение из объекта.Выходите, не нужно продолжать выполнение, что значительно экономит время ожидания клиента.
const memorize = function(fn) {
const cache = {} // 存储缓存数据的对象
return function(...args) { // 这里用到数组的扩展运算符
const _args = JSON.stringify(args) // 将参数作为cache的key
return cache[_args] || (cache[_args] = fn.apply(fn, args)) // 如果已经缓存过,直接取值。否则重新计算并且缓存
}
}
const add = function(a, b) {
console.log('开始缓存')
return a + b
}
const adder = memorize(add)
Способ вызова очень прост, прямо дайтеsumПросто передайте параметры: здесь он вызывается три раза подряд, давайте посмотрим на вывод:
console.log(adder(2, 6)) // 输出结果: 开始缓存 8 // cache: { '[2, 6]': 8 }
console.log(adder(2, 6)) // 输出结果: 8 //cache: { '[2, 6]': 8 }
console.log(adder(10, 10)) // 输出结果: 开始缓存 20 // cache: { '[2, 6]': 8, '[10, 10]': 20 }
Видно: только в первый раз выведет 'start cache', после этого, пока параметры одинаковые, каждое значение будет браться в кеш. Здесь следует отметить, что кэш нельзяMapструктура данных, поскольку используются ключи Карты===Сравнение,[1]!==[1], поэтому даже если передается тот же объект или массив, он все равно сохраняется как другой ключ.
5. конец
Функциональное программирование Все более популярных, все более и более важных! Как новичок, нам также нужно научиться видеть все больше и больше практики. Осторожно прочитав руководство, чтобы лично надеяться, что мы сможем добиться этого, так называемый глаз более тысячи раз лучше передать! Если эта статья может помочь вам, скажи мне, что вы хотите вручную указывать похвалы ~ ~ Я слышал, как мой бог большие пальцыки от списка? ? ?