"ফাইল সিস্টেমের উপর নির্ভর করে"
কিছু ব্যবহারকারী উল্লেখ করেছেন যে পারফরম্যান্স প্রভাব ব্যবহৃত ফাইল সিস্টেমের উপর নির্ভর করে। অবশ্যই. এক্সটি 3 এর মতো ফাইল সিস্টেমগুলি খুব ধীর হতে পারে। কিন্তু এমনকি যদি আপনি EXT4 অথবা XFS ব্যবহার বাধা দিতে পারেনা যে মাধ্যমে একটি ফোল্ডার তালিকা ls
বা find
বা FTP মত একটি বহিস্থিত সংযোগ মাধ্যমে একটি ধীর ধীর হয়ে যাবে।
সমাধান
আমি @armandino এর মতোই পছন্দ করি । এর জন্য আমি পিএইচপি-তে এই ছোট্ট ফাংশনটি আইডিগুলিকে কোনও ফাইলপথে রূপান্তর করতে ব্যবহার করি যা প্রতি ডিরেক্টরি প্রতি 1000 ফাইলের ফলাফল করে:
function dynamic_path($int) {
// 1000 = 1000 files per dir
// 10000 = 10000 files per dir
// 2 = 100 dirs per dir
// 3 = 1000 dirs per dir
return implode('/', str_split(intval($int / 1000), 2)) . '/';
}
অথবা আপনি যদি আলফা-সংখ্যার অক্ষর ব্যবহার করতে চান তবে আপনি দ্বিতীয় সংস্করণটি ব্যবহার করতে পারেন:
function dynamic_path2($str) {
// 26 alpha + 10 num + 3 special chars (._-) = 39 combinations
// -1 = 39^2 = 1521 files per dir
// -2 = 39^3 = 59319 files per dir (if every combination exists)
$left = substr($str, 0, -1);
return implode('/', str_split($left ? $left : $str[0], 2)) . '/';
}
ফলাফল:
<?php
$files = explode(',', '1.jpg,12.jpg,123.jpg,999.jpg,1000.jpg,1234.jpg,1999.jpg,2000.jpg,12345.jpg,123456.jpg,1234567.jpg,12345678.jpg,123456789.jpg');
foreach ($files as $file) {
echo dynamic_path(basename($file, '.jpg')) . $file . PHP_EOL;
}
?>
1/1.jpg
1/12.jpg
1/123.jpg
1/999.jpg
1/1000.jpg
2/1234.jpg
2/1999.jpg
2/2000.jpg
13/12345.jpg
12/4/123456.jpg
12/35/1234567.jpg
12/34/6/12345678.jpg
12/34/57/123456789.jpg
<?php
$files = array_merge($files, explode(',', 'a.jpg,b.jpg,ab.jpg,abc.jpg,ddd.jpg,af_ff.jpg,abcd.jpg,akkk.jpg,bf.ff.jpg,abc-de.jpg,abcdef.jpg,abcdefg.jpg,abcdefgh.jpg,abcdefghi.jpg'));
foreach ($files as $file) {
echo dynamic_path2(basename($file, '.jpg')) . $file . PHP_EOL;
}
?>
1/1.jpg
1/12.jpg
12/123.jpg
99/999.jpg
10/0/1000.jpg
12/3/1234.jpg
19/9/1999.jpg
20/0/2000.jpg
12/34/12345.jpg
12/34/5/123456.jpg
12/34/56/1234567.jpg
12/34/56/7/12345678.jpg
12/34/56/78/123456789.jpg
a/a.jpg
b/b.jpg
a/ab.jpg
ab/abc.jpg
dd/ddd.jpg
af/_f/af_ff.jpg
ab/c/abcd.jpg
ak/k/akkk.jpg
bf/.f/bf.ff.jpg
ab/c-/d/abc-de.jpg
ab/cd/e/abcdef.jpg
ab/cd/ef/abcdefg.jpg
ab/cd/ef/g/abcdefgh.jpg
ab/cd/ef/gh/abcdefghi.jpg
আপনি যেমনটি $int
রূপান্তরটির জন্য দেখতে পাচ্ছেন প্রতিটি ফোল্ডারে 1000 টি ফাইল এবং 99 টি ডিরেক্টরি সহ 99 টি ডিরেক্টরি রয়েছে ...
তবে ভুলে যাবেন না যে অনেক ডিরেক্টরিতে একই কর্মক্ষমতা সমস্যার কারণ হয়!
সর্বশেষে আপনার কীভাবে ফাইলের পরিমাণ হ্রাস করা যায় সে সম্পর্কে চিন্তা করা উচিত। আপনার টার্গেটের উপর নির্ভর করে আপনি একাধিক ক্ষুদ্র চিত্র যেমন অবতার, আইকন, স্মাইল ইত্যাদি একত্রিত করতে সিএসএস স্প্রেটস ব্যবহার করতে পারেন বা আপনি যদি অনেকগুলি নন-মিডিয়া ফাইল ব্যবহার করেন তবে এগুলি JSON ফর্ম্যাটে মিশ্রণ বিবেচনা করুন। আমার ক্ষেত্রে আমার কাছে কয়েক হাজার মিনি-ক্যাশ ছিল এবং অবশেষে আমি তাদের 10 টি প্যাকগুলিতে একত্রিত করার সিদ্ধান্ত নিয়েছি।